Eclipselink加载对象和JMS序列化

问题描述 投票:0回答:1

我们有一个Glassfish 5应用服务器,它有几个war模块和一些Java应用程序客户端,它们在JMS和Rest webservices之间进行通信。

服务器应用程序使用Eclipselink从数据库加载对象,并在需要时自动通过JMS发送它们。现在我在客户端反序列化对象时遇到问题,因为JMS会抛出java.lang.ClassNotFoundException: org.eclipse.persistence.indirection.IndirectList异常。问题是我的实体中没有任何IndirectList对象,但我认为它是EclipseLink,它将我的对象Lists实例化为IndirectList。问题是,为什么在客户端恢复对象时,它会尝试实例化IndirectList而不是List或ArrayList(我把MyObject.class放在JMS的getBody()方法中)?我可以通过在客户端添加eclipselink依赖来纠正错误,但我对此解决方案不满意,因为我通常不需要它...

我希望我能很好地解释我的问题。谢谢。

java jpa java-ee jms eclipselink
1个回答
0
投票

解决java.lang.ClassNotFoundException的最简单方法是将缺少的类添加到类路径中。它真的很简单。

对于它的价值,我通常不鼓励人们使用JMS ObjectMessage这种确切的原因。除非您在消息中添加的对象非常简单,否则您最终会向客户端添加类,除非反序列化另一个对象,否则这些类可能不是必需的。此外,Java对象的序列化和反序列化非常慢。我通常建议应用程序通过简单的字节数组交换数据,甚至使用像JSON这样的东西(虽然JSON可能很慢,但有更快的选择)。

© www.soinside.com 2019 - 2024. All rights reserved.