java ee 部署_Java EE部署问题

我在部署Java EE应用程序时遇到了一些问题,可以使用一些建议。

我要部署3个组件:

集成层(数据):POJO和CDI Bean-JAR文件

应用层(BL):EJB,CDI Bean和POJO-JAR文件

表示层:Servlet等-WAR文件

理想情况下,我希望能够在同一Java EE服务器中同时部署集成层和应用程序层JAR,但可以将其部署为单独的JAR(因为我可能稍后要更改硬件配置,并将它们分为两个单独的两个不同的服务器机器)。

问题是,我无法从集成层JAR到应用程序层JAR进行CDI注入工作。服务器说(并且很可能如此)说,不可能解决注入问题。

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

将两个JAR打包到一个EAR文件中(也许也将WAR放入其中),然后进行部署

在不同的层之间使用JNDI(可能创建CDI生产者以基于JNDI名称或类似的名称进行一般注入)

在集成层中,使对象被注入到应用程序层(DAO)EJB中,而不是CDI bean中

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

最后,我的问题是:

有没有我找不到的选项,可以让我在CDI注入正常工作的情况下将两个JAR部署在同一服务器上?如果在某个时候将JAR分离到不同的服务器中,可能仍然会起作用?

是的,还有其他选择。

使用也支持OSGi的java EE容器,并使用OSGi接口处理您的部署依赖项。至少Websphere,Glassfish,JBoss(已安装jbosgi),Jonas支持部署OSGi捆绑软件。这意味着您的模块应转换为OSGi捆绑包。

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

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

我的投票将投给OSGi。

但是,如果将程序包部署到其他服务器,则它们都不能单独工作。在不同服务器之间需要一种远程技术,例如远程EJB,远程JNDI查找,Spring远程处理,基于HTTP的api,CORBA或类似技术。在Java EE中,EJB是事实上的标准,但是Spring远程处理也不错。

更新:您添加了使用TomEE服务器。实际上,TomEE将不支持我提到的前两个选项。在那种情况下,我将使用EJB-您可以使用EJB委托从业务层抽象您正在使用EJB的事实,并且可以仅将EJB(无状态会话bean)用于接口部分,而将DAO保留为POJO。 。

我在TomEE服务器上进行了部署,但我认为它不支持这两种选择。我还想让事情尽可能独立于服务器选择,以防日后更换服务器。我意识到EJB是做到这一点的方法,我唯一关心的是从集成层移动到应用程序层的对象是DAO,出于某种原因,将它们制成EJB对我来说似乎是错误的。我错了吗 ?

@eitanfar如果您为此使用EJB,则接口层应该是EJB(准确地说是无状态会话Bean),而不是DAO本身!我实现的方法是为接口->组件服务接口->组件服务实现->内部DAO提供一个EJB层。这样可以最大程度地将Ive所需的问题分离和分离。另外,对于我所有的EJB,都有一个单独的EJB委托实际上用于查找,因此EJB查找完成的事实对于应用程序层是不可见的。 EJB委托可以用作POJO。

我确实意识到这可能比您想要的要多,并且当然不是必须要有这么多的层。

如果我对您的理解正确,则建议您添加组件服务实现层(因为现在我已经具有组件服务接口和内部DAO)。我必须承认,它看起来确实比我最初计划的要分层,但是要再次给我提供更大的灵活性,因为它会增加去耦。而且,这似乎也以一种干净的方式解决了我的问题,因为病态所有的通信都是由EJB完成的,而没有暴露DAO本身。非常感谢 !

不确定您的目标是什么,但发动战争很好,甚至可以使用以下命令手动完成:

mkdir -p webapps/myapp/WEB-INF/lib

cp myjar*.jar webapps/myapp/WEB-INF/lib/

如果您的目标是能够拆分它们,则可以使用TomEE瘦身战争功能。

使用WEB-INF / jars.txt文件进行战争。

在此jars.txt中,按依赖项/ jar放置一行。它可以是jar或maven坐标的路径。

设置完成后,将允许您一次一个地更改jar,然后只需重新启动服务器即可。当几个团队使用同一个二进制文件时,这很棒。

TomEE有一些替代方法,但是这种方法具有易于更改为便携式(战争)的优势。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值