Seam的发布包里已包含了命令行工具,用它可以很方便地搭建Eclipse项目,以及生成一些简单的Seam骨架代码,并能从已存在的数据库
反向
工程到应用程序。
它能让你感受到Seam给开发所带来的快捷,当你在电梯里看到那些令人厌烦的Ruby家伙在吹嘘他们的新玩艺儿是如何优美
地在应用中 将繁琐的数据放进数据库时,你就可以取笑他们了。
在此版本中,seam-gen能很好地与JBoss
AS一起工作。通过对项目配置进行些许的手工修改,seam-gen生成的项目就可与其它J2EE或Java EE 5应用服务器一起工作。
请
注意,并不只限在Eclipse中使用seam-gen。但在本教程中,我们将为你演示如何在Eclipse中用它来完成调试与集成测试。
若你不想安装Eclipse,你仍可跟随教程的步骤,因为所有的操作都是在命令行中完成的。
Seam-gen的Ant脚本与
Hibernate工具包放一起,并同时提供了一些模板。这样我们就很容易地根据自己项目的需要来作些修改。
请
确保已安装了JDK 5或者JDK6,JBoss AS 4.2和Ant 1.6,以及较新版的Eclipse、JBoss
IDE和TestNG的Eclipse 插件。 在Eclipse的JBoss Server
View中将JBoss安装路径添加进去。然后以debug模式启动JBoss,并在弹出式命令窗口中进入Seam的目录。
JBoss很
好地支持WAR和EAR的热重部署,但麻烦的是,由于在JVM中存在着多个Bug,在开发进程中多次的重部署EAR是常见的事,但这最终会耗尽
PermGen 空间(Permanent Generation Space)。 因此建议你在开发的过程中加大perm
gen空间。若你是在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选项作修改了。
当然,我们可以先不理会这些。当你在开发中第一次碰到OutOfMemoryException
异常时再回过头来作此修改。
首先,我们需要根据现有的开发环境对seam-gen进
行配置:JBoss AS安装目录、Eclipse workspace及数据库连接。这些都很容易,只要敲入:
cd jboss-seam-2.0.x
seam setup
根据弹出的提示输入开发环境的相关信息:
C:\Projects\jboss-seam>seam setup
Buildfile: build.xml
setup:
[echo] Welcome to seam-gen :-)
[input] Enter your Java project workspace [C:/Projects]
[input] Enter your JBoss home directory [C:/Program Files/jboss-4.2.0.GA]
[input] Enter the project name [myproject]
helloworld
[input] Is this project deployed as an EAR (with EJB components) or a WAR (with no EJB support) [ear] (ear,war,)
[input] Enter the Java package name for your session beans [com.mydomain.helloworld]
org.jboss.helloworld
[input] Enter the Java package name for your entity beans [org.jboss.helloworld]
[input] Enter the Java package name for your test cases [org.jboss.helloworld.test]
[input] What kind of database are you using? [hsql] (hsql,mysql,oracle,postgres,mssql,db2,sybase,)
mysql
[input] Enter the Hibernate dialect for your database [org.hibernate.dialect.MySQLDialect]
[input] Enter the filesystem path to the JDBC driver jar [lib/hsqldb.jar]
../../mysql-connector.jar
[input] Enter JDBC driver class for your database [com.mysql.jdbc.Driver]
[input] Enter the JDBC URL for your database [jdbc:mysql:///test]
[input] Enter database username [sa]
gavin
[input] Enter database password []
[input] skipping input as property hibernate.default_schema.new has already been set.
[input] Enter the database catalog name (it is OK to leave this blank) []
[input] Are you working with tables that already exist in the database? [n] (y,n,)
y
[input] Do you want to drop and recreate the database tables and data in import.sql each time you deploy? [n] (y,n,)
n
[propertyfile] Creating new property file: C:\Projects\jboss-seam\seam-gen\build.properties
[echo] Installing JDBC driver jar to JBoss server
[echo] Type
'seam new-project' to create the new project
BUILD SUCCESSFUL
Total time: 1 minute 17 seconds
C:\Projects\jboss-seam>
该工具提供了相应的默认值,因此你可以直接按Enter键。
最重
要的是你要对EAR部署还是WAR部署进行选择。EAR项目支持EJB 3.0 并需要Java EE 5。而WAR包不支持EJB
3.0,但可在J2EE环境中部署。 另外WAR也更较简单,便于理解。假若你已安装了EJB3 profile,那你就用ear
好了,否则,就只好用war
。
在此假设我们选择了EAR部署,当然此教程也适用于WAR部署。
如果你手上有现成的数据模型,请确保你已输入现有数据库的表名。
这
些设置保存在seam-gen/build.properties
文
件中,但你可通过运行seam setup
来再次
修改。
现在我们就可以在Eclipse workspace目录中创建一个新的项目,只需输入:
seam new-project
C:\Projects\jboss-seam>seam new-project
Buildfile: build.xml
validate-workspace:
validate-project:
copy-lib:
[echo] Copying project jars ...
[copy] Copying 58 files to C:\Projects\helloworld\lib
[copy] Copying 9 files to C:\Projects\helloworld\embedded-ejb
file-copy-war:
file-copy-ear:
[echo] Copying resources needed for EAR deployment to the C:\Projects\helloworld/resources directory...
new-project:
[echo] A new Seam project named 'helloworld' was created in the C:\Projects directory
[echo] Type 'seam explode' and go to http://localhost:8080/helloworld
[echo] Eclipse Users: Add the project into Eclipse using File > New > Project and select General > Project (not Java Project)
[echo] NetBeans Users: Open the project in NetBeans
BUILD SUCCESSFUL
Total time: 7 seconds
C:\Projects\jboss-seam>
这组操作复制了Seam
jar文件及相应的jar文件与JDBC驱动jar到新建的Eclipse项目中,并生成了所需的源文件及其配置文件、一个模板文件和样式文件,及相应的
Eclipse元数据及Ant构建脚本。 只要你依此操作New
-> Project... -> General -> Project -> Next
,输入Project name
(此例为helloworld
),并接着点击Finish
,就可将Eclipse项目自动部署到
JBoss AS分解式的(exploded)目录结构中,请不要在新项目向导中选择Java Project
。
若Eclipse中的默认的JDK不是Java SE 5
或Java SE 6,你就得通过Project ->
Properties -> Java Compiler
来选择与Java SE 5 兼容的JDK。
另
外,可在Eclipse之外输入seam explode
来
部署项目。
在http://localhost:8080/helloworld
中
查看此应用的首页。view/home.xhtml
是
个使用view/layout/template.xhtml
模
板生成的Facelets 页面,试着在Eclipse中编辑此页面或该模板,并在浏览器中刷新页面,立即看到结果。
别被在项目目录中的如
此多的XML配置文件给吓晕了。那都是些标准的Java EE的东西,它们只需生成一次就不用再去理会了。
在所有的Seam项目中,90%的配置内容都是一样的(这些可由seam-gen来帮我们完成)。
新生成的项目包含了三个数据库及持久化配
置文件。jboss-beans.xml
、persistence-test.xml
及import-test.sql
文件是用在当TestNG
对HSQLDB进行单元测试时。 在import-test.sql
中
的数据库Schema及其测试数据总是在测试前就已转入数据库中。myproject-dev-ds.xml
、persistence-dev.xml
及import-dev.sql
文件是在部署应用到开发数据
库时使用的。 数据库schema是否可在部署时自动导出,取决于你是否在设置seam-gen环境时配置了已存在的数据库。myproject-prod-ds.xml
、persistence-prod.xml
及import-prod.sql
文件是在部署应用到生产数
据库时使用的。在部署时数据库schema并不自动导出。
若你熟知传统
的action-style. Web框架,你或许想知道在Java中如何来创建无状态action方法的简单Web页面。如果你输入:
seam new-action
则
Seam将弹出一些信息并为你的项目生成新的Facelets页面及Seam组件。
C:\Projects\jboss-seam>seam new-action
Buildfile: build.xml
validate-workspace:
validate-project:
action-input:
[input] Enter the Seam component name
ping
[input] Enter the local interface
name [Ping]
[input] Enter the bean class name [PingBean]
[input] Enter the action method name [ping]
[input] Enter the page name [ping]
setup-filters:
new-action:
[echo] Creating a new stateless session bean component with an action method
[copy] Copying 1 file to C:\Projects\helloworld\src\action\org\jboss\helloworld
[copy] Copying 1 file to C:\Projects\helloworld\src\action\org\jboss\helloworld
[copy] Copying 1 file to C:\Projects\helloworld\src\action\org\jboss\helloworld\test
[copy] Copying 1 file to C:\Projects\helloworld\src\action\org\jboss\helloworld\test
[copy] Copying 1 file to C:\Projects\helloworld\view
[echo] Type 'seam restart' and go to http://localhost:8080/helloworld/ping.seam
BUILD SUCCESSFUL
Total time: 13 seconds
C:\Projects\jboss-seam>
新增Seam组件后,我们需要重启分解式目录部署(exploded
directory deployment)。 输入seam
restart
,或在Eclipse中已生成项目的build.xml
中
运行restart
target就可完成。
另一种方式是在Eclipse中通过编辑resources/META-INF/application.xml
文
件来强制重启。请注意,在每次修改应用程序时并不需要重启JBoss。
试
着在浏览器中输入http://localhost:8080/helloworld/ping.seam
地
址并点击按钮,看看发生了什么。 在项目的src
目
录中可看到完成此动作的源代码。 试着在ping()
方
法中设置个断点,再次点击按钮,又发生了什么?
最后,在测试包中找到PingTest.xml
文件,并用Eclipse的TestNG插件来运行测试。 此外,还可用seam test
或生成的build文件中的test
target来运行测试。
下一步就是来创建表单了。请输入:
seam new-form
C:\Projects\jboss-seam>seam new-form.
Buildfile: C:\Projects\jboss-seam\seam-gen\build.xml
validate-workspace:
validate-project:
action-input:
[input] Enter the Seam component name
hello
[input] Enter the local interface name [Hello]
[input] Enter the bean class name [HelloBean]
[input] Enter the action method name [hello]
[input] Enter the page name [hello]
setup-filters:
new-form. [echo] Creating a new stateful session bean component with an action method
[copy] Copying 1 file to C:\Projects\hello\src\com\hello
[copy] Copying 1 file to C:\Projects\hello\src\com\hello
[copy] Copying 1 file to C:\Projects\hello\src\com\hello\test
[copy] Copying 1 file to C:\Projects\hello\view
[copy] Copying 1 file to C:\Projects\hello\src\com\hello\test
[echo] Type 'seam restart' and go to http://localhost:8080/hello/hello.seam
BUILD SUCCESSFUL
Total time: 5 seconds
C:\Projects\jboss-seam>
再次重启应用程序,并在浏览器中输入http://localhost:8080/helloworld/hello.seam
就可看到结
果了。 接着看下所生成的代码,并运行测试。试着给表单加入一些字段及Seam组件(记着在每次更改Java代码时重新部署)。
在数据库中手工创建一些表。(如果你需要切换不同的数据库,只需再次运
行seam setup
即可。)现请输入:
seam generate-entities
接
着重新部署,并在浏览器中输入http://localhost:8080/helloworld
就
可看到结果了。 你可以试着浏览数据库,编辑现有的对象,并创建新的对象。如果你看下所生成的代码,你可能会对如此简单的代码感到惊讶。
让开发人员,尤其是那些不甘于受Seam-gen摆布的开发人员,简单地手工编写数据访问代码,是Seam的设计目标之一。
最
后,我们想知道能否用标准的Java EE包来部署应用。首先,通过运行seam
unexplode
来移走分解式目录(exploded directory)。 在命令行中输入seam deploy
或运行生成的Build脚本文件中
的deploy
target就可完成EAR的部
署,用seam undeploy
命令或运行undeploy
目标可卸下EAR。
默认
情况下,应用程序会用dev profile
来部署,EAR将包含persistence-dev.xml
及import-dev.sql
文件,myproject-dev-ds.xml
文件也会被部
署。 通过输入以下的命令你就可以更改profile, 并可使用prod profile
:
seam -Dprofile=prod deploy
你
甚至可以给你的应用程序定义新的部署profile,只需在项目中加入合适的文件, 例如:persistence-staging.xml
、import-staging.sql
及myproject-staging-ds.xml
— 并选择使用了-Dprofile=staging
名字的
profile。
将
Seam应用部署成exploded目录的好处是,你能在开发时得到增量热部署的支持。 你只需在components.xml
中添加这一行来启用Seam和Facelet中的debug模式即可:
<core:init debug="true"/>
这
样一来,重新部署以下文件时就不一定要完全地重启web应用了:
-
任意Facelet页面
-
任意pages.xml
文件
若想对Java代码进行变更,
就需要完全的应用重启。 (在JBoss中,对于EAR部署,这需要用touch命令改变顶层的部署描述文件:对于EAR部署,则是application.xml
,而对于WAR部署,则是web.xml
。)
但你真正想加快编辑/
编译/测试的流程,Seam支持对JavaBean组件进行增量式重部署。 为了用上此功能,你必须把JavaBean组件部署到WEB-INF/dev
目录中,以便它们能被特殊的
Seam类加载器加载,而不是WAR或EAR类加载器。
请注意以下的限制:
-
必须是JavaBean组件,而不能是EJB3 Beans(此限制正在解决中)
-
实
体Bean不可热部署
-
通过components.xml
部
署的组件可能无法热部署
-
在WEB-INF/dev
之
外部署的任何类都无法访问可热部署的组件
-
须启用Seam的debug模式
如
果你用Seam-gen创建WAR项目,增量热部署对于src/action目录下的类是直接可用的,但是对于EAR项目不行。
Seam 2.0是针对JavaServer
Faces 1.2开发的,所以我们推荐在JBoss 4.2下使用Seam,因为它包含了JSF 1.2参考实现。 然而仍然有办法在Jboss
4.0下使用Seam。需要两个步骤:安装启用了EJB3的Jboss 4.0版本并且把MyFaces替换为JSF1.2参考实现。
你完成这两个步骤后,Seam2.0就可以在JBoss 4.0下部署了。
JBoss
4.0的配置可以在server/default/deploy/jbossweb-tomcat55.sar
找
到。 你需要从jsf-libs
目录删除myfaces-api.jar
和myfaces-impl.jar
文件。 你还需要把jsf-api.jar
、jsf-impl.jar
、el-api.jar
和el-ri.jar
复制到那个目录下。你可以在Seam的
lib文件夹下找到这些JAR文件。EL JAR文件可以从Seam 1.2发行版中获取。
你还需要编辑conf/web.xml
文件,把myfaces-impl.jar
替换为jsf-impl.jar
。
分享到:
相关推荐
Seam-gen 提供了两种使用方式:命令行脚本和 IDE 插件。命令行版本基于 Ant,生成的项目在任何环境下都可以启动。在开始使用之前,确保已经安装了 Seam 工具包,其中包含了 seam 和 seam.bat 脚本,分别适用于 Linux...
在使用`seam-gen`之前,需要确保系统中已安装了Ant 1.6或更高版本以及支持EJB3的JBoss Application Server 4.2.0 GA或更高版本。 #### 二、Seam-gen命令详解 `seam-gen`命令位于Seam框架的根目录下,它提供了多种...
Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................
1. **项目生成**:`seam-gen`命令可以快速创建新的Seam项目,包括必要的目录结构和基础文件。 2. **组件添加**:通过`seam component`命令,可以方便地将Seam组件添加到项目中,如EJB、JSF等。 3. **自动构建**:...
java jboss seam jboss-seam-selectitems
Algorithm-seam-carving-js.zip,seam-carver的javascript实现。seam carver是一种基于内容的图像缩放算法,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。
这个名为"Seam-Carving-Matlab-master.rar_boardkkc_seam_seam carving_seamca"的压缩包文件包含了Matlab实现的Seam Carving算法,非常适合学习和理解这一技术。 Seam Carving的基本思想是找到图像中的一条或几条...
Seam是一种Java EE框架,它在开发企业级应用程序时提供了高度集成和语境相关的组件模型。这个框架的主要目标是简化复杂性,使开发者能够更高效地构建动态、响应式的Web应用。Seam的核心理念是将不同的技术,如Java...
- **技术栈**:使用 JSF/Seam 技术栈。 - **实践内容**:包括开发环境的搭建、EJB 的集成、用户界面的集成、代码编写以及测试等环节。 ### 结论 通过对该 PPT 内容的分析,我们可以了解到 Seam 在当时作为一个新兴...
seam-support.jar
seam-navigation.jar
seam-pageflow.jar
通常,这样的资源会包括详细步骤的解释,可能的编程实现(可能是用Python、C++或Java等语言),以及一些前后的图像对比,以展示Seam Carving如何有效地调整图像尺寸而尽量保持视觉质量。 数字图像处理是一个广泛的...
最后,文档还介绍了如何在JBoss中使用JSF 1.2 RI运行Seam应用,以及如何使用Seam-gen工具快速启动新项目,包括从数据库生成应用程序、部署为EAR包和增量热部署。 Seam的核心是其上下文相关的组件模型,包括无状态上...
在资源包中,"seam-3.1.0.Beta5"可能是Seam 3.1.0的早期预览版本,尽管描述中提到可以使用"3.1.0.final",但Beta5可能包含了一些特定的实验性功能或bug修复。开发者通常会使用这样的预发布版本来测试新功能和稳定性...
#### 第二章:用 Seam-gen 起步 本章介绍了如何使用 Seam-gen 快速构建 Seam 应用程序。 - **准备活动**:准备开发环境,包括安装必要的软件和配置工具。 - **建立一个新的 Eclipse 项目**:使用 Eclipse 创建一个新...
2. **注解驱动的配置**:Seam采用JDK 5.0的注解技术,减少了XML配置文件的使用,提高了开发效率,使得代码更加简洁。 3. **增强的会话管理**:Seam提供了多种生命周期的支持,使得会话管理更加灵活,适应不同类型的...
通过解压"jboss-seam-1.1.1.GA.tar.gz",你可以得到JBoss Seam的源码、库文件、配置文件以及相关的文档,这些资源对于学习和使用Seam框架非常有帮助。在实践中,你可以按照官方文档的指引,逐步搭建开发环境,创建并...