Имам интегрирано приложение JSF-Spring. Приложението работи добре в моята не-клъстерна среда. Когато разгърнете приложението в клъстерирана среда [wildfly 8.0.0], се сблъсквам с различни проблеми около сериализацията. Някои от примерите са, че класовете DTO не са изпълнени Serializable, се опитва да сериализира класа Logger, който не искам и т.н.
Приложението, разположено в клъстеризирана среда, има <distributable /> таг в моя web.xml, така че се опитва репликация на сесията между възлите и която не се поддава на случаи, които не могат да се сериализират.
Всички разработчици може да не следват указанията в тези редове, което причинява някои от тези случаи.
Така че въпросът ми е какъв е най-добрият вариант да се видят всички тези проблеми със сериализацията в моя тестов сървър [wildfly 8.0.0], който не е клъстерна среда.
Добавяне на един детайл за изключение за по-голяма яснота:
Caused by: java.lang.RuntimeException: Failure to marshal argument(s)
at org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.marshallCall(CommandAwareRpcDispatcher.java:333)
at org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.processSingleCall(CommandAwareRpcDispatcher.java:352)
at org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.invokeRemoteCommand(CommandAwareRpcDispatcher.java:167)
... 76 more
Caused by: org.infinispan.commons.marshall.NotSerializableException: com.org.account.service.AccountExpServiceImpl
Caused by: an exception which occurred:
in field accountExpService
in field m
in object java.util.HashMap@85b67fbe
in object org.jboss.as.clustering.marshalling.SimpleMarshalledValue@85b67fbe
in object org.infinispan.commands.write.ReplaceCommand@ec0c12ad
in object org.infinispan.commands.tx.PrepareCommand@ce32eb5a
Отговори:
2 за отговор № 1Използваме следната помощна програма, за да проверим дали Infinispan може да сериализира даден обект или не:
org.infinispan.manager.DefaultCacheManager.getCacheManagerConfiguration().serialization().marshaller().isMarshallable(objectToCheck);
Това всъщност е част от нашите тестове.
1 за отговор № 2
Можете да имате различни профили за локално използване на приложението web.xml
без <distributable/>
и едно за разполагане, което е готово и следователно с <distributable/>
маркер. Ако използвате сграда Maven, приставката за войни и профилите са това, което трябва да разгледате. виждам този отговор за осигуряване на зависим от профила web.xml
въпреки това това решение променя драстично поведението на системата между Дев и производство среди. Откриването на проблеми със сериализацията само веднъж разгърнати може да бъде скъпо (по отношение на време и усилия).
Затова сортирането на сериализационните въпроси един по един е начинът да се върви.