当前位置:  开发笔记 > 编程语言 > 正文

使用JBoss和Spring在Java Web应用程序之间共享业务对象实例的最佳方法是什么?

如何解决《使用JBoss和Spring在JavaWeb应用程序之间共享业务对象实例的最佳方法是什么?》经验,为你挑选了1个好方法。

我们目前有一个Web应用程序加载一个Spring应用程序上下文,它实例化一堆业务对象,DAO对象和Hibernate.我们希望与另一个Web应用程序共享此堆栈,以避免具有相同对象的多个实例.

我们研究了几种方法; 使用JMX或JNDI或使用EJB3公开对象.

不同的方法都有它们的问题,我们正在寻找一种轻量级的方法.

关于如何解决这个问题的任何建议?

编辑:我收到的评论要求我详细说明,所以这里有:

我们想要解决的主要问题是我们只想拥有一个Hibernate实例.这是因为在运行使用相同数据源的多个客户端应用程序时,Hibernate的二级缓存失效问题.此外,业务/ DAO/Hibernate堆栈正在增长相当大,因此不重复它只是更有意义.

首先,我们试图了解如何单独将业务层暴露给其他Web应用程序,而Spring以少量XML的价格提供JMX包装.但是,我们无法将JMX实体绑定到JNDI树,因此我们无法从Web应用程序中查找对象.

然后我们尝试将业务层直接绑定到JNDI.虽然Spring没有为此提供任何方法,但使用JNDITemplate来绑定它们也是微不足道的.但是这导致了几个新问题:1)安全管理器拒绝访问RMI类加载器,因此一旦我们尝试在JNDI资源上调用方法,客户端就会失败.2)一旦安全问题得到解决,JBoss就抛出了IllegalArgumentException:object不是声明类的实例.一点阅读表明我们需要为JNDI资源实现存根实现,但这似乎有很多麻烦(也许Spring可以帮助我们?)

我们还没有看过太多关于EJB的事情,但是在前两次尝试之后,我想知道我们想要实现的目标是否完全可能.

总结一下我们要实现的目标:一个JBoss实例,几个Web应用程序在DAO层和Hibernate之上使用一堆业务对象.

最好的祝福,

尼尔斯



1> Will Hartung..:

Web应用程序是否部署在同一台服务器上?

我不能代表Spring,但使用Session Beans将业务逻辑转移到EJB层是很简单的.

申请组织很直接.Logic进入Session Beans,这些Session Beans作为带有ejb-jar.xml文件的Java EE工件捆绑在一个jar中(在EJB3中,这可能实际上是空的).

然后将实体类捆绑到一个单独的jar文件中.

接下来,您将构建每个Web应用程序到他们自己的WAR文件中.

最后,所有的jar和war都被捆绑到Java EE EAR中,并附带了相关的application.xml文件(同样,这可能非常简单,只需枚举EAR中的jar).

此EAR批量部署到应用服务器.

每个WAR实际上是独立的 - 它们自己的会话,有自己的上下文路径等.但是它们共享公共EJB后端,所以你只有一个二级缓存.

您还使用本地引用并调用语义与EJB进行通信,因为它们位于同一服务器中.这里不需要远程呼叫.

我认为这很好地解决了您所遇到的问题,并且在使用EJB 3的Java EE 5中它非常简单.

另外,正如我所理解的那样,你仍然可以在你的大部分工作中使用Spring,但我不是Spring人,所以我不能谈论细节.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有