我有一个Java EE Web应用程序,它使用Java EE 6 Web配置文件+ EJB Timer服务和JavaMail中的功能。我目前正在开发期间使用GlassFish 3.1.2完整配置文件,但我想研究替代方案,因为:
我目前正在使用GlassFish的嵌入式应用程序服务器功能进行测试,因此需要为任何替代方案提供类似的工具。在最坏的情况下,我可以忍受格式化为嵌入式自动化测试的GlassFish。
是否可以将JavaMail和EJB Timer Service实现模块“添加”到仅实现Web配置文件的应用程序服务器?它运作良好吗?如果无法做到这一点,是否有使用JavaMail和EJB Timer Service的替代方法?
您可以推荐哪些符合我要求的应用服务器?
最后,我考虑使用EJB的“异步调用”功能,它不是EJB lite的一部分。如果我理解正确,在Java EE容器中运行时手动启动线程是违法的。在这种情况下,如何在Java EE Web Profile中启动异步操作?
我对整个Java EE生态系统和术语仍然比较陌生,所以请不要犹豫,让我澄清我问题的任何部分。
根据Apache TomEE doc,TomEE,TomEE +和OpenEJB符合该法案。
基于the AS 7.1 release notes,this thead和this issue JBoss AS 7.1.0似乎实现了我需要的所有功能。
答案 0 :(得分:4)
首先,我从未使用过GlassFish,因此我无法向您提供任何相关信息。
我不确定您的应用程序是否正在构建真正的生产环境,但jboss 7.1在遇到麻烦时还没有任何官方商业支持。
针对JDK 6优化的Jboss 5.1通过red hat提供商业支持。
话虽这么说,jboss实例可以完全配置并且非常灵活。这意味着您可以从“网络”开始。配置文件和添加/删除您不需要的服务。 (始终建议在生产环境中删除未使用的服务。)
这是一个wiki,它提供了有关在jboss 5中减轻jboss配置文件的信息。它指示了删除服务所需的所有步骤。 减肥操作也可以颠倒,因此您可以将任何需要的内容添加到特定的个人资料中。
所以基本上有两种方法:
添加和删除服务可能是一种反复试验的工作。您需要在互联网上搜索正在尝试添加或删除的服务的正确指南。 (提示,请始终对AS提供的配置文件副本执行操作并记录每一步。如果您执行的操作看起来不可逆转,则可以重新开始。)
我希望这有任何帮助。
答案 1 :(得分:3)
AS7具有比以前版本更加模块化的架构。这个想法是你只加载你需要的模块,这意味着尽管它是一个完整的配置文件实现(从7.1开始),如果你只使用web配置文件功能,你只需支付Web配置文件实现的运行时成本。你仍然有你不需要坐在磁盘上的位,但磁盘很便宜(7.1.0是125 MB全部 - 几乎不是很大)。
我担心我没有使用任何其他完全成熟的应用服务器(至少在过去十年中没有),因此无法评论它们。我相信Geronimo支持完整的EE6,所以如果你不需要商业支持,那可能值得一看。
我花了一些时间使用基于Tomcat的设置。是的,您可以为Tomcat添加足够的额外内容来创建一种基本上是应用程序服务器的“仿生Tomcat”,但是自己动手做是你真正不应该做的工作 - 纯粹的浪费。我没有用过TomEE。一般来说,我不是Tomcat的忠实粉丝,我不得不承认。
答案 2 :(得分:2)
正如您所说,OpenEJB / TomEE非常适合该法案。根据您提到的内容,以下是您可能会喜欢的一些示例:
要在测试用例中配置JavaMail资源,请执行以下操作:
Properties p = new Properties();
p.setProperty("superbizMail", "new://Resource?type=javax.mail.Session");
p.setProperty("superbizMail.mail.smtp.host", "mail.superbiz.org");
p.setProperty("superbizMail.mail.smtp.port", "25");
p.setProperty("superbizMail.mail.transport.protocol", "smtp");
p.setProperty("superbizMail.mail.smtp.auth", "true");
p.setProperty("superbizMail.mail.smtp.user", "someuser");
p.setProperty("superbizMail.password", "mypassword");
EJBContainer.createEJBContainer(p);
然后通过以下方法将JavaMail会话注入EJB:
@Resource
private Session superbizMail;
幕后制作'superbizMail'。对所有属性进行削减,并将生成的属性集传递给javax.mail.Session.getDefaultInstance(Properties props)
。结果Session
是注入@Resource
引用