我有一個使用Bayeux處理Comet連接的Web應用程序。我初始化了一個BayeuxServer並將其綁定到Spring註釋中,並且它可以正常工作,監聽選定的頻道並響應。將BayeuxService注入到具有註釋的另一個類中的問題
我有澤西島註釋類和註釋的貝葉服務,如下所示。這個想法是我希望能夠通過Rest從一個單獨的Web應用程序控制資源,然後在資源更改後立即通過Comet將服務器推送給所有其他適用的客戶端,告訴他們更新他們的信息。
問題如下:部署webapp時會創建Bayeux服務,並設置正確的通道來監聽和監視客戶端。應該只有一個這樣的例子。當Jersey試圖使用Bayeux服務時,它會創建一個全新的服務,當它應該使用原來的服務時。這項新服務沒有正確注入BayeuxServer,因此我無法通過它訪問客戶端信息。
這使得這應該是可行的,但我似乎並不知道如何通過註釋正確地注入這些東西。任何人都可以將我指向正確的方向嗎?
新澤西註解類:
@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...");
}
}