Have you tried using the TomcatCometServlet, which using non-blocking I/O?
On 2010-01-20, at 5:56 PM, Kevin Jordan wrote:
Some messages go through correctly, like the ones at the beginning.
And if
the GET connection times out, it will get a heartbeat json reply. Although
it will usually get one in between with the error json below immediately.
Regular messages like subscribing and sending a message manually will take a
while (like 30 seconds or longer) and usually come back with the error json
below as well. Even with one connection it seems to block everything else.
I'm going to try more configuration parameters on the Apache side to see if
it's something on there, but something is definitely blocking anything else
from going through.
Also, I know we had talked about this before, but will the conversation
messages have a direct callback ability instead of having another subject
that needs to be listened to? I'm creating an Errai Proxy for loading data
for GXT stores which in turn is used by components to get data, but having a
secondary subject to listen doesn't quite fit into the design of this and I
think I'd prefer to keep it to one method of transport rather than using RPC
or SOAFaces UniversalClient. Not to mention a direct callback seems to fit
more into the conversation design since otherwise data could reach more than
one callback if you had the same component more than once on a page
listening to that reply subject and didn't have an increment counter or
something to differentiate them.
-----Original Message-----
From: Mike Brock [mailto:cbrock@redhat.com]
Sent: Wednesday, January 20, 2010 4:27 PM
To: Kevin Jordan
Cc: errai-users(a)lists.jboss.org
Subject: Re: [errai-users] Trouble sending messages
Interesting. Errai is designed to only use a single connection / single
queue by default with the server in order to prevent interfering with image
loading, etc.
We have not tested Errai in any load balancing scenarios such as with
Terracotta.
You're saying all the actual messages are eventually delivered in both
directions, albeit slowly?
On 2010-01-20, at 1:33 PM, Kevin Jordan wrote:
> Do you have any experience running this behind Apache? I'm trying to
> use it to load balance two Tomcat servers, but it doesn't seem to be
> working too well. The connections seem to take forever to terminate
> and when they do they usually get this error back:
>
[{"ClientBusErrors":{ErrorMessage:"null",AdditionalDetails:"org.jboss.errai.
> bus.server.ServerMessageBusImpl.nextMessage(ServerMessageBusImpl.java:
> 363)<b
> r/>org.jboss.errai.bus.server.servlet.DefaultBlockingServlet.pollForMe
> ssages
> (DefaultBlockingServlet.java:90)<br/>org.jboss.errai.bus.server.servle
> t.Defa
>
ultBlockingServlet.doPost(DefaultBlockingServlet.java:84)<br/>javax.servlet.
> http.HttpServlet.service(Unknown
> Source)<br/>javax.servlet.http.HttpServlet.service(Unknown
> Source)<br/>org.apache.catalina.core.ApplicationFilterChain.internalDo
> Filter
> (Unknown
> Source)<br/>org.apache.catalina.core.ApplicationFilterChain.doFilter(U
> nknown
> Source)<br/>org.springframework.security.util.FilterChainProxy$Virtual
> Filter
> Chain.doFilter(FilterChainProxy.java:378)<br/>org.springframework.secu
> rity.i
> ntercept.web.FilterSecurityInterceptor.invoke(FilterSecurityIntercepto
> r.java
> :109)<br/>org.springframework.security.intercept.web.FilterSecurityInt
> ercept
> or.doFilter(FilterSecurityInterceptor.java:83)<br/>org.springframework
> .secur
>
ity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:
> 390)<br/>org.springframework.security.ui.ExceptionTranslationFilter.do
> Filter
> Http(ExceptionTranslationFilter.java:101)<br/>org.springframework.secu
> rity.u
> i.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)<br/>org.
> spring
> framework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(F
> ilterC
> hainProxy.java:390)<br/>org.springframework.security.wrapper.SecurityC
> ontext
> HolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareReques
> tFilte
> r.java:91)<br/>org.springframework.security.ui.SpringSecurityFilter.do
> Filter
> (SpringSecurityFilter.java:53)<br/>org.springframework.security.util.F
> ilterC
> hainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)<br/>o
> rg.spr
> ingframework.security.ui.AbstractProcessingFilter.doFilterHttp(Abstrac
> tProce
> ssingFilter.java:278)<br/>org.springframework.security.ui.SpringSecuri
> tyFilt
> er.doFilter(SpringSecurityFilter.java:53)<br/>org.springframework.secu
> rity.u
> til.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java
> :390)<
> br/>org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSi
> gnOutF
> ilter.java:106)<br/>org.springframework.security.util.FilterChainProxy
> $Virtu
> alFilterChain.doFilter(FilterChainProxy.java:390)<br/>org.springframew
> ork.se
> curity.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)<br/>o
> rg.spr
>
ingframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.
> java:53)<br/>org.springframework.security.util.FilterChainProxy$Virtua
> lFilte
>
rChain.doFilter(FilterChainProxy.java:390)<br/>org.springframework.security.
> context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionCo
> ntextI
> ntegrationFilter.java:235)<br/>org.springframework.security.ui.SpringS
> ecurit
> yFilter.doFilter(SpringSecurityFilter.java:53)<br/>org.springframework
> .secur
>
ity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:
>
390)<br/>org.springframework.security.securechannel.ChannelProcessingFilter.
> doFilterHttp(ChannelProcessingFilter.java:116)<br/>org.springframework
> .secur
> ity.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)<br/
>> org.s
> pringframework.security.util.FilterChainProxy$VirtualFilterChain.doFil
> ter(Fi
> lterChainProxy.java:390)<br/>org.springframework.security.util.FilterC
> hainPr
> oxy.doFilter(FilterChainProxy.java:175)<br/>org.springframework.web.fi
> lter.D
>
elegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)<br/>org.
> springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFi
> lterPr
> oxy.java:167)<br/>org.apache.catalina.core.ApplicationFilterChain.inte
> rnalDo
> Filter(Unknown
> Source)<br/>org.apache.catalina.core.ApplicationFilterChain.doFilter(U
> nknown
> Source)<br/>com.google.inject.servlet.DefaultFilterPipeline.dispatch(D
> efault
> FilterPipeline.java:43)<br/>com.google.inject.servlet.GuiceFilter.doFi
> lter(G
> uiceFilter.java:110)<br/>org.apache.catalina.core.ApplicationFilterCha
>
in.int
> ernalDoFilter(Unknown
> Source)<br/>org.apache.catalina.core.ApplicationFilterChain.doFilter(U
> nknown
> Source)<br/>org.apache.catalina.core.StandardWrapperValve.invoke(Unkno
> wn
> Source)<br/>org.apache.catalina.core.StandardContextValve.invoke(Unkno
> wn
> Source)<br/>org.apache.catalina.core.StandardHostValve.invoke(Unknown
> Source)<br/>org.apache.catalina.valves.ErrorReportValve.invoke(Unknown
> Source)<br/>org.apache.catalina.core.StandardEngineValve.invoke(Unknow
> n
> Source)<br/>org.terracotta.modules.tomcat.tomcat_5_5.SessionValve55.tc
> Invoke
> (SessionValve55.java:63)<br/>org.terracotta.modules.tomcat.tomcat_5_5.
> Sessio
> nValve55.invoke(SessionValve55.java:50)<br/>org.apache.catalina.connec
> tor.Co
> yoteAdapter.service(Unknown
> Source)<br/>org.apache.coyote.http11.Http11NioProcessor.process(Unknow
> n
> Source)<br/>org.apache.coyote.http11.Http11NioProtocol$Http11Connectio
> nHandl
> er.process(Unknown
> Source)<br/>org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run
> (Unkno
> wn
> Source)<br/>java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Thr
> eadPoo
> lExecutor.java:886)<br/>java.util.concurrent.ThreadPoolExecutor$Worker
> .run(T
> hreadPoolExecutor.java:908)<br/>java.lang.Thread.run(Thread.java:619)<
> br/>"}
> }]
>
> I've got Terracotta running to tie the memory between the two
> instances together and mod_proxy on Apache going to the HTTPS port.
> The only change I seem to have to make in Tomcat is the proxyName and
> proxyPort so redirects are handled correctly. Everything else seems
> to work fine, except for images loaded later seem to take a while,
> possibly because of the Comet connections Errai is making. I'm not
> sure if the issue is with Errai or the request is getting rewritten
incorrectly or something.
>
> If I take away Apache and run it just on a single node, everything
> works fine.
>