当前位置: 首页 > 面试题库 >

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

越勇
2023-03-14
问题内容

当前,我们有一个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:对象不是声明类的实例。一些阅读显示我们需要JNDI资源的存根实现,但这似乎很麻烦(也许Spring可以帮助我们?)

我们还没有对EJB进行太多研究,但是在前两次尝试之后,我想知道我们试图实现的目标是否完全可能。

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

最好的祝福,

尼尔斯


问题答案:

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

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

应用程序组织很简单。逻辑进入会话Bean,这些会话Bean作为Java EE工件与ejb-
jar.xml文件一起捆绑在一个jar中(在EJB3中,这实际上是空的)。

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

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

最后,所有的jar和wars都与相关的application.xml文件捆绑到了Java EE EAR中(同样,将枚举在EAR中的jars,这可能很小)。

该EAR批量部署到了应用服务器。

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

您还使用本地引用和调用语义与EJB进行对话,因为它们位于同一服务器中。此处无需远程呼叫。

我认为这可以很好地解决您遇到的问题,并且在带有EJB 3的Java EE 5中非常简单。

另外,据我了解,您仍然可以在大部分工作中使用Spring,但由于我不是Spring人士,所以我无法透露细节。



 类似资料:
  • 问题内容: 我有一个活动,这是整个应用程序中使用的主要活动,它具有许多变量。我还有另外两个活动,我希望能够使用第一个活动中的数据。现在我知道我可以做这样的事情: 但是我想共享很多变量,有些可能很大,所以我不想像上面那样创建它们的副本。 有没有一种方法可以直接获取和更改变量而无需使用get和set方法?我记得在Google开发者网站上读过一篇文章,建议不要在Android上使用此功能。 问题答案:

  • 问题内容: 我一次运行2个单独的Java应用程序。(两个单独的javaw.exe)在它们运行时,我需要在它们之间共享一个对象。 没有永久存储的最简单方法是什么? 问题答案: 对象及其实例变量可以在Java程序的线程之间共享,这是非常简单的任务。 如果您需要在两个程序之间共享对象(例如它的对象)而没有数据存储,那么下一个选择将是使用RMI套接字通信或Java消息传递服务。

  • 我需要将xml转换为jpa实体。我已经使用jaxb获取了我的DTO,并使用mapstruct将dto转换为实体。但是,我需要从数据中提取一些数据,并将其设置为实体上的列表。我的映射器如下所示 我不知道如何在提取MetaData方法中访问我的实体特别。

  • 问题内容: Java是我选择的编程语言之一。尽管将应用程序分发给最终用户,但我总是遇到问题。 为用户提供JAR并不总是像我想要的那样友好,并且使用Java WebStart要求我维护Web服务器。 分发Java应用程序的最佳方法是什么?如果Java应用程序需要在用户计算机上安装工件,该怎么办?有没有好的Java安装/打包系统? 问题答案: 有多种解决方案,取决于你的发行要求。 只是用一个jar。这

  • 这并不困难,但它让我质疑spring auth服务器是最好的选择,还是我应该使用Keycloak?

  • 我有一个Wildfly 10 ear应用程序(在服务器容器中运行),它需要能够发布到另一个Wildfly服务器上托管的远程队列。为此,我将这个jar从wildfly\bin\client文件夹复制到ear的lib文件夹中。效果很好。 但是现在,在正式打包之后,当我启动Wildfly和应用程序时,我收到一条错误消息。。。关于这个jar的清单文件。 设置应用程序以使各种类装入器都能找到这个jar的最佳