Чтобы установить HttpSessionListener для встроенного Jetl Camel при использовании Rest, я пытаюсь это сделать:
SessionHandler sess = new SessionHandler();
sess.addEventListener(new HttpSessionListener() {
@Override
public void sessionCreated(HttpSessionEvent se) {
// some code
se.getSession().setAttribute("WasHere", true);
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
// some cleanup code that really can't be palced anywhere else
}
});
String sessionHandlerString = "jettySessionHandler";
_integration.getRegistry().put(sessionHandlerString, sess); // this works
String port = _properties.getProperty("port");
RestConfiguration restConfiguration = new RestConfiguration();
restConfiguration.setComponent("jetty");
HashMap<String, Object> options = new HashMap<>();
options.put("sessionSupport", true);
options.put("handlers", sessionHandlerString);
restConfiguration.setEndpointProperties(options);
restConfiguration.setHost("localhost");
restConfiguration.setPort(Integer.parseInt(port));
restConfiguration.setBindingMode(RestConfiguration.RestBindingMode.auto);
_integration.getContext().setRestConfiguration(restConfiguration);
// getting an object
JettyHttpComponent9 jettyComponent = _integration.getContext().getComponent("jetty", JettyHttpComponent9.class);
RouteBuilder rb = new RouteBuilder(_integration.getContext()) {
@Override
public void configure() throws Exception {
rest("/test/path")
.get().route().process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
HttpMessage msg = exchange.getIn(HttpMessage.class);
Object ret = msg.getRequest().getSession().getAttribute("WasHere");
msg.setBody("Been there or not? - " + ret);
}
});
}
};
Это возвращает «Был или нет? - ноль», поэтому слушатель сеанса не работал.
Rest config создает маршрут для компонента Jetty и добавляет опцию handlers
.Погружаясь с отладчиком, у меня сложилось впечатление, что мой обработчик был добавлен к вызову конечной точки Jetty слишком поздно, когда сеанс уже был запущен, поэтому он не имел никакого эффекта.
Как добавитьмой собственный HttpSessionListener
для встроенного сервера Jetty в Camel?Похоже, что API не предоставляет мне доступ к Server
Jetty и другим объектам, несмотря на то, что компонент называется «Jetty», и это выглядит нормально, если не быть настолько абстрактным по отношению к внутренностям Jetty.
Основная цельзапустить что-то в событии уничтожения сеанса.
update - попытался взломать его и добавить прослушиватель сеанса в процессор - IllegalStateException