Just some sharing about java open source and life

翻译:First JBoss Seam tutorial

日期:2012-02-12 22:49 | 作者:JavaChen | 分类目录:Seam
207 views

说明

该文章翻译于《First JBoss Seam tutorial》,原文作者:Sebastian Hennebrueder,翻译者:JavaChen。

原文链接:http://www.laliluna.de/articles/posts/first-jboss-seam.html

一步一步的创建Jboss seam应用

介绍

这篇教程展示如何使用JBoss Seam、JSF和Facelets创建一个应用。我将为Tomcat和JBoss应用服务器列出一个配置。此外,你可以学习如何使用Maven定义依赖。

版本

教程版本:1.0 作者:Sebastian Hennebrueder

包版本

1.Seam 2.0.1.GA
2.Tomcat 6
3.JBoss Application Server 4.2 (not 4.0)

下载

教程PDF:
http://www.laliluna.de/download/first-jboss-seam-en.pdf
项目例子代码
http://www.laliluna.de/download/first-jboss-seam-source.zip

创建项目

使用你喜欢的IDE创建一个web工程。我将使用一个WAR包开发。

Seam配置文件

我们需要下面的配置文件。

components.xml
该文件配置Seam和我们的组件。我更喜欢使用注解配置文档组件而不用这个文件配置,但是在这里我们还是在该文件里定义。

位置:WAR包的WEB-INF目录下,JAR包的META-INF目录下。这里,我们使用的是WAR包。

告诉Seam我们不想让他管理事物(此刻)。

< ?xml version="1.0" encoding="UTF-8"?>


  



seam.properties

包括一些可以在components.xml使用的设置。除了这,他仅仅是标记告诉Seam一个存档文件(WAR或者JAR)包括Seam组件。所以只需要创建一个空文件。

位置:源文件的根目录下(你的Java classes目录下)。

pages.xml
包括导航规则,可以和JSF的faces-config.xml文件想比较有什么区别,此外我们还可以添加权限规则。

位置:一个WAR工程的 WEB-INF 目录下。

< ?xml version="1.0" encoding="UTF-8"?>



   
    
   
  
 

 
  
   Unexpected error, please try again
  
 

faces-config.xml
普通的JavaServer Faces配置文件。Seam的默认渲染器是JavaServer Faces,这就是我们需要这个配置文件的原因。
我们定义默认的和可支持的语言以及资源文件的前缀。
本例子将会使用facelets用于渲染。这就是为什么我们要在该文件中定义facelets视图处理器的原因。
不要在该文件中添加JSF的导航规则,因为Seam会使用pages.xml来导航。

< ?xml version='1.0' encoding='UTF-8'?>

  
    messages
    
 en
 en
    
    com.sun.facelets.FaceletViewHandler
  

web.xml
位置:应该保存于webapp目录下

定义Seam和JSF的特定设置、过滤器和servlet。

