我有一个包含对 EntityManager 的引用的 JavaBean:
@Stateless(name = "mazeBean", mappedName = "mazes")
@Remote @Local
public class MazeBean
{
@PersistenceContext(unitName = "mazeEJB")
private EntityManager em;
并且它在我的网络应用程序中运行良好。我现在正在开发一个使用相同 Bean 的 ApplicationClient 项目,但出现错误:
Caused by: org.omg.CORBA.BAD_PARAM: ----------BEGIN server-side stack trace----------
org.omg.CORBA.BAD_PARAM: WARNING: 00100006: Class beans.__EJB31_Generated__MazeBean__Intf____Bean__ is not Serializable vmcid: SUN minor code: 6 completed: Maybe
我对此进行了一些研究,我发现的信息是 EntityManager 可能是序列化问题的原因。 EntityManager 是该类中唯一的属性。我发现所有属性都需要可序列化,而 EntityManager 则不需要。我确实在 Bean 中创建了其他方法本地对象,但在出现此错误时我还没有调用它们中的任何一个,并且我希望它们无论如何都会构建在客户端上。
首先;我的诊断正确吗?如果是这样我该如何解决它?
Eclipse 开普勒、GF4、MySql 5.5.31、EclipseLink 2.5
最佳答案
您无法序列化您的PersistenceContext
。这意味着您可以将您的 MazeBean 发送到另一台计算机并访问同一数据库。但是,由于 EntityManager 是一个接口(interface),您可以自己实现它并使该实现可序列化。然后,所有调用都将委托(delegate)给实际的 EntityManager。但是,您可能只是重新设计您的 MazeBean,而不是最有可能更干净的解决方案。
关于java - 使 EntityManager 可序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21512902/