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

时间:2015-09-30 13:04:17

标签: rest java-ee jboss resteasy seam

我尝试使用Seam2将RESTeasy RESTful Web服务添加到运行在JBoss 7.x上的应用程序。

我想尽可能少地使用Seam,但我需要它用于Dependancy Injection。

我的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

Complete StackTrace

我确实尝试了documentation中的所有内容,但我无法将其删除。如果我遗漏@Stateless注释,我就不会完成任何注射。添加@Scope不会做杰克。通过seam/resource/访问服务甚至无法正常工作(即使没有带@ApplicationPath的Application类。)

如果我不使用Dep,它会消失。注入,而是添加到每个方法

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

这不是一个很好的解决方案。 Nah,也没有工作......

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。出于某种原因(仍然不确定为什么,也许是因为我试图使用注释和代码独占而没有XML配置),我的REST服务可以在“非标准”URL下使用。

通常它就像“/ seam / resources / rest”。

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

具体来说,我们已经有了这个标签,但是使用了属性regex-url-pattern并且我将其扩展为与REST URL匹配。