将BayeuxService注入另一个带注释的类时出现问题

时间:2011-07-08 05:56:35

标签: spring dependency-injection comet jersey bayeux

我有一个使用Bayeux处理Comet连接的Web应用程序。我初始化一个BayeuxServer并将其绑定到Spring注释中,一切正常,在选定的频道上进行侦听并做出响应。

我有一个Jersey注释类和一个带注释的Bayeux服务,如下所示。我的想法是希望能够通过Rest从单个Web应用程序控制资源,然后在资源更改后立即通过Comet将服务器推送到所有其他适用的客户端,告诉他们更新他们的信息。

问题在于:部署webapp时会创建Bayeux服务,设置正确的通道来监听和监控客户端。应该只有一个例子。当Jersey尝试使用Bayeux服务时,它会创建一个全新的服务,当它应该使用原始服务时。这项新服务没有正确注入BayeuxServer,因此无法通过它访问客户端信息。

因为这应该是可行的,但我似乎不明白如何通过注释正确地注入这些东西。有人能指出我正确的方向吗?

Jersey Annotated Class:

@Path("JsonTest")
public class JsonTest {

@Context
Request request;
@Context
UriInfo uriInfo;

@Context
ResourceContext resourceContext;

protected final Logger log = Logger.getLogger(getClass());

public JsonTest() {

}

@DELETE
@Path("{id}")
public void deleteJson(@PathParam("id") String id) {
    JsonTestDao.instance.getModel().remove(id);
    log.info("Deleted Json..." + id);
    log.info("New json: " + JsonTestDao.instance.getModel().toString());


    JsonTestService jsonTestService = resourceContext.getResource(JsonTestService.class);
    jsonTestService.sendUpdate();
}
}

BayeuxService:

@Named
// Singleton here didn't seem to make a difference
@Service
public class JsonTestService {

protected final Logger log = Logger.getLogger(getClass());

@Inject
private BayeuxServer bayeux;
@Session
private ServerSession serverSession;

@PostConstruct
public void init() {
    log.info("Initializing JsonTest Bayeux HelloService...");
    log.info("Current sessions are: " + bayeux.getSessions().toString());
}

@Listener("/cometd/JsonTest")
public void jsonTestHandler(ServerSession remote, ServerMessage.Mutable message) {

}

public void sendUpdate() {
    //bayeux.newMessage(); // Need a method that the Jersey class can call to notify changes
    log.info("Bayeux server should be sending an update now...");
}

@PreDestroy
public void destroy() {
    log.info("Destroying JsonTest Bayeux HelloService...");
}

}

1 个答案:

答案 0 :(得分:0)

请参阅Jersey and spring integration - bean Injections are null at runtime

我问的另一个问题。这两个问题都源于同样的问题,包括正确设置Jersey依赖关系并将其与spring集成。