Seam3 是基于Weld构建的一个开发框架,而Weld是对JSR-299 CDI 的一个实现。JSR-299 的核心就是依赖注入,而且不需要Spring那么多的配置文件,基本上任何Bean都可以被注入。
这里介绍 JBoss Seam3 工程的搭建与相关配置,使用的是Seam 3.1.0.Final 版本,服务器是 Jboss as 7.0.2.Final
1. 首先配置Jboss as7 的JNDI数据源. 这里介绍 mysql 的配置方法,其他数据类似
打开解压好的 Jboss as7 目录 jboss-as-web-7.0.2.Final\modules\com 在这里目录下建文件夹 mysql\main\ 在main下,放入mysql-connector-java-5.1.7-bin.jar
然后添加 module.xml
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.0" name="com.mysql"> <resources> <resource-root path="mysql-connector-java-5.1.7-bin.jar"/> </resources> <dependencies> <module name="javax.api"/> </dependencies> </module>
然后修改 standalone\configuration 目录下的 standalone.xml 文件,找到datasources 标签修改里面的内容,如下:
<datasources> <datasource jndi-name="java:jboss/MySqlDS" pool-name="MySqlDS_pool" enabled="true" jta="true" use-java-context="true" use-ccm="true"> <connection-url>jdbc:mysql://localhost:3306/jweb</connection-url> <driver>mysql</driver> <security> <user-name> root</user-name> <password>11111</password> </security> </datasource> <drivers> <driver name="mysql" module="com.mysql"/> </drivers>
2. 建立Seam工程,这里先介绍直接用eclipse建立war结构的工程,会用maven的,下面会给出 pom.xml
用eclipse建立一个java ee6 的web工程,选择servlet3.0 ,然后添加 JSF,JPA支持。
1)修改 web.xml 。 seam 3 所有模块是基于jee6 的weld启动的,所以在web.xml 中并不需要添加任何监听和servlet。 在tomcat中配置是不一样的,等我在tomcat7 中尝试成功,再介绍。这里只是 JSF 的启动配置。
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>Seam 3 Example (Java EE Environment)</display-name> <session-config> <session-timeout>6</session-timeout> </session-config> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.seam</url-pattern> </servlet-mapping> <mime-mapping> <extension>xcss</extension> <mime-type>text/css</mime-type> </mime-mapping> </web-app>
2. 在WEB-INF下,添加一个 bean.xml, 这个文件可以是空的,这文件的作用是启动weld。这个里面也可以对weld进行一些配置,比如weld 在注入接口的时候,会自动应用它的实现类,如果有多个的话,在这个文件里面可以设置到底应用哪一个实现类。这个对系统的扩展性等还是很有帮助的。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> </beans>
3. 在src/META-INF 下添加一个 seam-bean.xml 文件。这个文件就是seam的配置文件了,我这里只是做了一件事,注册了Seam 安全登录的方法,后面会介绍Seam3的登录。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ee="urn:java:ee" xmlns:ss="urn:java:org.jboss.seam.security" xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> <ss:IdentityImpl> <ee:modifies /> <ss:authenticatorName>authenticatorImpl</ss:authenticatorName> </ss:IdentityImpl> </beans>
4. JPA的配置,src/META-INF/persistence.xml 。
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <persistence-unit name="JBossSeam3" transaction-type="JTA"> <jta-data-source>java:jboss/MySqlDS</jta-data-source> <!-- --><provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup" /> <property name="hibernate.archive.autodetection" value="class" /> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> </properties> </persistence-unit> </persistence>
5. 当然还有 JSF2 的配置文件 WEB-INF 下的 faces-config.xml 无需更改内容,这里就不贴出来了。
6. 下面给出所需jar包的截图
里面跟seam相关的jar包 有的没有版本号,他们的版本都是一致的,都是 3.1.0.Final JSF是2.1.6 这里不需要JPA相关的jar文件,JBoss as7 的lib里面已经有了。
这样 Seam3 的war包工程就建好了,下面给一个 maven 的 pom.xml 文件。会maven的可以通过maven拉出jar包,比较方便。Maven工程的搭建,就不介绍了,我自己也在学习中。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.rogue</groupId> <artifactId>forj</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>war</packaging> <name>for.j</name> <description>for.j's project</description> <dependencyManagement> <dependencies> <dependency> <groupId>org.jboss.seam</groupId> <artifactId>seam-bom</artifactId> <version>3.1.0.Final</version> <scope>import</scope> <type>pom</type> </dependency> <dependency> <groupId>javax.enterprise</groupId> <artifactId>cdi-api</artifactId> <version>1.1.0</version> </dependency> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-api</artifactId> <version>2.0.6</version> </dependency> <dependency> <groupId>com.ocpsoft</groupId> <artifactId>prettyfaces-jsf2</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.0-api</artifactId> <version>1.0.1.Final</version> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-api</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-impl</artifactId> <version>2.0.6</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.enterprise</groupId> <artifactId>cdi-api</artifactId> <version>1.1.EDR1.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.jboss.weld.servlet</groupId> <artifactId>weld-servlet</artifactId> <version>1.1.2.Final</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>3.6.7.Final</version> <scope>provided</scope> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.0-api</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.jboss.seam.persistence</groupId> <artifactId>seam-persistence</artifactId> </dependency> <dependency> <groupId>org.jboss.seam.faces</groupId> <artifactId>seam-faces</artifactId> </dependency> <dependency> <groupId>org.jboss.seam.security</groupId> <artifactId>seam-security</artifactId> </dependency> <dependency> <groupId>org.jboss.seam.international</groupId> <artifactId>seam-international</artifactId> </dependency> <dependency> <groupId>org.jboss.seam.transaction</groupId> <artifactId>seam-transaction</artifactId> </dependency> <dependency> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <version>3.1</version> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.8.0</version> </dependency> <dependency> <groupId>commons-digester</groupId> <artifactId>commons-digester</artifactId> <version>2.1</version> </dependency> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> </dependency> <dependency> <groupId>com.ocpsoft</groupId> <artifactId>ocpsoft-pretty-time</artifactId> </dependency> <dependency> <groupId>com.ocpsoft</groupId> <artifactId>prettyfaces-jsf2</artifactId> </dependency> <dependency> <groupId>org.jboss.spec.javax.transaction</groupId> <artifactId>jboss-transaction-api_1.1_spec</artifactId> </dependency> </dependencies> <repositories> <repository> <id>JBOSS_NEXUS</id> <url>http://repository.jboss.org/nexus/content/groups/public</url> </repository> <repository> <id>prime-repo</id> <name>PrimeFaces Maven Repository</name> <url>http://repository.primefaces.org</url> <layout>default</layout> </repository> </repositories> <build> <finalName>seam3</finalName> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> </project>
后面会陆续给出利用Seam3 来实现一些基本的功能,像登录,访问权限,在JS中调用后台代码(Romting) 等等,我自己也在学习中,希望也对JEE6感兴趣的朋友能多多交流。 有朋友在搭建工程遇到问题的,我提供一份搭建好的工程。