Seam 2.1.0 与 GlassFish v2 集成

发布者    |       Seam

Seam 2.1.0.SP1 版本中包含了一个新的参考指南章节,描述了Seam与GlassFish v2的集成。与大多数容器集成一样,大部分工作都是协调库差异、数据源和部署描述符更改。在这一点上,Glassfish没有不同,但是与我所写的其他容器相比,集成和与GlassFish一起工作要容易得多。

为了展示与GlassFish集成的简便性,我将向您展示如何部署2个不同的Seam示例,并将一个seam-gen应用程序迁移到一个博客中 - 而且不会很长 - 好吧,不会太长 ;-)

GlasshFish 版本和设置

对于这篇博客,我在Linux机器上使用GlassFish v2ur4-b04和JDK6。安装GlassFish的说明在下载页面的底部,相当简单。我假设您已经安装了它,并且已经按照下载页面上的说明创建了一个域。

注意:以下所有示例都需要启动GlassFish附带的嵌入式javaDB数据库。要启动和停止数据库,请执行

$ asadmin start-database
$ asadmin stop-database

Thejee5/booking示例

此示例基于Seam Booking示例,展示了如何构建符合Java EE 5规范的Seam应用程序。要构建和部署它,请按照以下步骤操作。

  1. 导航到$SEAM_HOME/examples/jee5/booking目录
  2. 执行ant
  3. 示例将构建的ear文件存放到$SEAM_HOME/examples/jee5/booking/dist目录。
  4. 使用GlassFish 管理控制台以默认设置部署jboss-seam-jee5.ear作为企业应用程序。
  5. 导航到 http://localhost:8080/seam-jee5/ 并查看示例。

就是这样,不需要其他任何东西。

Thejpa示例

这是使用Seam POJOs和Hibernate JPA实现的酒店预订示例。构建和部署这个示例几乎和jee5/booking示例一样。

  1. 导航到$SEAM_HOME/examples/jpa目录
  2. 执行ant glassfish
  3. 示例将构建的war文件存放到$SEAM_HOME/examples/jpa/dist-glassfish目录。
  4. 使用GlassFish 管理控制台以默认设置部署jbosseam-jpa.war以所有默认设置作为Web应用程序。
  5. 导航到 http://localhost:8080/jboss-seam-jpa/ 并查看示例。

这些示例构建和部署相当简单直接。这部分是因为它们考虑到了GlassFish集成。你可能想知道部署到GlassFish需要哪些实际更改。下一节将详细介绍这一点。

seam-gen项目迁移到GlassFish

Seam框架使用seam-gen作为开发人员快速启动应用程序的工具,并为添加自己的功能提供基础。seam-gen创建部署到JBoss AS的应用程序。本节将详细说明需要更改的内容,以便您可以在GlassFish中部署。

初始项目设置

第一步是获取seam-gen设置和创建基础项目。在$SEAM_HOME目录中执行./seam setup。这将启动一个有关您的应用程序的命令行调查问卷。根据您的喜好设置JBoss home和工作空间。将项目名称设置为 seamgen_example,使用RichFaces(而不是IceFaces),并想要创建ear项目。对于所有其他条目,您可以使用默认值。

然后执行以下操作来创建项目:seam-gen./seam new-project。然后导航到新项目以进行其余步骤。配置文件更改

以下是需要更改默认配置文件的各项更改。

resources/META-INF/persistence-dev.xml

  • jta-data-source更改为jdbc/__default用以下内容替换所有持久性属性
  • resources/GlassFishDerbyDialect.class
<property name="hibernate.dialect" value="GlassFishDerbyDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.SunONETransactionManagerLookup"/>

我们需要从

示例中复制此文件以解决GlassFish中包含的Derby (javaDB) 的问题。从jpaseamgen_example项目基本执行以下操作。resources/WEB-INF/components.xml

cp $SEAM_HOME/examples/jpa/resources-glassfish/WEB-INF/classes/GlassFishDerbyDialect.class ./resources

我们希望GlassFish管理我们的事务,因此需要添加

  • <transaction:ejb-transaction />和其命名空间xmlns:transaction="http://jboss.com/products/seam/transaction"在文件顶部。jndi-pattern
  • jta-data-source更改为java:comp/env/seamgen_example/#{ejbName}resources/WEB-INF/web.xml

我们需要在

web.xml底部添加以下内容,以便GlassFish正确绑定EJBs正确。resources/META-INF/application.xml

  <ejb-local-ref>
    <ejb-ref-name>seamgen_example/EjbSynchronizations</ejb-ref-name>  
    <ejb-ref-type>Session</ejb-ref-type>
    <local-home></local-home>
    <local>org.jboss.seam.transaction.LocalEjbSynchronizations</local>
  </ejb-local-ref>

我们的基础应用程序还没有任何自己的

,并且GlassFish不喜欢当应用程序声明一个包含没有正确。EJB模块时。正确。因此,我们需要删除以下内容

 <module>
    <ejb>seamgen_example.jar</ejb>
 </module>

更新构建文件

现在,唯一剩下的事情是更新build.xml文件为项目基本执行以下操作。项目。

添加GlassFishDerbyDialect.class到构建

为此,找到jar目标并添加以下<include name="GlassFishDerbyDialect.class" />如以下所示。

 <target name="jar" depends="compile,copyclasses" description="Build the distribution .jar file">
   <copy todir="${jar.dir}">
      <fileset dir="${basedir}/resources">
         <include name="seam.properties" />
         <include name="*.drl" />
         <include name="GlassFishDerbyDialect.class" />
      </fileset> 
   </copy>
  ...

添加依赖库

找到ear目标并将以下<include .../>元素添加到<copy todir="${ear.dir}/lib">,以便<fileset dir="${lib.dir}">看起来像这样

 <fileset dir="${lib.dir}">
   <includesfile name="deployed-jars-ear.list" />
   
   <!-- Hibernate and deps -->
   <include name="hibernate.jar"/>
   <include name="hibernate-commons-annotations.jar"/>
   <include name="hibernate-annotations.jar"/>
   <include name="hibernate-entitymanager.jar"/>
   <include name="hibernate-validator.jar"/>
   <include name="jboss-common-core.jar" />
   
   <!-- 3rd party and supporting jars -->
   <include name="javassist.jar" />
   <include name="dom4j.jar" />
   <include name="concurrent.jar" />
   <include name="cglib.jar" />
   <include name="asm.jar" />
   <include name="antlr.jar" />
   <include name="commons-logging.jar" />
   <include name="commons-collections.jar" />
 </fileset>

构建和部署

此时,唯一剩下的事情是构建和部署应用程序。

要构建它,您只需在目录中运行ant archive项目基本执行以下操作。即可。这将创建一个seamgen_example/dist包含seamgen_example.ear文件的目录。

按照我们部署其他示例的方式部署此示例。jee5/booking示例一样。

http://localhost:8080/seamgen_example查看你的劳动成果。

总结

所以,这篇博客比预期的要长一些,但我们部署了3个应用程序,而不仅仅是1个,就像其他互操作性博客一样 ;-) 这应该为你基于GlassFish的Seam应用程序提供了一个良好的起点。

有关安装GlassFish的更多详细信息以及我们所做的某些更改,请参阅Seam on GlassFish应用服务器参考指南章节。

更新:最近对参考指南章节进行了一些更改和修复。本博客包含最新信息,更新将在Seam 2.1.1.CR1版本中提供。


返回顶部