我正在阅读本书Beginning Java™ EE 6 Platform with GlassFish™ 3: From Novice to Professional ,我对下图有疑问。我以为我已经读过某些地方,Web服务等服务只在EJB容器中提供,但是从下面的图片(显示每个容器提供的服务:引用书)看来,Web容器也提供了该服务。这是正确的还是我误解了图像和图像文本?如果这是正确的,那么这意味着我可以将我的应用程序打包为WAR并将其部署到Web容器并仍然使用Web服务API?
答案 0 :(得分:1)
如果我错了,有人会纠正我,但从历史上看,它有点其他方面:它是一个EJB服务,现在可以注释为@WebService
。
是的,web和ejb容器都可以提供Web服务。是的,您的网络服务可以打包在一场战争中。
答案 1 :(得分:1)
缓存,池化,命名,生命周期管理和RMI
答案 2 :(得分:0)
正如Osw所说,这些概念正在融合在一起。
在EAR应用程序中,您可以拥有单独的Web和EJB模块。 EJB模块传统上专注于业务逻辑,可通过本地或远程(RPC / RMI)调用访问。由于Web服务的一种用法是RPC,因此为EJB模块提供对这些技术的支持是有意义的。从纯粹的技术角度来看,它基本上只是做RPC的另一种协议。
然而,Web模块和Web服务的概念自然也会重叠,因此Web模块当然也支持这种技术(至少因为Web服务不仅仅是RPC)。
进一步模糊线条的事实是EJB bean曾经专门用于放入EJB模块,但现在可以在Web模块中使用它。
Java EE的未来版本可能会更加模糊,当许多现在属于EJB bean的容器服务(如事务,池等)将与它们分离并通过CDI注释提供时,所以它们可以直接应用于所有“网络组件”。
通过这种方式,Web模块确实是EJB模块的超集。
EJB模块的功能仍然是它允许您在通过类加载器隔离的Web层下面具有一层功能。这意味着Web模块可以引用您在EJB模块中定义的类,但不能反过来。此外,EJB模块中没有像Servlet,JSP和JSF这样的纯表示技术,目前还没有计划在那里提供这些技术。