< ?xml version="1.0" ?>


       

      
org.jboss.seam.servlet.SeamListener

   
        Seam Filter
        org.jboss.seam.web.SeamFilter

    
        Seam Filter
        /*

  
   
facelets.DEVELOPMENT
true
   

   
   
javax.faces.STATE_SAVING_METHOD
client
   
   
javax.faces.DEFAULT_SUFFIX
.xhtml
   
   
      Faces Servlet
      javax.faces.webapp.FacesServlet
      1

   
      Faces Servlet
      *.seam


添加libraries

我们创建了一个配置最小化的JBoss Seam例子。所以libraries中你不必包括Seam Email、Seam PDF等等。
JBoss4.2已经提供了jsf-api和jsf-impl包。所以不用添加他们。当然Tomcat或Jetty需要添加他们。

手动添加
拷贝下面jar文件到WEB-INF目录下。你可以在你下载的JBoss Seam的lib目录下找到他们。
dom4j-1.6.1-jboss.jar
commons-beanutils-1.7.0.jar
hibernate-validator-3.0.0.ga.jar
javassist-3.3.ga.jar
jboss-el-2.0.1.GA.jar
jboss-seam-2.0.1.GA.jar
jboss-seam-ui-2.0.1.GA.jar
jsf-api-1.2_04-p02.jar
jsf-facelets-1.1.11.jar
jsf-impl-1.2_04-p02.jar
jta-1.1.jar
persistence-api-1.0.jar

使用Maven
可选的,你可以使用Maven。我喜欢用他来管理jar包。我们需要一个JBoss仓库。我的IntelliJ工程无意中部署了Maven加载的 el-api.jar。这在Tomcat 6和JBoss 4.2中会产生一个问题。确定该文件没有被部署。

下面是一个我们需要的pom.xml文件


  4.0.0
  de.laliluna
  seamWeb
war
  1.0-SNAPSHOT
  seamWeb
  http://maven.apache.org

  
    seamWeb


        org.apache.maven.plugins
        maven-compiler-plugin
        
          1.5
          1.5
        
      

        org.apache.maven.plugins
        maven-idea-plugin
        
          true
          true
        
      
    

  
  
    
      repository.jboss.org
      http://repository.jboss.org/maven2
      
        true
      
    
  

  

    
    
      org.jboss.seam
      jboss-seam
      2.0.1.GA
      compile
    
    
      org.jboss.seam
      jboss-seam-ui
      2.0.1.GA
      compile
    
    
    
      javax.transaction
      jta
      1.1
    
    
      javax.persistence
      persistence-api
      1.0
    
    
      org.hibernate
      hibernate-validator
      3.0.0.ga
    

    
    
      javax.faces
      jsf-api
      1.2_04-p02
    
    
      javax.faces
      jsf-impl
      1.2_04-p02
    
    
      com.sun.facelets
      jsf-facelets
      1.1.11
    

    
    
      log4j
      log4j
      1.2.14
      compile
    

  

Hello world

在根目录创建一个index.jsp文件。他会将我们重定向到hello页面。

< % response.sendRedirect("hello.seam"); %>

创建一个facelets页面hello.xhtml。

< ?xml version="1.0" encoding="UTF-8"?>
< !DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  

  
  

Welcome to your first Seam application

  

部署你的应用到Tomcat或者JBoss并且测试该页面。在我的工程中,我使用下面的url:

http://localhost:8080/seamWeb/

编写一个Seam组件

下一步改进hello页面。
我们的应用要处理hedgehogs并且第一件事是打印出hedgehogs 的列表。

package de.laliluna.seam;

public class Hedgehog {

  private String name;

  public Hedgehog() {
  }

  public String getName() {
    return name;
  }

  @Override
  public String toString() {
    final StringBuilder sb = new StringBuilder();
    sb.append("Hedgehog");
    sb.append("{name='").append(name).append(''');
    sb.append('}');
    return sb.toString();
  }

  public void setName(String name) {
    this.name = name;
  }

  public Hedgehog(String name) {
    this.name = name;
  }
}

创建一个HedgehogService类。他是一个Seam组件。Name注解标记他是个一个组件并定义他的名称。此外,我们可以使用Scope注解定义他将会被放置到哪里的上下文。

我们稍后将会看到我们可以使用名称来引用该组件。我们的服务类为JSF data table提供了一个数据模型-hedgehogs。

package de.laliluna.seam;

import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.ScopeType;
import java.util.List;
import java.util.ArrayList;

@Name("hedgehogService")
@Scope(ScopeType.SESSION)
public class HedgehogService {

  @DataModel
  private List hedgehogs;

  public HedgehogService() {
    hedgehogs = new ArrayList();
    hedgehogs.add(new Hedgehog("Holger"));
    hedgehogs.add(new Hedgehog("Pete"));
    hedgehogs.add(new Hedgehog("Sebastian"));
  }

  public String getHello() {
    return "Your hedgehogService says hello";
  }
}

最后,我们添加一些信息到English资源文件。
在src目录下创建一个messages_en.properties文件。

hello=Welcome to your Seam application
hedgehog.name=Name

改进hello.xhtml文件打印hedgehogs,提示信息来自资源文件和getHello方法。

< ?xml version="1.0" encoding="UTF-8"?>
< !DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">






#{messages.hello}

#{hedgehogService.hello}


  
    #{messages['hedgehog.name']}
    #{h.name}
  



这就是所有的,再一次测试你的应用。

调试技巧

当你的应用启动的时候,将会打印所有被创建(Seam和你)的组件和他们所处的上下文。验证你新建的组件是否正确。
Seam有一个调试页面显示一些信息。
添加jboss-seam-debug.jar到WEB-INF目录。可选的,添加下面依赖到pom.xml文件。

 
      org.jboss.seam
      jboss-seam-debug
      2.0.1.GA
    

在components.xml中激活调试模式。


打开你的浏览器并输入下面url进入调试页面

http://localhost:8080/seamWeb/debug.seam

添加Hibernate
这一步中我们将会从数据库中加载hedgehogs。

本例中,我将会使用PostgreSQL数据库。想改变数据库,只需要修改 hibernate.cfg.xml的设置并且替换jdbc驱动。

添加libraries

额外的,我们需要添加以下文件
antlr-2.7.6.jar
asm-1.5.3.jar
commons-beanutils-1.7.0.jar
asm-attrs-1.5.3.jar
hibernate-3.2.5.ga.jar
commons-collections-2.1.1.jar
c3p0-0.9.1.2.jar
postgresql-8.2-507.jdbc3.jar
backport-util-concurrent-3.0.jar
commons-logging-1.0.4.jar
hibernate-annotations-3.3.0.ga.jar
hibernate-commons-annotations-3.3.0.ga.jar
ehcache-1.3.0.jar
cglib-2.1_3.jar
jsr107cache-1.0.jar

如果你使用Maven,添加下面依赖


   org.hibernate
   hibernate
   3.2.5.ga
   compile
 
 
   c3p0
   c3p0
   0.9.1.2
   compile
 
 
   net.sf.ehcache
   ehcache
   1.3.0
 
 
   org.hibernate
   hibernate-annotations
   3.3.0.ga
   compile
 
 
   org.hibernate
   hibernate-commons-annotations
   3.3.0.ga
 
 
 
   postgresql
   postgresql
   8.2-507.jdbc3
   compile
 

Configuration

我们需要在源代码的根目录下添加一个hibernate.cfg.xml文件。

< ?xml version='1.0' encoding='UTF-8'?>
< !DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">



 

  jdbc:postgresql://localhost:5432/learninghibernate
 
postgres
p

 org.postgresql.Driver
 

  org.hibernate.dialect.PostgreSQLDialect
 
4
1

  org.hibernate.cache.EhCacheProvider
 

  org.hibernate.transaction.JDBCTransactionFactory
 
true
after_statement
update
4



在components.xml中你需要修改事物处理方式。工厂仅仅是为了解决命名问题。我们不能使用session作为名称注入到Hibernate session中,但是我想在我的应用中使用这个组件名称。



  



  

代码

我们必须添加加载和保存代码到HedgehogService 类中。
首先,我们需要注入session组件到我们的类中。
然后我们定义Data model有一个工程方法加载hedgehogs。

我改变了Scope的值为conversation 以便我们在创建一个新的hedgehog时候可以重新加载所有hedgehog。

@Name("hedgehogService")
@Scope(ScopeType.CONVERSATION)
public class HedgehogService implements Serializable {
  @In
  private Session session;

  @DataModel
  private List hedgehogs;

  @Factory("hedgehogs")
  public void loadHedgehogs() {
    hedgehogs = session.createCriteria(Hedgehog.class).list();
  }

  public void createHedgehog() {
    session.save(new Hedgehog("Name " + new Date()));
  }
< ?pre>

Hedgehog类需要Hibernate的注解进行定义。
@Entity
public class Hedgehog implements Serializable{

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE)
  private Long id;

// getter and setter are omitted

前端页面

我们改进hello.xhtml页面。我们添加一个链接用于创建一个新的hedgehogs。

Create a hedgehog


  No hedgehogs


  
    #{messages['hedgehog.name']}
    #{h.name}
  

结论

使用JBoss Seam创建一个Web应用是非常简单的。虽然该框架被设计于集成JSF和EJB3,我们可以在Tomcat应用服务器中的Pojo类上使用。我们甚至可以获得免费的事物管理。
手动创建一个应用的有点是我们可以仅仅添加需要的jar包而不需要添加整个package包。

作者:JavaChen | 分类目录:Seam | 标签:
回到顶部

无觅相关文章插件,快速提升流量