使用JavaMail的Java EE 6 Web配置应用程序服务器

5
我有一个Java EE Web应用程序,使用了Java EE 6 Web配置文件的特性 + EJB计时器服务和JavaMail。目前在开发过程中使用GlassFish 3.1.2完整配置文件,但我想调查其他选择,因为:
  • 似乎在GlassFish 3.1.2中存在多部分表单错误,而GlassFish 3.1.1有其他问题,这些问题在3.1.2中得到了解决。(进退两难...)该错误已由票证中的jar文件修复。
  • 支持“Web配置文件”的应用服务器选项似乎比“完整配置文件”更多,前者应该更轻量级。
  • 我想选择最佳的部署选项

我目前正在使用GlassFish的嵌入式应用程序服务器功能进行测试,因此希望任何替代方案都具有类似的功能。最坏的情况是,我可以继续使用GlassFish嵌入式进行自动化测试。

是否可以将JavaMail和EJB Timer Service实现模块“添加”到仅实现Web Profile的应用服务器中? 它能够正常工作吗? 如果这不可能,那么有没有替代方案来使用JavaMail和EJB Timer Service?

您能推荐符合我的要求的应用服务器吗?

最后,我考虑使用EJB的“异步调用”功能,它不是EJB lite的一部分。 如果我理解正确,在Java EE容器中运行时手动启动线程是非法的。 在这种情况下,如何在Java EE Web Profile中启动异步操作?

我对整个Java EE生态系统和术语仍然比较陌生,所以请不要犹豫让我澄清问题的任何部分。

支持文档

编辑1

根据Apache TomEE文档,TomEE、TomEE+和OpenEJB都很适合。
基于AS 7.1发布说明这个线程这个问题,JBoss AS 7.1.0似乎实现了我需要的所有功能。
3个回答

4
首先,我从未使用过GlassFish,所以无法提供有关它的任何信息。
我不确定您的应用程序是否正在为真正的生产环境构建,但是jboss 7.1目前没有官方商业支持,以防您遇到问题。
针对JDK 6优化的Jboss 5.1通过Red Hat提供商业支持。
也就是说,可以完全配置jboss实例,并且非常灵活。这意味着您可以从“web”配置文件开始,添加/删除不需要的服务(始终建议在生产环境中删除未使用的服务)。
这里有一个wiki,介绍了如何在jboss 5中缩小jboss配置文件的所有步骤。 缩小操作也可以反转,因此您可以向某个配置文件添加任何需要的内容。
基本上有两种方法:
  • 从像“default”或“all”这样的配置文件开始,并开始删除您的应用程序不需要的服务
  • 从“minimal”或“web”配置文件开始,并开始添加您的应用程序缺少的服务。您可以从具有该服务的配置文件中复制服务。(我个人更喜欢这种方法)

添加和删除服务可能需要反复尝试。您需要在互联网上搜索正确的指南,以了解要添加或删除的服务。(提示:始终在AS提供的配置文件副本上执行操作,并记录每个步骤。这样,如果您执行了似乎不可逆转的操作,您就可以重新开始。)

希望这对您有所帮助。


Slimming 4.x真是太痛苦了。5.1就容易多了,因为有更多的配置文件可供选择。我从来没有对6进行过精简。我永远不会再需要对7进行精简了! - Tom Anderson
是的,该应用正在为生产环境构建。商业支持选项很有趣,但中期并非必需。 - bernie
@Tom Anderson 为什么你永远不需要精简它? - bernie
这些可能是我喜欢的词语。但我的想法是,由于服务器是模块化的,它只会加载我实际需要的部分。如果它没有加载我不需要的东西,那就没有什么可以精简的了。 - Tom Anderson

3
汤姆说得对,JBoss AS7目前还没有商业支持。不过,它正在被制作为EAP 6(非常讨厌!),并且将在几天内进入测试版。社区版本已经发布了几个月,虽然它确实有很多问题,但基本上它运行得相当好。
AS7的架构比以前的版本更模块化。想法是只加载你需要的模块,这意味着尽管它是一个完整的配置文件实现(截至7.1),但如果你只使用Web配置文件功能,你只支付Web配置文件实现的运行时成本。你仍然需要不需要的位于磁盘上,但磁盘很便宜(7.1.0全部为125 MB-几乎不大)。
我很抱歉我没有使用过其他成熟的应用服务器(至少在过去十年中没有),所以无法对它们发表评论。我相信Geronimo支持完整的EE6配置文件,因此如果您不需要商业支持,那可能值得一看。

我花了一些时间使用基于Tomcat的设置。是的,你可以添加足够多的附加组件到Tomcat中,从而创建一种基本上是应用服务器的“仿生Tomcat”,但这样做实在是一项你不应该做的工作 - 纯粹浪费。我没有使用过TomEE。总的来说,我必须承认我不是Tomcat的忠实粉丝。


我从来不明白为什么JBoss 7会是商业版本6。这真让我烦透了。 - tom
我自JBoss 4版本以来就一直在调整它,以满足我的部署要求,删除未使用的模块,为开发团队获得最快的启动速度,在生产环境中运行并支持XA等其他很酷的功能,例如Kerberos/SPNEGO身份验证... 我遇到了一些问题,但是在最后一次机会时查看源代码是可能的!真是一个好产品。 - Yves Martin

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引用中。

谢谢您的示例。这非常接近我使用的嵌入式GlassFish。但是,这个解决方案是否可以用于生产环境?它现在似乎还处于测试阶段。 - bernie
EJB方面非常稳定。已经有人在生产中使用它。我们仍处于beta阶段的主要原因是我们正在TomEE方面进行一些启动性能工作。与其他应用程序服务器相比,它已经很快了,但与普通的Tomcat安装相比较慢。由于TomEE完全基于Tomcat,因此我们当然的目标是实现与普通Tomcat相当的启动时间。 - David Blevins
我刚听了你在Oreilly的访谈。做得好!我会尝试一下TomEE。 - bernie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接