¿ SessionBeans和Grails?
对Grails的是我个人最喜欢的特质之一是它与JEE整合。 既然我们可以使用Grails标签JSP,会话bean和EntityBeans,好像他们是一个框架的组成部分。
在这篇文章中,我们将重点放在如何,我们可以调用SessionBeans本地或从我们的代码Grails的遥控器。 这种可能性,以及带来的适应性和可扩展性的EntityBeans Grails的管理。 我的意思是一本,这是我们可以开发一个整齐在Grails整个应用程序,再后来去和服务模式,以实体和SessionBeans分别。 这样我们就可以迅速开始开发你的应用程序使用在动态环境中的优势,然后被应用程序时更明确和不常见的变化,然后我们可以将业务层到JEE。 这一变化不会影响任何如控制器或视图Grails的其他部分。
为了实现后者所有我们要做的就是取代代表团的服务操作代码上创建SessionBeans相同的操作。
然后,我们将看到Grails如何配置为使用EJB2.1 EJB3.0 SessionBeans都
注射SessionBeans
Grails允许同时在服务和任何SB司机喜欢你和你的服务做注射。 当Grails使用在其组件的管理春天是可能的范围内使用Grails的所有这优势。 最简单的方法来设置要进入驱动程序或服务,尤其是SB注入的对象,是使用文件resources.groovy。 这个文件相当于春节applicationContext.xml文件,而不是作为一个XML文件仅是一个类,使用配置作为DSL SpringBuilder常规。 默认情况下,文件资源发现grails-app/conf/spring并具有下列内容:
/ /将你的Spring DSL代码在这里 豆类= { }
在封闭是你应该添加的bean的定义。
JNDI服务器配置
访问任何应用程序中的服务器组件使用JNDI必须这样做。 对于这个Spring提供了一个实用工具类,它提供了诸如JNDI名称查找服务器的操作,同时也作为一个JNDI上下文提供者的行为。 为此我们必须添加以下定义在resources.groovy
ejbJndi(org.springframework.jndi.JndiTemplate){ 环境= [ “Java.naming.factory.initial”,“org.jnp.interfaces.NamingContextFactory” “Java.naming.provider.url”,“JNP:/ / http://localhost:1099
其中:
- ejbJndi
- 在bean的类型org.springframework.jndi.JndiTemplate是名称。 此名称可以是任何东西。 正是这一点,将参考确定名称服务器,提供了访问对象的名称。
- 环境中
- JndiTempalte是其中的一个地图,具有JNDI属性中配置属性
在一个文件可能高达JndiTemplate JNDI提供许多定义需要访问。
JNDI服务器配置环境
这是非常可能的和必要的,这需要不同的配置JNDI服务器的IP和环境的开发,生产或测试端口。 要做到这一点应该被追加到以前的配置如下:
- 放置的IP和端口的JBoss环境中的Config.groovy每个值。
- 导入文件类型resources.groovy ConfigurationHolder
- 替换变量“java.naming.provider.url”由配置收取的IP和端口。
示例
Config.groovy
... 环境{ {发展 ... jboss.ip =“10.200.8.173” jboss.port =“1099” ... } 生产{ ... jboss.ip =“172.16.2.105” jboss.port =“1099” ... }
Resources.groovy
org.codehaus.groovy.grails.commons进口.* ... ejbJndi(org.springframework.jndi.JndiTemplate){ 环境= [ “Java.naming.factory.initial”,“org.jnp.interfaces.NamingContextFactory” “Java.naming.provider.url”,“JNP ://"+ +":"+ ConfigurationHolder.config.jboss.ip ConfigurationHolder.config.jboss.port] }
配置EJB 3.0组件
要注入EJB 3.0组件必须添加以下配置:
xXXServices(org.springframework.jndi.JndiObjectFactoryBean){ 的jndiName =“XXXServices /远程” jndiTemplate = REF(“ejbJndi”) }
其中:
- xXXServices
- 这个名字是你给的远程引用的SB和将被用来注入驱动程序和服务的。 任何驱动程序或服务,有一个名为属性xXXServices注入参照该文件中定义的远程resources.groovy名SB。 第x为小写表示,按照惯例的名称必须以小写。
- 的jndiName
- 名称,通过它来定位参考JNDI服务器SB
- jndiTemplate
- bean的名称作为一个供应商来访问JNDI对象使用。 是指在上一节。
要使用服务的SB是:
EjemploServices {公共类 DEF xXXServices unMetodo无效(参数1,参数2){ xXXServices.invocoMetodoEnEJB(参数1,参数2) } }
配置EJB 2.1组件
为了注入EJB 2.1组件必须添加以下配置是类似于EJB 3.0可见。
xXXServices(org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean){ 的jndiName =“EJBXXXServices” businessInterface =“biz.aquait.yyy.ejb.EJBXXXServices” jndiTemplate = REF(“ejbJndi”) refreshHomeOnConnectFailure = TRUE lookupHomeOnStartup = FALSE }
其中:
- xXXServices
- 这个名字是你给的远程引用的SB和将被用来注入驱动程序和服务的。 任何驱动程序或服务具有这个名称的属性是xXXServices注入参照该文件中定义的远程resources.groovy名SB。 第x为小写表示,按照惯例的名称必须以小写。
- 的jndiName
- 名称,通过它来定位参考JNDI服务器SB
- refreshHomeOnConnectFailure
- 刷新回家当它检测到一个连接失败,例如当服务器重新启动
- lookupHomeOnStartup
- 它使应用程序不执行查找来提高,而是使用SB服务。
- jndiTemplate
- bean的名称作为一个供应商来访问JNDI对象使用。 是指除第一点。
- businessInterface
- 该SB,即远程接口,扩展EJBObject的。
如何使用在服务或其他组件的SB是相同的方式,为SB引用了EJB 3.0实现。
结论
经过上面介绍的步骤,我们可以说,SB配置Grails的使用非常麻烦,而这些框架内使用的是透明的,在相同的方式,一个Grails服务中使用。

SessionBeans一个项目可以部署在如Tomcat Web容器? 或是否有必要使用一个像GlassFish应用服务器?
好职位
有状态或无状态的SB要么需要一个EJB容器,因此需要在一个如GlassFish或JBoss应用服务器上运行。 另一方面Tomcat的只是一个Web服务器,因此有一个Web容器中的组件部署PODES如JSP,JSF和Servlet的网页。
如果由于某种原因不希望有你的应用程序在服务器上运行Grails应用程序可能有一个分布式体系结构。 这将有一个Tomcat Web应用程序,它使用远程在SB谁在另一台机器上安装的应用程序服务器。