我有一个使用Bayeux处理Comet连接的web应用程序。我初始化了一个BayeuxServer并将其绑定到Spring注解中,在侦听选定的通道并进行响应时,一切都运行得很好。
我有一个带Jersey注释的类和一个带注释的Bayeux服务,如下所示。我的想法是,我希望能够通过Rest从单个web应用程序控制资源,然后在资源更改后立即通过Comet向所有其他适用的客户端进行服务器推送,以告诉它们更新其信息。
这就是问题所在:部署webapp时会创建Bayeux服务,设置适当的通道来监听和监控客户端。应该只有一个这样的实例。当Jersey尝试使用Bayeux服务时,它会创建一个全新的服务,而它应该使用原来的服务。这个新服务没有正确注入BayeuxServer,因此我无法通过它访问客户端信息。
这使得这应该是可行的,但我似乎不明白如何通过注释正确地注入这些东西。有谁能给我指个方向吗?
Jersey注解类:
@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...");
}
}
发布于 2011-07-13 06:03:42
参见Jersey and spring integration - bean Injections are null at runtime。
我问的另一个问题。这两个问题都源于同一个问题,涉及正确设置Jersey依赖项并将其与spring集成。
https://stackoverflow.com/questions/6620449
复制