没有活动的事件上下文- RESTeasy, Seam



我试图在JBoss 7上运行的应用程序中添加一个restasy的RESTful web服务。

我想使用尽可能少的Seam,但我需要它的依赖注入。

我的REST端点如下:

@Name("myEndpoint")
@Stateless
@Path("/path")
@Produces(MediaType.APPLICATION_JSON+"; charset=UTF-8")
public class MyEndpoint {
  @In private FooService fooService;
  @GET
  @Path("/foo/{bar}")
  public Response foobar(@CookieParam("sessionId") String sessionId, 
                             @PathParam("bar") String bar)
  { ... }
}

我正在使用扩展Application的类。没有XML配置。我可以使用web服务方法,它们工作,但我总是得到一个IllegalStateException:

Exception processing transaction Synchronization after completion: java.lang.IllegalStateException: No event context active

完成加

我确实尝试了文档中的所有方法,但我无法摆脱它。如果我省略了@Stateless注释,我就没有完成任何注入。添加@Scope不起任何作用。通过seam/resource/访问服务甚至不能工作(即使没有@ApplicationPath的Application类)。

如果我不使用Dep. Injection,而是在中添加每个方法

fooService = Component.getInstance("fooService");
Lifecycle.beginCall();
...
Lifecycle.endCall();

这不是一个很好的解决方案。不行,也不行

问题已经解决。由于某种原因(仍然不确定为什么,可能是因为我试图只使用注释和代码而不使用XML配置),我的REST服务在"非标准"URL下可用。

通常是"/seam/resources/rest"。

无论如何,如果你有一个"自定义"路径,Seam不知道它应该注入上下文。您需要将<web:context-filter url-pattern="something" />添加到component.xml

具体来说,我们已经有了这个标签,但是使用属性regex-url-pattern和我扩展它以匹配REST URL。

最新更新