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.pollForMessages
(DefaultBlockingServlet.java:90)<br/>org.jboss.errai.bus.server.servlet.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.internalDoFilter
(Unknown
Source)<br/>org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown
Source)<br/>org.springframework.security.util.FilterChainProxy$VirtualFilter
Chain.doFilter(FilterChainProxy.java:378)<br/>org.springframework.security.i
ntercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java
:109)<br/>org.springframework.security.intercept.web.FilterSecurityIntercept
or.doFilter(FilterSecurityInterceptor.java:83)<br/>org.springframework.secur
ity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:
390)<br/>org.springframework.security.ui.ExceptionTranslationFilter.doFilter
Http(ExceptionTranslationFilter.java:101)<br/>org.springframework.security.u
i.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)<br/>org.spring
framework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterC
hainProxy.java:390)<br/>org.springframework.security.wrapper.SecurityContext
HolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilte
r.java:91)<br/>org.springframework.security.ui.SpringSecurityFilter.doFilter
(SpringSecurityFilter.java:53)<br/>org.springframework.security.util.FilterC
hainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)<br/>org.spr
ingframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProce
ssingFilter.java:278)<br/>org.springframework.security.ui.SpringSecurityFilt
er.doFilter(SpringSecurityFilter.java:53)<br/>org.springframework.security.u
til.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)<
br/>org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutF
ilter.java:106)<br/>org.springframework.security.util.FilterChainProxy$Virtu
alFilterChain.doFilter(FilterChainProxy.java:390)<br/>org.springframework.se
curity.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)<br/>org.spr
ingframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.
java:53)<br/>org.springframework.security.util.FilterChainProxy$VirtualFilte
rChain.doFilter(FilterChainProxy.java:390)<br/>org.springframework.security.
context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextI
ntegrationFilter.java:235)<br/>org.springframework.security.ui.SpringSecurit
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.doFilter(Fi
lterChainProxy.java:390)<br/>org.springframework.security.util.FilterChainPr
oxy.doFilter(FilterChainProxy.java:175)<br/>org.springframework.web.filter.D
elegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)<br/>org.
springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterPr
oxy.java:167)<br/>org.apache.catalina.core.ApplicationFilterChain.internalDo
Filter(Unknown
Source)<br/>org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown
Source)<br/>com.google.inject.servlet.DefaultFilterPipeline.dispatch(Default
FilterPipeline.java:43)<br/>com.google.inject.servlet.GuiceFilter.doFilter(G
uiceFilter.java:110)<br/>org.apache.catalina.core.ApplicationFilter...
ernalDoFilter(Unknown
Source)<br/>org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown
Source)<br/>org.apache.catalina.core.StandardWrapperValve.invoke(Unknown
Source)<br/>org.apache.catalina.core.StandardContextValve.invoke(Unknown
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(Unknown
Source)<br/>org.terracotta.modules.tomcat.tomcat_5_5.SessionValve55.tcInvoke
(SessionValve55.java:63)<br/>org.terracotta.modules.tomcat.tomcat_5_5.Sessio
nValve55.invoke(SessionValve55.java:50)<br/>org.apache.catalina.connector.Co
yoteAdapter.service(Unknown
Source)<br/>org.apache.coyote.http11.Http11NioProcessor.process(Unknown
Source)<br/>org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandl
er.process(Unknown
Source)<br/>org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(Unkno
wn
Source)<br/>java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoo
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.