Репликация сеанса базы данных OpenLiberty — org.jboss.weld.module.web.HttpSessionBean$SerializableProxy — ClassNotFoundEJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Репликация сеанса базы данных OpenLiberty — org.jboss.weld.module.web.HttpSessionBean$SerializableProxy — ClassNotFoundE

Сообщение Anonymous »

Я использую OpenLiberty 24.0.0.6, настроенную с репликацией сеанса. Приложение использует JSF с PrimeFaces. Некоторые из моих бизнес-объектов хранятся в сеансе HTTP (через аннотацию @SessionScoped пакета CDI).
Когда сеанс десериализуется, я получаю следующую ошибку (взятую из журнала ffdc). ):

Код: Выделить всё

Exception = java.lang.ClassNotFoundException
Source = com.ibm.ws.session.SessionLoader.loadObject
probeid = 82
Stack Dump = java.lang.ClassNotFoundException: org.jboss.weld.module.web.HttpSessionBean$SerializableProxy
at com.ibm.ws.classloading.internal.UnifiedClassLoader.findClass(UnifiedClassLoader.java:167)
at com.ibm.ws.classloading.internal.ThreadContextClassLoader.findClass(ThreadContextClassLoader.java:145)
at com.ibm.ws.classloading.internal.UnifiedClassLoader.loadClass0(UnifiedClassLoader.java:141)
at com.ibm.ws.classloading.internal.UnifiedClassLoader$Delegation.loadClass(UnifiedClassLoader.java:87)
at com.ibm.ws.classloading.internal.UnifiedClassLoader.loadClass(UnifiedClassLoader.java:106)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527)
at com.ibm.ws.serialization.DeserializationObjectInputStream.loadClass(DeserializationObjectInputStream.java:64)
at com.ibm.ws.serialization.internal.DeserializationObjectInputStreamImpl.loadClass(DeserializationObjectInputStreamImpl.java:50)
at com.ibm.ws.serialization.DeserializationObjectInputStream.resolveClass(DeserializationObjectInputStream.java:135)
at com.ibm.ws.serialization.DeserializationObjectInputStream.resolveClass(DeserializationObjectInputStream.java:173)
at java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2003)
at java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1870)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2201)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1687)
at java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2496)
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2390)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2228)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1687)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:489)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:447)
at java.base/java.util.Hashtable.readHashtable(Hashtable.java:1315)
at java.base/java.util.Hashtable.readObject(Hashtable.java:1259)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1046)
at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2357)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2228)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1687)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:489)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:447)
at com.ibm.ws.session.utils.SessionLoader.loadObject(SessionLoader.java:64)
at com.ibm.ws.session.store.db.DatabaseHashMap.getValue(DatabaseHashMap.java:1615)
Сервер отвечает:

Код: Выделить всё

[15.08.24, 16:03:13:605 MESZ] 0000007c com.ibm.ws.session.WASSession                                E SESN0051E: Attempting to deserialize a session object from the backend resulted in a ClassNotFoundException..
[15.08.24, 16:03:13:605 MESZ] 0000007c com.ibm.ws.session.WASSession                                E ID: n3KSj82AVIMrmIK9ZH8A0WH
[15.08.24, 16:03:13:605 MESZ] 0000007c com.ibm.ws.session.WASSession                                E Exception:
java.lang.ClassNotFoundException: org.jboss.weld.module.web.HttpSessionBean$SerializableProxy
Моя конфигурация в OL:

Код: Выделить всё









portNumber="5432"
databaseName="httpSession"
user="session_user"
password="***"/>






И мы используем следующие функции:

Код: Выделить всё

  
javaee-8.0
microProfile-3.3
monitor-1.0
sessionDatabase-1.0

Я вышел из сеанса HTTP и мне интересно, является ли прокси-сервер WELD частью сеанса:

Код: Выделить всё

attribute name:
WELD_S#F_WELD%AbstractBuiltInBean%web_war_exploded#twl-web%HttpSession

attribute value (from toString())
Bean: ForwardingBean null for WELD%AbstractBuiltInBean%web_war_exploded#web%HttpSession; Instance: org.jboss.weld.module.web.HttpSessionBean$SerializableProxy@1bbaee59; CreationalContext: org.jboss.weld.contexts.CreationalContextImpl@27396b8a
Я понятия не имею, почему WELD хранит такой прокси-класс в сеансе.
Кстати. некоторый контент хранится в базе данных.
Все объекты, хранящиеся в сеансе HTTP, являются сериализуемыми. В противном случае я думаю, что получу NotSerializableExcpeption (которого нет в журналах или трассировках).
Я искал сериализованные данные в базе данных и нашел прокси-класс.
В приложении нет WELD-зависимостей (имеется в виду война приложений). Путь к классам меня устраивает.
Если вам нужна дополнительная информация, дайте мне знать.
Любые идеи приветствуются. :-)

Подробнее здесь: https://stackoverflow.com/questions/788 ... ttpsession
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»