Tomcat 无法处理的 Java EE 场景
Posted
技术标签:
【中文标题】Tomcat 无法处理的 Java EE 场景【英文标题】:Java EE scenarios that cannot be handled by Tomcat 【发布时间】:2011-09-14 21:59:51 【问题描述】:Tomcat 只实现了 Java 企业版架构的 web 容器。相反,例如GlassFish 实现了一个完整的 Java EE 堆栈。这个has been discussed 在*** 上很多。
但是,对于像我这样的 Java EE 初学者来说,很难想象 Tomcat 不能做什么。你能举一些简短的例子吗?
【问题讨论】:
【参考方案1】:来自Apache tomcat documentation:
tomcat 是 EJB 服务器吗?我可以将 EJB 与 tomcat 一起使用吗?
Tomcat 不是 EJB 服务器。 Tomcat 不是一个完整的 J2EE 服务器。 Tomcat 是一个 Servlet 容器。 Tomcat 确实支持 Servlet 所需的 J2EE 规范的那些部分,例如 JNDI 功能的子集。此外,您可以连接到远程 J2EE 服务器,或运行嵌入在完整 J2EE 服务器中的 tomcat。
这暗示的一些差异是......
Tomcat 只能处理 WAR,不能处理 EAR Tomcat 不支持任何类型的 EJB(如会话 Bean、MDB、计时器等) Tomcat 不支持 JPA Tomcat 的 JNDI 功能有限(不确定此处的详细信息)Tomcat 可以在 J2EE 容器内用作 Web 容器。
Tomcat 在资源和文件系统占用方面要轻得多。
如果您需要 J2EE 功能,我的建议是硬着头皮使用 Glassfish,尽管它具有复杂性和资源要求(与 tomcat 相比,Glassfish 与 Weblogic 和 JBoss 等其他产品相比非常易于使用)。如果没有,请坚持使用 tomcat,它会让您的事情变得简单快捷。无论哪种方式,稍后切换项目打包并换出容器并不难。
【讨论】:
我试图理解为什么 tomcat 不是 EE 容器,但我有点困惑。 @Jesse Webb您在回答中说tomcat不支持JPA。这是否意味着 JPA 根本不能与 tomcat 一起使用?因为我很确定在我部署在 tomcat 6 中的一个 Web 应用程序中,我已经成功实现并使用了 JPA2.0。谢谢 @NikosDim Tomcat 没有内置 JPA 支持。 This example of using EclipseLink for JPA in Tomcat 很好地总结了它:“Tomcat 6 在设计上不是符合 Java EE 5 的服务器,因为它是一个 servlet 容器,但是 servlet 容器能够在应用程序管理的 Java SE(独立)中运行 EJB 3.0/JPA 应用程序模式。”基本上,你可以让它工作,但它涉及一个自定义部署,你将 Java EE 库放在你的 Tomcat 服务器上。【参考方案2】:Java EE 包含大量技术/功能。其中一些作为 Tomcat 下载的一部分提供,另一些可以添加到基于 Tomcat 的环境中,而有些则不能添加到 Tomcat 环境中。
将 EJB jar 部署到 Tomcat:否。
调用在 EJB 容器中运行的 EJB 的远程方法:是。
在 Tomcat 上部署 RAR:否。
在 Tomcat 上部署 EAR:否。
将应用程序客户端 jar 部署到 Tomcat:否。
拼凑出一种托管 Java Web Startable 应用程序的方法,该应用程序调用在 EJB 容器中运行的 EJB 的远程方法:是
使用 JSF 作为您应用的框架:可以,但您需要在您的应用中打包一个实现或将其安装到您的服务器上。
创建一个利用 JSR-88 来管理将 war 文件部署到 Tomcat 的程序:不……这并不是一个巨大的损失。
使用 JSR-77 MEJB 管理您的 Tomcat 服务器:不……又不是巨大的损失。
创建提供 SOAP Web 服务的 Web 应用程序:是的……但您需要将工具和库作为单独下载的一部分获取,并自行将它们与您的工作流、应用程序和服务器运行时集成。
创建使用 JPA 的 Web 应用程序:是的...但您需要将工具和库作为单独下载的一部分,并自行将它们与您的工作流、应用程序和服务器运行时集成。
创建使用 CDI 的 Web 应用程序:是的...但您需要将工具和库作为单独下载的一部分,并自行将它们与您的工作流、应用程序和服务器运行时集成。
【讨论】:
【参考方案3】:EJB - 无状态会话 Bean、有状态会话 Bean 消息驱动的 bean EJB 定时器 JPA (EJB3.0)
这是一个非常基本的列表。还有很多 Tomcat 没有的功能。
【讨论】:
以上是关于Tomcat 无法处理的 Java EE 场景的主要内容,如果未能解决你的问题,请参考以下文章
mysql job failed to start-tomcat问题变种
Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules
MyEclipse中点击Deploy MyEclipse J2EE Project to Server怎么没有反应