Jef*_*zin 5 singleton java-ee java-ee-6 ejb-3.1 glassfish-3
好的,仍然试图在这里理解基本的EE 6概念.我希望有人可以帮助我.
我正在使用单个域运行GlassFish v3服务器Kukla.我部署了MyEEApp.ear,它包含MyEEWebApp.war,MyEJBs.jar和MyUtilityLibrary.jar.我的EJB jar包含一个名为MySingleton的@Singleton bean.
然后我设置另一个名为Fran的服务器,并部署相同的EAR.我为第三台服务器做了同样的事情,叫做Ollie.
三个相同的EAR文件部署到三个相同(名称和IP地址除外)服务器.
所以这是我的问题:
我知道,很多问题.对于那个很抱歉!
非常感谢您的帮助!杰夫
Pas*_*ent 17
在给定的服务器上,比如Kukla,我有多少"容器"?EAR只有一个容器吗?或者WAR和EJB jar也有自己的容器吗?
术语"容器"可能有点模糊,但我会这样说:一个完整的Java EE应用服务器,如GlassFish,提供Web容器和EJB容器.部署EAR时,将由Web容器部署和管理WAR,并且EJB容器将部署和管理EJB.这在下图(来自Java EE教程)中说明:

不知何故 - 如果我让事情变得混乱,我已经感到很遗憾 - EAR也是一种(逻辑)容器,因为Java EE服务器将为EAR中的每个EAR和Java EE模块提供一个定义明确的隔离类加载器层次结构.从Packaging EJB 3应用程序中检查Java EE应用程序中的 类加载,以获得对类加载的精彩介绍.
第一个答案的实际后果是什么?
问题很模糊,但......这里有一些例子:
就此而言,究竟是一个容器究竟是什么?
用我的话说,为部署在其上的组件提供运行时环境和服务.Tomcat是一个(Web)容器,OpenEJB是一个(EJB)容器,Spring是一个(IoC)容器.
有关更正式的"Java EE"定义,请查看Java EE教程的Java EE Containers部分.
我的WAR中的类可以使用@EJB注入来访问EJB jar中的bean,因为它们都是同一个EAR的一部分吗?
是的他们可以.
就此而言,普通的旧Java类可以使用@EJB注入,还是仅适用于其他EJB?
在Java EE 6之前,只有托管组件(如EJB,Servlet,过滤器,JSF Managed Beans)才能从注入中受益.但是使用Java EE 6,现在可以使用CDI(Java C ontexts和D ependency I njection)将任何类转换为托管bean.在这种情况下,您可以这样做:
@Inject MyEJB service
Run Code Online (Sandbox Code Playgroud)
但是您的POJO需要是CDI托管bean.
我将创建多少单例bean的实例?每个服务器一个?或者只是一个?如果每个服务器一个,是否有任何方法可以保证整个集群中的"真正"单例?
该规范并没有涵盖集群的支持,但它是恕我直言,很可能大多数厂商将单身集群安全,就像有状态会话Bean(或者你将无法共享状态,这将使他们不是非常有用).但没有严格的答案.
请记住,市场上还没有Java EE 6集群感知容器(好吧,GlassFish 3.1具有基本集群支持和应用程序版本控制,因为里程碑1但GF 3.1尚未最终,最终版本计划在最后今年).
在GlassFish中,我在何处以及如何配置JNDI以查找资源?例如,我可以将EJB jar从一台机器移动到另一台机器并让Web应用程序自动找到它吗?
在创建InitialContext或提供a 时使用非空构造函数传递环境设置jndi.properties.GlassFish附带默认值(in jndi-properties.jar),如果需要,可以在您的应用中捆绑您的.
是否可以为EJB bean配置负载平衡?如果是这样,怎么样?
负载平衡由为集群EJB获取的EJB客户端存根处理,默认策略通常是循环负载平衡.其他典型策略包括基于权重的负载平衡,随机负载平衡(以及其他可能).但我不知道GlassFish会支持哪些策略.
如前所述,除非您开始使用Milestone版本的GlassFish 3.1,否则尚无群集支持.
对于WAR的三个实例怎么样?有没有办法配置负载平衡,以便请求转到最少使用的机器上的实例?
我要说这一切都取决于负载均衡器(可能是硬件,软件).我将简单地谈谈常见的Apache mod_jk方法.据我所知,Apache mod_jk可以使用以下三种方法之一分配工作:
| 归档时间: |
|
| 查看次数: |
3317 次 |
| 最近记录: |