<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    千里冰封
    JAVA 濃香四溢
    posts - 151,comments - 2801,trackbacks - 0
    上一篇大概說了一下WEB工程里面要添加的配置文件以及要引用到的庫文件,現(xiàn)在來對(duì)EJB工程進(jìn)行一些改造,讓它可以成為SEAM工程的一部份.
    相對(duì)于WEB工程來說,EJB工程的更改就不太多了,可以新建一個(gè)EJB工程,然后在源文件的根目錄下,也就是netbeans的default package下面,添加一個(gè)文件,叫seam.properties,無論你有沒有用到,也要添加這么一個(gè)文件,否則你的EJB工程就是一個(gè)普通的EJB工程了,就不能被SEAM所管理,并且里面的Session Bean就不能被用來當(dāng)做JSF的backingbean,這一點(diǎn)要特別注意.然后就可以像建普通EJB一樣編寫EJB代碼了,你可以用netbeans來生成,也可以自己手工編寫,先編寫接口,再編寫B(tài)ean,這都無所謂.然后為了讓我們的EJB能被當(dāng)做JSF的backingbean,我們需要在我們編寫的EJB里面添加如下注釋:@Name,它是SEAM框架帶的注釋,這就相當(dāng)于聲明了一個(gè)backingbean,比如以下的類:
    import java.io.Serializable;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import org.hibernate.validator.Length;
    import org.hibernate.validator.NotNull;
    import org.jboss.seam.ScopeType;
    import org.jboss.seam.annotations.Name;
    import org.jboss.seam.annotations.Scope;

    /**
     *
     * 
    @author hadeslee
     
    */
    @Entity
    @Name(
    "user")
    @Table(name 
    = "users")
    @Scope(ScopeType.SESSION)
    public class User implements Serializable {

        
    private static final long serialVersionUID = 1L;
        
    private Long id;
        
    private String username;
        
    private String password;
        
    private String name;
        @NotNull
        
    public String getName() {
            
    return name;
        }
        
        
    public void setName(String name) {
            
    this.name = name;
        }
        @NotNull @Length(min
    =5,max=15)
        
    public String getPassword() {
            
    return password;
        }

        
    public void setPassword(String password) {
            
    this.password = password;
        }
        @NotNull @Length(min
    =5,max=15)
        
    public String getUsername() {
            
    return username;
        }

        
    public void setUsername(String username) {
            
    this.username = username;
        }

        
    public void setId(Long id) {
            
    this.id = id;
        }

        @Id
        @GeneratedValue(strategy 
    = GenerationType.AUTO)
        
    public Long getId() {
            
    return id;
        }

        @Override
        
    public int hashCode() {
            
    int hash = 0;
            hash 
    += (id != null ? id.hashCode() : 0);
            
    return hash;
        }

        @Override
        
    public boolean equals(Object object) {
            
    // TODO: Warning - this method won't work in the case the id fields are not set
            if (!(object instanceof User)) {
                
    return false;
            }
            User other 
    = (User) object;
            
    if ((this.id == null && other.id != null|| (this.id != null && !this.id.equals(other.id))) {
                
    return false;
            }
            
    return true;
        }

        @Override
        
    public String toString() {
            
    return "com.hadeslee.test1.User[id=" + id + "]";
        }
    }

    我這個(gè)EntityBean是用netbeans生成的,然后自己再添加一些內(nèi)容,讓netbeans生成的好處是它可以自動(dòng)為你生成equals和hashCode方法,在我們這個(gè)類里面,由于添加了@Name注釋,那么它的值user就可以當(dāng)做一個(gè)backingbean的名字,而直接在JSF頁面里面使用了.至于別的注釋,等我們編寫第一個(gè)簡單的SEAM應(yīng)用的時(shí)候再詳細(xì)解釋.
    上面看到的是實(shí)體類,其實(shí)Session Bean也是一樣的,比如:

    import java.util.List;
    import javax.ejb.Stateless;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import org.jboss.seam.annotations.In;
    import org.jboss.seam.annotations.Logger;
    import org.jboss.seam.annotations.Name;
    import org.jboss.seam.faces.FacesMessages;
    import org.jboss.seam.log.Log;

    /**
     *
     * 
    @author hadeslee
     
    */
    @Stateless
    @Name(
    "register")
    public class RegisterAction implements Register {

        @In
        
    private User user;
        @PersistenceContext
        
    private EntityManager em;
        @Logger
        
    private Log log;

        
    public String register() {
            List existing 
    = em.createQuery("select username from User where username=#{user.username}").getResultList();
            
    if (existing.size() == 0) {
                em.persist(user);
                log.info(
    "注冊(cè)了新的用戶,名字是: #{user.username}");
                
    return "/registered.jsp";
            } 
    else {
                FacesMessages.instance().add(
    "用戶 #{user.username} 已經(jīng)存在");
                
    return null;
            }
        }
    }

    它也用了注釋:@Name,當(dāng)我們?cè)贘SF頁面里面調(diào)用register的時(shí)候,就可以直接調(diào)用這個(gè)無狀態(tài)會(huì)話Bean的方法做為action了.這就是SEAM的特點(diǎn),讓我們的JSF和EJB無縫的連接到了一起.
    在SEAM里面,支持雙向注射,可以使用@In來注入,也可以用@Out來射出.
    看完代碼之后,我們還要添加一個(gè)文件ejb-jar.xml,這個(gè)文件是EJB2.X的時(shí)候一定要用到的,當(dāng)EJB3.0可以使用注釋以后,它就變成可有可無的了,但是為了SEAM能知道我們EJB里面的方法并攔截它,因?yàn)橹挥兴軘r截我們的方法,才能在我們調(diào)用某個(gè)方法的時(shí)候,為我們注入我們需要的對(duì)象.
    ejb-jar.xml里面的內(nèi)容絕大多數(shù)情況內(nèi)容如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <ejb-jar 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/ejb-jar_3_0.xsd"
             version
    ="3.0">
             
       
    <interceptors>
          
    <interceptor>
             
    <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
          
    </interceptor>
       
    </interceptors>
       
       
    <assembly-descriptor>
          
    <interceptor-binding>
             
    <ejb-name>*</ejb-name>
             
    <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
          
    </interceptor-binding>
       
    </assembly-descriptor>
       
    </ejb-jar>

    它只是定義了一個(gè)攔截器,指定的一個(gè)攔截器,攔截此JAR包里面的所有的EJB方法調(diào)用.這個(gè)千萬不能少,否則的話,就不能在我們調(diào)用EJB方法之前注入我們需要的對(duì)象了.
    當(dāng)然,如果你使用了Entity bean的話,就會(huì)有persistence.xml了,它一般是由netbeans自動(dòng)生成的,關(guān)于這個(gè)文件就和以前的一樣了,不用過多的介紹.
    當(dāng)然,我們還要說說EJB工程里面要引用到的庫文件,比如我們的@Name注釋和@In和@Out注釋,都是SEAM的包里面的.下面是一般要用到的庫文件:
    jboss-seam.jar   Seam的核心庫

    其的它就不用了,其實(shí)很多庫,既可以和WEB的工程目錄相關(guān),也可以和EJB的工程目錄相關(guān),反正最后是一個(gè)Enterprise Application,會(huì)把WEB和EJB的工程統(tǒng)一打包成EAR文件的.

    關(guān)于前面的配置就這些了,其實(shí)SEAM的配置也不是很復(fù)雜,對(duì)于WEB工程來說,只是加了幾個(gè)XML文件,而對(duì)于EJB工程來說,幾乎什么都沒有加,只是加了一個(gè)SEAM的核心庫而已.

    下一章,我們將用Netbeans開發(fā)一個(gè)完整的SEAM應(yīng)用,一個(gè)非常簡單的SEAM應(yīng)用,接受注冊(cè),以及驗(yàn)證輸入.如果驗(yàn)證通過就把輸入的內(nèi)容保存到數(shù)據(jù)庫里面.











    盡管千里冰封
    依然擁有晴空

    你我共同品味JAVA的濃香.
    posted on 2008-05-07 14:03 千里冰封 閱讀(2956) 評(píng)論(2)  編輯  收藏 所屬分類: JAVAEENetbeans

    FeedBack:
    # re: 使用Netbeans開發(fā)Seam應(yīng)用(二)[未登錄]
    2008-05-19 22:25 | eric
    期待下一章  回復(fù)  更多評(píng)論
      
    # re: 使用Netbeans開發(fā)Seam應(yīng)用(二)
    2008-09-06 22:11 | 88250
    可以不用寫ejb-jar.xml的,在Session Beans頭注釋:
    @Interceptors({org.jboss.seam.ejb.SeamInterceptor.class})
    就可以了,不過每個(gè)Session Bean都要寫還是有點(diǎn)麻煩的,: )  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 国产精品亚洲精品久久精品 | 国产好大好硬好爽免费不卡| 亚洲中文字幕久久精品无码APP| 久久99热精品免费观看动漫| 亚洲人成77777在线播放网站不卡 亚洲人成77777在线观看网 | 狠狠热精品免费观看| 亚洲真人无码永久在线| 曰批全过程免费视频网址| 亚洲国产AV一区二区三区四区| 久久亚洲中文字幕精品一区| 亚洲黄色免费在线观看| 粉色视频在线观看www免费| 亚洲大尺度无码专区尤物| 在线jlzzjlzz免费播放| a级毛片毛片免费观看久潮喷| 亚洲三级视频在线观看| 亚洲日韩在线中文字幕第一页 | 日本特黄特色AAA大片免费| 亚洲AV日韩AV鸥美在线观看| 精品久久洲久久久久护士免费| a级毛片在线免费看| 亚洲欧美黑人猛交群| 亚洲AV福利天堂一区二区三| 国产精品极品美女免费观看| 一级毛片**不卡免费播| 免费VA在线观看无码| 亚洲中文字幕在线无码一区二区| 国产国拍精品亚洲AV片| 真实乱视频国产免费观看| 99ee6热久久免费精品6| 成全视成人免费观看在线看| 亚洲精品9999久久久久无码| 亚洲视频在线观看网址| 中文字幕亚洲不卡在线亚瑟| 成人au免费视频影院| 最近新韩国日本免费观看| 成人爽a毛片免费| 二级毛片免费观看全程| 欧美日韩亚洲精品| 亚洲色精品VR一区区三区| 久久av无码专区亚洲av桃花岛|