首先,我们需要根据现有的开发环境对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并不自动导出。
2.3. 创建新动作
若你熟知传统的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来运行测试。
2.4. 创建有动作的表单(form)
下一步就是来创建表单了。请输入:
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代码时重新部署)。
2.5. 从现有数据库生成应用程序
在数据库中手工创建一些表。(如果你需要切换不同的数据库,只需再次运行 seam setup 即可。)现请输入:
seam generate-entities
接着重新部署,并在浏览器中输入 http://localhost:8080/helloworld 就可看到结果了。 你可以试着浏览数据库,编辑现有的对象,并创建新的对象。如果你看下所生成的代码,你可能会对如此简单的代码感到惊讶。 让开发人员,尤其是那些不甘于受Seam-gen摆布的开发人员,简单地手工编写数据访问代码,是Seam的设计目标之一。
2.6. 将应用部署为EAR
最后,我们想知道能否用标准的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。
2.7. Seam与增量热部署
将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项目不行。
柴油发电机
发电机
柴油机
柴油发电机
13636374743(上海)
13291526067(嘉兴)