2011-07-08 56 views
0

我有一個使用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..."); 
} 

} 

回答