最近很多人问我是否必须等到EAP 6才能在受支持的JBoss应用服务器中使用CDI。好消息是,不必等待!尽管目前没有针对CDI本身的商业化产品(即它不受支持),但得益于Weld-servlet库,您仍然可以将它用作基于EAP的应用程序的组件框架。更好的是,它不需要对默认的EAP安装进行任何配置更改 - 基于CDI的应用程序可以直接部署到其中,并立即运行。
开始使用基于EAP 5.x的CDI项目最简单的方法是使用Maven原型。Dan已经为我们准备好了,让我们来一步步了解如何启动。
先决条件
- SVN客户端
- Maven
- EAP 5.1
- 可运行shell脚本的操作系统的机器(Linux/OSX/Cygwin)
1. 从SVN检出原型源代码(此步骤需要SVN客户端)
svn co http://anonsvn.jboss.org/repos/weld/archetypes/eap51-weld-jsf-webapp/trunk/ eap51-weld-jsf-webapp
2. 切换到原型项目目录
cd eap51-weld-jsf-webapp
3. 使用提供的shell脚本安装原型
./create-archetype.sh install
最后一步将在本地Maven仓库中创建原型并安装它。一旦安装了原型,我们就可以使用它来创建一个新项目。
4. 使用原型创建新项目。通常您会从保存所有项目的目录中运行此命令。
mvn archetype:generate -B -DarchetypeCatalog=local -DarchetypeArtifactId=eap51-weld-jsf-webapp -DarchetypeGroupId=org.jboss.weld.archetypes -DarchetypeVersion=1.0.0-SNAPSHOT -DartifactId=test-project -DgroupId=com.acme -Dpackage=com.acme.test -Dversion=1.0.0-SNAPSHOT -Dname="JSF 1.2 and CDI webapp project"
您需要替换以下参数值
- -DartifactId- 您希望用于应用程序的Maven工件ID
- -DgroupId- 您希望用于应用程序的Maven组ID
- -Dpackage- 您项目的基包名。原型将在该包内生成一些子包。
- -Dname- 您项目的描述性名称
5. 切换到您的新项目目录。它将具有您在上一步骤中指定的artifactId参数的相同名称。
cd test-project
6. 查看项目!原型已创建了一个完整的项目,包括默认的数据源和Arquillian对单元测试的支持。查看src目录,并注意已经为您创建的源包。当然,如果您愿意,可以修改这些包。
7. 配置JBOSS_EAP_HOME环境变量。这样Maven就会知道您的项目部署在哪里。或者,在Maven的.m2/settings.xml文件中设置一个属性值jboss-eap.home。项目根目录中包含的readme.txt文件解释了如何进行此操作的具体细节。readme.txt文件。
8. 构建和部署项目。确保EAP服务器已经运行,以便进行此步骤
mvn clean package jboss:hard-deploy
9. 检查EAP日志以确认项目已成功部署,然后使用网页浏览器打开项目的首页
http://localhost:8080/test-project
当然,您需要根据项目输入的artifactId修改上述URL。
完成!从现在开始,您拥有一个完全可工作的项目,可以随意修改。如果您想看到一个更全面的示例,该示例可以在EAP中运行,请查看Ticket-Monster示例。这是一个基于EAP 5.1的演示,我们目前正在开发中(即,并非所有功能都可用)以展示Seam在云环境中的功能(托管在github.com)
http://github.com/pmuir/ticket-monster
在这个示例中,我们使用了Seam Persistence模块、Seam Remoting和Errai来为示例的管理控制台提供一个基于GWT的界面。顺便提一下,Ticket-Monster还使用了我们目前正在开发的Seam-Cloud模块,该模块提供jClouds支持和Infinispan集成。其他Seam 3模块也很可能在EAP 5中无缝工作,但在此我不会提供确切的列表(您可以自行实验;)。