У меня есть веб-приложение на основе JSF, развернутое на сервере EAP Jboss 5.1.Включил распространяемый тег для репликации сеанса на двух узлах jboss с веб-сервером Apache для функции аварийного переключения, и моя компания требует репликации на уровне атрибутов, но система выдает исключение NullPointerException.
"Не удалось реплицировать сеанс java.lang.NullPointerException"
Среда:
jboss-eap-5.1
jboss-web.xml:
<replication-granularity>ATTRIBUTE</replication-granularity>
web.xml:
<distributable/>
Ожидается: сеанс должен быть реплицирован без NPE.
Факт: не удалось реплицировать сеанс 9jYCBgKn2mIIVS2g8EzEzQ __. XXXX
Failed to replicate session 9jYCBgKn2mIIVS2g8EzEzQ__.XXXX
java.lang.NullPointerException
at org.jboss.web.tomcat.service.session.distributedcache.impl.jbc.AbstractJBossCacheService.getMarshalledValue(AbstractJBossCacheService.java:679)
at org.jboss.web.tomcat.service.session.distributedcache.impl.jbc.AttributeBasedJBossCacheService.storeSessionAttributes(AttributeBasedJBossCacheService.java:185)
at org.jboss.web.tomcat.service.session.distributedcache.impl.jbc.AttributeBasedJBossCacheService.storeSessionAttributes(AttributeBasedJBossCacheService.java:40)
at org.jboss.web.tomcat.service.session.distributedcache.impl.jbc.AbstractJBossCacheService.storeSessionData(AbstractJBossCacheService.java:402)
at org.jboss.web.tomcat.service.session.ClusteredSession.processSessionReplication(ClusteredSession.java:1192)
at org.jboss.web.tomcat.service.session.JBossCacheManager.processSessionRepl(JBossCacheManager.java:2221)
at org.jboss.web.tomcat.service.session.JBossCacheManager.storeSession(JBossCacheManager.java:321)
at org.jboss.web.tomcat.service.session.InstantSnapshotManager.snapshot(InstantSnapshotManager.java:51)
at org.jboss.web.tomcat.service.session.ClusteredSessionValve.handleRequest(ClusteredSessionValve.java:147)
at org.jboss.web.tomcat.service.session.ClusteredSessionValve.invoke(ClusteredSessionValve.java:94)
at org.jboss.web.tomcat.service.session.JvmRouteValve.invoke(JvmRouteValve.java:88)
at org.jboss.web.tomcat.service.session.LockingValve.invoke(LockingValve.java:62)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:95)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:567)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:451)
at java.lang.Thread.run(Thread.java:682)
Подробности отладки:
Я отладил приложение и обнаружил, что одно из значений атрибута равно нулю.
Вот строка бросков NPE:
org.jboss.web.tomcat.service.session.distributedcache.impl.jbc.AbstractJBossCacheService.class (Line no: 679)
if(MarshalledValueHelper.isTypeExcluded(value.getClass())) {
return value;
}
Пожалуйста, дайте мне знать, если вам нужно больше деталей.Кроме того, я пытаюсь воспроизвести проблему с примером приложения, но не смог сделать.Пожалуйста, предоставьте несколько предложений.
Спасибо, Логанатан