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.DefaultH ttpRequestWriterFactory.(DefaultHttpRequ estWriterFactory.java:52)
at org.apache.http.impl.nio.codecs.DefaultH ttpRequestWriterFactory.(DefaultHttpRequ estWriterFactory.java:56)
at org.apache.http.impl.nio.codecs.DefaultH ttpRequestWriterFactory.(DefaultHttpRequ estWriterFactory.java:46)
at org.apache.http.impl.nio.conn.ManagedNHt tpClientConnectionFactory.(ManagedNHttpC lientConnectionFactory.java:70)
at org.apache.http.impl.nio.conn.ManagedNHt tpClientConnectionFactory.(ManagedNHttpC lientConnectionFactory.java:78)
at org.apache.http.impl.nio.conn.ManagedNHt tpClientConnectionFactory.(ManagedNHttpC lientConnectionFactory.java:59)
at org.apache.http.impl.nio.conn.PoolingNHt tpClientConnectionManager$InternalConnec tionFactory.(PoolingNHttpClientConnectio nManager.java:515)
at org.apache.http.impl.nio.conn.PoolingNHt tpClientConnectionManager.(PoolingNHttpC lientConnectionManager.java:138)
at org.apache.http.impl.nio.conn.PoolingNHt tpClientConnectionManager.(PoolingNHttpC lientConnectionManager.java:122)
at org.apache.http.impl.nio.conn.PoolingNHt tpClientConnectionManager.(PoolingNHttpC lientConnectionManager.java:94)
at org.apache.http.impl.nio.client.HttpAsyn cClientBuilder.build(HttpAsyncClientBuil der.java:355)
at org.apache.http.impl.nio.client.HttpAsyn cClients.createDefault(HttpAsyncClients.j ava:49)
at org.kli.Kli.(Kli.java:60)
at sun.reflect.NativeConstructorAccessorImp l.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImp l.newInstance(NativeConstructorAccessorI mpl.java:57)
at sun.reflect.DelegatingConstructorAccesso rImpl.newInstance(DelegatingConstructorA ccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstanc e(Constructor.java:539)
at java.lang.Class.newInstance0(Class.java:3 72)
at java.lang.Class.newInstance(Class.java:3 25)
at org.apache.catalina.core.DefaultInstance Manager.newInstance(DefaultInstanceManag er.java:125)
at org.apache.catalina.core.StandardWrapper.l oadServlet(StandardWrapper.java:1136)
at org.apache.catalina.core.StandardWrapper.l oad(StandardWrapper.java:1080)
at org.apache.catalina.core.StandardContext.l oadOnStartup(StandardContext.java:5015)
at org.apache.catalina.core.StandardContext.s tartInternal(StandardContext.java:5302)
at org.apache.catalina.util.LifecycleBase.s tart(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$S tartChild.call(ContainerBase.java:1568)
at org.apache.catalina.core.ContainerBase$S tartChild.call(ContainerBase.java:1558)
at java.util.concurrent.FutureTask$Sync.inn erRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(Futu reTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.r unWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$W orker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:713)
Буду рад любым советам, спасибо.
PS Нечаянно запостил данное сообщением комментарием к титульной записи сообщества. Прошу модераторов удалить.
Задача заключается в том, что необходимо организовать асинхронный обмен данными между веб-страницей<->сервлетом<-> 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.DefaultH
at org.apache.http.impl.nio.codecs.DefaultH
at org.apache.http.impl.nio.codecs.DefaultH
at org.apache.http.impl.nio.conn.ManagedNHt
at org.apache.http.impl.nio.conn.ManagedNHt
at org.apache.http.impl.nio.conn.ManagedNHt
at org.apache.http.impl.nio.conn.PoolingNHt
at org.apache.http.impl.nio.conn.PoolingNHt
at org.apache.http.impl.nio.conn.PoolingNHt
at org.apache.http.impl.nio.conn.PoolingNHt
at org.apache.http.impl.nio.client.HttpAsyn
at org.apache.http.impl.nio.client.HttpAsyn
at org.kli.Kli.(Kli.java:60)
at sun.reflect.NativeConstructorAccessorImp
at sun.reflect.NativeConstructorAccessorImp
at sun.reflect.DelegatingConstructorAccesso
at java.lang.reflect.Constructor.newInstanc
at java.lang.Class.newInstance0(Class.java:3
at java.lang.Class.newInstance(Class.java:3
at org.apache.catalina.core.DefaultInstance
at org.apache.catalina.core.StandardWrapper.l
at org.apache.catalina.core.StandardWrapper.l
at org.apache.catalina.core.StandardContext.l
at org.apache.catalina.core.StandardContext.s
at org.apache.catalina.util.LifecycleBase.s
at org.apache.catalina.core.ContainerBase$S
at org.apache.catalina.core.ContainerBase$S
at java.util.concurrent.FutureTask$Sync.inn
at java.util.concurrent.FutureTask.run(Futu
at java.util.concurrent.ThreadPoolExecutor.r
at java.util.concurrent.ThreadPoolExecutor$W
at java.lang.Thread.run(Thread.java:713)
Буду рад любым советам, спасибо.
PS Нечаянно запостил данное сообщением комментарием к титульной записи сообщества. Прошу модераторов удалить.
