Image

Imagejavadb wrote in Imageru_java

AJAX+Servlet+AsyncHttpClient+EJB (Tomcat, JBoss, Eclipse)

Господа сообщники! Не так давно я вернулся к написанию приложения, которое задействует Java, но поскольку до уверенного пользователя мне ещё очень далеко, искрене надеюсь на вашу помощь.
Задача заключается в том, что необходимо организовать асинхронный обмен данными между веб-страницей<->сервлетом<-> asynchronous methods EJB3.1<->сторонний источник данных.

В связи с этим вопрос первый - правильно ли я понимаю, что вне зависимости от того, являются ли методы EJB3.0 асинхронными или нет, сервлет(.get()), вызывающий эти методы, будет блокировать блокировать окно броузера? Т.е. сам сервлет должен быть асинхнронным для реализации задуманного (или же данная библиотека всего лишь позволяет перенести асинхронность на уровень сервлетов, вызывающих методы ejb, а сами методы при этом могут быть и не асинхронными?)

Для реализации неблокирующих севрлетов Apache предлагает библиотеки AsyncHttpClient. Примеры использования, найденные в сети, не работают так как использованный конструктор основного класса deprecated. Примеры же с сайта Apache cодержат вот такую строку


final CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault();


Однако такое использование в коде вызывает ошибку при запуске Tomcat (из под Eclipse)

SEVERE: Servlet /kli threw load() exception
java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.impl.nio.codecs.DefaultHttpRequestWriterFactory.(DefaultHttpRequestWriterFactory.java:52)
at org.apache.http.impl.nio.codecs.DefaultHttpRequestWriterFactory.(DefaultHttpRequestWriterFactory.java:56)
at org.apache.http.impl.nio.codecs.DefaultHttpRequestWriterFactory.(DefaultHttpRequestWriterFactory.java:46)
at org.apache.http.impl.nio.conn.ManagedNHttpClientConnectionFactory.(ManagedNHttpClientConnectionFactory.java:70)
at org.apache.http.impl.nio.conn.ManagedNHttpClientConnectionFactory.(ManagedNHttpClientConnectionFactory.java:78)
at org.apache.http.impl.nio.conn.ManagedNHttpClientConnectionFactory.(ManagedNHttpClientConnectionFactory.java:59)
at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager$InternalConnectionFactory.(PoolingNHttpClientConnectionManager.java:515)
at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.(PoolingNHttpClientConnectionManager.java:138)
at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.(PoolingNHttpClientConnectionManager.java:122)
at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.(PoolingNHttpClientConnectionManager.java:94)
at org.apache.http.impl.nio.client.HttpAsyncClientBuilder.build(HttpAsyncClientBuilder.java:355)
at org.apache.http.impl.nio.client.HttpAsyncClients.createDefault(HttpAsyncClients.java:49)
at org.kli.Kli.(Kli.java:60)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:539)
at java.lang.Class.newInstance0(Class.java:372)
at java.lang.Class.newInstance(Class.java:325)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:125)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1136)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1080)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5015)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5302)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1568)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1558)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:713)

Буду рад любым советам, спасибо.

PS Нечаянно запостил данное сообщением комментарием к титульной записи сообщества. Прошу модераторов удалить.