0

我有一个不实现 java.lang.Serializable 的会话对象。(它是一个遗留应用程序,现在我不能去更改代码)

有什么方法可以将会话对象存储在某个位置,然后在STANDALONE应用程序中返回相同的状态。

一种想法是使用RMI。有没有更好的方法来实现这一点。

编辑:旧版应用程序具有为我提供 Session 对象的 API。在 Session 对象上,我将调用方法。获取 Session 对象确实是一项昂贵的操作。因此,我想将其存储在某个位置以供任何后续操作使用,直到 Session 有效。

谢谢 :)

4

3 回答 3

1

假设您可以查询会话对象以确定其状态,并且在给定该状态的情况下,您可以创建一个等效的新会话对象。然后你需要一个帮助类,它的每个实例都与一个会话对象相关联并且是可序列化的。您编写助手类的序列化来存储会话的状态,并且当您通过序列化创建一个新的时,它会创建会话。

于 2010-06-15T16:28:18.937 回答
1

如果会话对象确实引用了不可序列化的东西(不仅仅是在接口方面,而是在它持有什么样的不可序列化的有状态实例方面),那么你将很难在一个有意义的方式。

如果不是这种情况,那么即使没有实现 Serializable,您也可以使用XStream对其进行序列化。

幸运的是,它很容易测试:如果您重建的会话对象适合您,那么您就很清楚了。

于 2010-06-16T04:26:35.170 回答
0

根据这个问题,我假设您可以将代码添加到应用程序的外边缘,但到处都有“小心 JabberWock”的标志。

如果它不是可序列化的,那么该对象可能包含对本质上不可序列化的东西的引用,例如服务、有状态的 bean ……以及其他仅在容器中才有意义的东西。现在通常大多数这些东西你可能不需要在容器外。

RMI 不会解决您的问题,因为这样有效负载必须是可序列化的,回到第 1 格。

一种实用的方法可能是使用一个简单的 XML 生成器,如 Apache Commons 的 XML Digester(如果它仍然存在),或者一些简单的 JSON 生成器,并从独立应用程序中需要的 Session 中选择数据并将其转储到有意义的树中.

于 2010-06-15T16:37:50.647 回答