Проблеми при инжектиране на BayeuxService в друг клас с анотации

Имам уеб приложение, което използва Bayeux за обработка на Comet връзки. Инициализирам BayeuxServer и го свързвам с анотации на Spring и всичко работи добре, слуша избрани канали и отговаря.

Имам анотиран клас в Джърси и анотирана услуга в Байо, както е показано по-долу. Идеята е, че исках да мога да контролирам ресурси чрез Rest от отделно уеб приложение и след това веднага след като ресурсът бъде променен, да направя натискане на сървър чрез Comet до всички други приложими клиенти, за да им кажа да актуализират информацията си.

Ето го проблемът: Услуга 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...");
}

}

person zclark    schedule 08.07.2011    source източник


Отговори (1)


Вижте Jersey и пролетна интеграция - bean Injections са null по време на изпълнение.

Друг въпрос, който зададох. И двете произтичат от един и същ проблем, свързан с правилното настройване на зависимостта на Jersey и интегрирането й с spring.

person zclark    schedule 13.07.2011