gpt4 book ai didi

Java EE 部署问题

转载 作者:行者123 更新时间:2023-11-30 09:07:48 26 4
gpt4 key购买 nike

我在部署 Java EE 应用程序时遇到了一些问题,需要一些建议。
我有 3 个组件要部署:

  • 集成层(数据):POJO 和 CDI Beans - JAR 文件
  • 应用层 (BL):EJB、CDI Beans 和 POJO - JAR 文件
  • 表示层:Servlet 等 - WAR 文件

最理想的是,我希望能够在同一个 Java EE 服务器中同时部署集成层和应用层 JAR,但作为单独的 JAR(因为我可能想稍后更改硬件配置并将它们分开到两个不同的服务器中在两台不同的机器上)。
问题是,我无法使从集成层 JAR 到应用程序层 JAR 的 CDI 注入(inject)正常工作。服务器说(而且可能是正确的)不可能解决注入(inject)问题。

到目前为止,我想出了这些可能的解决方案:

  • 将这两个 JAR 打包到一个 EAR 文件中(也可能放入 WAR 中......),然后部署它
  • 在不同层之间使用 JNDI(可能创建一个 CDI 生产者以根据 JNDI 名称或类似名称进行通用注入(inject))
  • 在集成层中,将对象注入(inject)到应用层(DAO)中,而不是 CDI bean

我不喜欢这些解决方案中的任何一个(尤其是最后一个),因为它们限制了我 future 的部署选项。第二种解决方案并不限制我,但在某些时候(当我积累了很多代码时)它可能会变得乏味。

最后,我的问题是:
是否有一个我还没有找到的选项,它允许我在 CDI 注入(inject)工作的情况下将两个 JAR 部署在同一台服务器上?如果在某个时候我将 JAR 分成不同的服务器,可能某些东西仍然有效?

最佳答案

是的,还有其他选择。

  1. 使用同样支持 OSGi 的 Java EE 容器,并使用 OSGi 接口(interface)作为部署依赖项。至少 Websphere、Glassfish、JBoss(安装了 jbosgi)、Jonas 支持部署 OSGi 包。这意味着您的模块应该转换为 OSGi 包。

  2. 使用允许模块相互通信的特定于容器的扩展。 JBoss 作为 jboss-deployment-structure.xml,您可以使用它来依赖于另一个部署。

  3. 为您的依赖项使用服务器提供的共享类路径。真的不会推荐这个。

我会投票给 OSGi。

但是,如果您将包部署到不同的服务器,它们都不会单独工作。不同服务器之间需要远程技术,如远程 EJB、远程 JNDI 查找、Spring 远程处理、基于 HTTP 的 api、CORBA 或类似技术。在 Java EE 中,EJB 是这方面的事实标准,但 Spring 远程处理也不错。


更新:您补充说您使用 TomEE 服务器。事实上,TomEE 不支持我提到的前两个选项。在那种情况下,我会使用 EJB——事实上,您正在使用 EJB,可以使用 EJB 委托(delegate)从业务层中抽象出来,并且您可以仅将 EJB(无状态 session bean)用于接口(interface)部分,将 DAO 保留为 POJO .

关于Java EE 部署问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23843850/

26 4 0
文章推荐: javascript - Javascript 有包含函数吗?
文章推荐: python - NeuPy:输入形状问题
文章推荐: javascript - 在运行时创建一个
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com