使用 JBoss 和 Spring 在 Java Web 应用程序之间共享业务对象实例的最佳方式是什么?
我们目前有一个加载Spring应用程序上下文的Web应用程序,该上下文实例化了一堆业务对象,DAO对象和Hibernate。我们希望与另一个 Web 应用程序共享此堆栈,以避免具有相同对象的多个实例。
我们研究了几种办法;使用 JMX 或 JNDI 或使用 EJB3 公开对象。
不同的方法都有其问题,我们正在寻找一种轻量级的方法。
关于如何解决这个问题的任何建议?
编辑:我收到了要求我详细说明的评论,所以这里是:
我们要解决的主要问题是,我们只想有一个 Hibernate 实例。这是由于在运行多个使用同一数据源的客户端应用程序时,Hibernate 的第 2 级缓存失效的问题。此外,业务/ DAO / Hibernate堆栈正在变得相当大,因此不复制它只是更有意义。
首先,我们试图研究如何将业务层单独暴露给其他Web应用程序,Spring以少量XML的价格提供了JMX包装。但是,我们无法将 JMX 实体绑定到 JNDI 树,因此无法从 Web 应用程序中查找对象。
然后,我们尝试将业务层直接绑定到 JNDI。尽管Spring没有为此提供任何方法,但使用JNDITemplate绑定它们也是微不足道的。但这导致了几个新问题:1)安全管理器拒绝访问RMI类装入器,因此一旦我们尝试在JNDI资源上调用方法,客户端就失败了。2)一旦安全问题得到解决,JBoss就抛出了TravialArgumentException:object不是声明类的实例。稍微阅读一下就会发现,我们需要 JNDI 资源的存根实现,但这似乎很麻烦(也许 Spring 可以帮助我们?)
我们还没有对EJB进行过多的研究,但是在前两次尝试之后,我想知道我们试图实现的目标是否可能。
总结一下我们试图实现的目标:一个JBoss实例,几个Web应用程序利用DAO层和Hibernate之上的一堆业务对象。
此致敬意
尼尔斯