第3章 开始Seam,,使用 JBoss Tools
JBoss Tools是一个Eclipse插件集。JBoss Tools以向导方式创建Seam一个项目,为facelets 和Java 代码提供统一的EL内容助手,一个图形化的jPDL编辑器,一个图形化的Seam配置文件编辑器,在Eclipse中支持Seam集成测试,等等。
简言之,如果你是Eclipse用户,那么你会想要JBoss Tools!
JBoss Tools,与seam-gen和JBoss AS,配合最好,你的应用程序如果运行在其它服务器上,可能存在一些问题。有关很多变化的那些描述在后面的参考手册中。
3.1. 开始之前
在开始之前,确信你已正确地安装了JDK 5, JBoss AS 4.2, Eclipse 3.3, JBoss Tools插件(至少有Seam工具, 可视页面编辑器, jBPM 工具 和 JBoss AS 工具)以及TestNG插件。
TODO——升级站点有详细的说明。
[*
JBoss Seam 开发环境IDE配置:
Eclipse 3.4+ jboss as 5.0.0.CR2 Release Candidate+JBossTools3.0+ testng-eclipse-5.8.0.1
1、 Eclipse IDE for Java EE Developers (163 MB)
Eclipse 3.4下载地址:http://www.eclipse.org/downloads/
2、 JBossTools-200810070143-nightly-ALL-win32.zip
JBossTools3.0下载地址:http://download.jboss.org/jbosstools/builds/nightly/200810070143-nightly/index.html
3、 testng-eclipse-5.8.0.1.zip
testng-eclipse-5.8.0.1下载地址: http://testng.org/doc/download.html
有关testng插件的使用请参考:http://testng.org/doc/documentation-main.html
解压安装Eclipse 3.4,将JBossTools3.0与testng-eclipse-5.8.0解压,并将其插件目录plugins和features下的内容拷入Eclipse 3.4对应目录下。
安装新插件后,启动Eclipse,在Eclipse 3.4目录下最好运行一次Eclipse –clean命令。
配置原有Jboss as 4.2.3(all)服务器:
New Server->Jboss,a division of Red Hat ->Jboss as 4.2
建Seam项目:
File->new ->other->Seam-> Seam Web Project
成功!
但是,启动Jboss as 4.2.3(all),开始部署正常,但以后不知什么原因,部署总是报“Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener”
,有人说是安装目录名有空格造成的。将空格取消,问题仍然。
然而,用seam-gen产生的项目,导入到eclipse中,可以使用,但报jstl.jar包有错,可能是下载的seam2.1的这个文件有错,找一个jstl.jar导入库中,一切正常!
4、 不用Jboss as 4.2.3(all),改用jboss-5.0.0.CR2-jdk6.zip(jboss as 5.0.0.CR2 Release Candidate)版
下载地址:http://www.jboss.org/jbossas/downloads/。
重配服务器,如下所示,一切正常!
*]
3.2. 设立一个新的Seam项目
启动Eclipse,选Seam透视图。
到 File -> New -> Seam Web Project。
首先,为你的项目输入一个名字。对这个教程,我们使用了helloworld。
现在,我们需要告诉JBoss Tools相关的JBoss AS。有两个处理阶段,首先我们需要定义一个运行时间,确信你选了JBoss AS 4.2:
输入运行时间名字,并在你的硬盘上定位它:
下一步,我们需要定义一个JBoss Tools能部署项目的服务器。再次确定选了JBoss AS 4.2,也正确地定义了运行时间:
在下一屏幕给出了服务器名,并点击Finish完成:
确定你刚刚创建的运行时间和服务器被选取,选取Dynamic Web Project动态网页项目Seam 2.0(技术预演)并点Next下一步:
下面第3屏幕,允许你将来自定义你的新项目,但是对我们而,缺省更好。所以只需点击
Next。直到最后屏幕。
在这里的第一步是告诉JBoss Tools有关你想使用的Seam下载版。增加一个新的Seam 运行时间——确定给了它名字,并选取了2.0版:
你需要做的最重要的选择是在你的项目是EAR部署还是WAR部署之间做一个选择。EAR项目支持EJB 3.0 ,并要求Java EE 5。WAR项目不支持EJB 3.0,便可以被部署到一个J2EE
环境。一个WAR包简单容懂。如果你安装了一个迅速的EJB3应用服务器,如JBoss,选择ear。否则,选择WAR。我们假设你为后面的教程已经选择了一个EAR部署,然而,对一个WAR部署你能正确地跟随同样的步骤。
下一步,选取你的数据类型。我们假设你已安装了MySQL,用了一个存在的数据库。你需要告诉JBoss Tools有关你的数据库,选取MySQL作为数据库,并创建一个新的连接profile文件。选取Generic JDBC Connection普通JDBC连接(eclipse 3.4选取MySQL连接):
给它一名字:
JBoss Tools没有带任何数据库驱动程序,所以你需要告诉JBoss Tools MySQL JDBC驱动程序在那儿。告诉它有关驱动程序点.... Locate MySQL 5,并点Add...:
选取MySQL JDBC Driver模版:
通过选Edit Jar/Zip查找到你计算机上的MySQL JDBC Driver的jar包:
[移去默认,Add增加也行]
写入数据库连接使用的用户名和密码,如果正确,点Ok。
最后,选取新建的驱动程序:
如果你使用了一个存在的数据模型,确信你告诉了JBoss Tools数据表已经存在数据库中。
输入连接使用的用户名和密码,用Test连接按钮测试的连接,如果它成功,点Finish完成:
最后,查看你产生的bean的包名,如果如果成功,点Finish完成。
JBoss支持先进的WARs 和 EARs热布置。不幸地,导致JVM程序缺陷,重复一个EAR布置——在布置期间,那是普通的——最后引起JVM内存溢出。为这个原因,在开发期间,我们推荐运行JBoss在一个有一个巨大的内存的永久保存区域的JVM上。如果你从JBoss IDE运行JBoss,你能在服务器启动配置中配置这个,在"VM arguments"下。我们建议下面的值:
-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512
如果你没有这么多的内存可用,下面是我们推荐的最小配置:
-Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256
如果你从命令行运行JBoss,你能在bin/run.conf文件中配置JVM选项。
定们到JBoss Server 视图中的服务器,右击服务器,并选取 Edit Launch Configuration(编辑启动配置):
然后,改变VM参数:
如果现在你不想麻烦这些事,你不必管——当你第一次遇到OutOfMemoryException,稍后再恢复它。
启动JBoss,并部署项目,右击刚你创建的服务器,点Start(或调试,启动in debug mode):
不要恐惧产生在项目中的XML配置文本。它们是最标准的Java EE东西,以前你需要建立这些东西,然后不会再看它们,在所有Seam项目之间,它们90%是相同的。
3.3. 创建一个新的动作Creating a new action
如果你习惯于传统的动作类型网页框架,你可能会惊讶在JAVA中用无状态动作方法创建一个简单网页。
首先,选择 New -> Seam Action:
现在,输入Seam组件名字。JBoss Tools智能给其它字段选取缺省值:
最后,击Finish完成。
现在,到http://localhost:8080/helloworld/ping.seam。并点击按钮。查看项目src目录,你能看见在这个动作后的代码。设置一个断点在ping()方法,并再点击按钮。
最后,打开helloworld-test项目,定位PingTest类,右击它,并选Run As -> TestNG Test:
3.4.创建一个表单
现在,输入Seam组件名字。JBoss Tools智能给其它字段选取缺省值:
到http://localhost:8080/helloworld/hello.seam。然后看一下产生的代码。运行测试。试着增加一些新字段到表单和Seam组件(注意,每次你改变了src/action目录里的代码,你不必重启应用程序服务器,因为Seam为你热加载了组件。章节 3.6,“Seam和改进的热部署”)
3.5. 从一个存在的数据库产生一个应用程序
在你的数据库中手动创建一些表。(如果你需要切换到一个不同数据库,创建一个新的项目,并选取正确数据库)。然后,选择New -> Seam Generate Entities:
JBoss Tools给你一个“倒置”实体选项,来自一个数据库表的组件和视图,或者来自存在的JPA实体的组件和视图。我们打算从数据库“倒置”。
重启部署:
然后到http://localhost:8080/helloworld。你能浏览数据库,编辑存在的对象,创建新的对象。如果你查看产生的代码,你可能会吃惊它是多么简单!Seam被设计便于数据访问代码是容易手工书写,甚至对不想用“倒置”的人们。
[*出错
Could not instantiate Seam component:
Caused by: java.lang.IllegalArgumentException: EntityManagerFactory not found in JNDI : java:/helloworldEntityManagerFactory
*]
3.6. Seam和改进的热部署
JBoss Tools 支持改进的热部署:
* 所有 facelets页面
* 所有 pages.xml 文件
超出范围。
But if we want to change any Java code, we still need to do a full restart of the application by
doing a Full Publish.
但是,如果我们想改变任何JAVA代码,我们仍然需要做一个应用程序全重启,通过执行Full Publish。
然而,如果你真想一个快速的编辑/编译/测试周期,Seam支持改进的JavaBean组件重部署。为使用这个功能,你必须部署JavaBean组件到WEB-INF/dev目录,以便通过一个特殊的Seam类加载器代替WAR 或 EAR类加载器加载它们。
你需要注意下的限制:
* 组件必须是JavaBean组件, 它们不能是EJB3 beans (我们正在努力修补这个限制)
* 实体绝不能被热部署
* 通过 components.xml来实现组件部署可以不是热部署
* the hot-deployable components will not be visible to any classes deployed outside of 对在WEB-INF/dev外面的任何类部署,热部署组件是不会可见的。
* Seam 调试模式可以使用, jboss-seam-debug.jar必须在WEB-INF/lib中
* 你必然安装Seam 过滤器在web.xml中
* 如果系统被放在任何加载和任何调试之下,你可以看见错误。
如果你使用JBoss Tools创建了一个WAR项目,改进的热部署可用范围是超出了在src/action资源目录的类的区域。然而,对EAR项目,JBoss Tools不支持改进的热部署。