EJB3 session bean(會話bean)

Session Bean接口定義@Local,@Remote

Interface xxxDAO{}

@Local

Interface LocalxxxDAO extends xxxDAO{}

@Remote

Interface RemotexxxDAO extends xxxDAO{}

 

@Local 註釋定義本地接口(使用範圍,客戶端和EJB在同一容器(wlsjboss)中 使用本地接口可以提高訪問的效率 如果不在同一容器中 只能通過遠程調用

@Remote 註釋定義遠程接口 供遠程客戶調用 (RMI協議)

 

SessionBean定義@Stateless,@Statefull

 

無狀態會話bean @Stateless

有狀態會話bean @Stateful

無狀態會話bean

@Stateless

class XDAOImpl implements LocalxxxDAO, RemotexxxDAO

無狀態會話bean 的不記錄客戶的狀態就是無狀態,並不是EJB部署的時候產生一個單例的實例,jboss對無狀態會話bean是有CLASSPOOL 默認最多30個實例 後面介紹配置池的大小,Stateless bean是在客戶端請求的時候進行實例化或是等待實例池的對象

 

@Stateful

class XDAOImpl implements LocalxxxDAO, RemotexxxDAO

 

配置會話bean類型的時候如果不指定JNDI名字則默認爲 當前類名+”/(remote|local)"

上面代碼中的JNDI名字爲 XDAOImpl/remote   XDAOImpl/local

 

有狀態會話bean 是客戶端請求的時候生成新的實例,完成操作以後再進行垃圾回收 對系統的性能有很大影響,所以在開發的時候如果不是特別需要不會創建stateful bean

 

如果我們使用註釋@Stateless(name=”com/rich/biz/xxx”)

此時的JNDI的名字就是“com/rich/biz/xxx/remote”和“com/rich/biz/xxx/local”

 

 

配置實例池 @PoolClass jboss提供的(只能用於jboss服務器:))

這個用在配置無狀態會話bean的時候使用(有狀態會話bean也可以配置此信息但是實例達到max值以後就不能調用此session bean)

先看源代碼:

  

實現:

  

 

public int maxSize = 30;默認大小事30

public long timeout = 9223372036854775807L;等待時間

 

使用方法:

@Stateless

@PoolClass(value=org.jboss.ejb3.StrictMaxPool.class,maxSize = 5,timeout=1000L)

class XDAOImpl implements LocalxxxDAO, RemotexxxDAO

如果我們定義的池的最大容量爲5 等待時間僅爲1 那麼很容易拋出timeout的鏈接異常,隨便寫個例子 然後客戶端跑個Thread去調用就可以看到效果

考慮到程序移植的問題 不是EJB3的註釋建議放在配置文件裏

 

持久化上下文@PersistenceContext(unitName="jboss") 管理數據庫連接和事務

首先使用前定義一個persistence-unit, 位置 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_1_0.xsd" version="1.0">

   

    <persistence-unit name="jboss" transaction-type="JTA">

        <jta-data-source>java:/MySqlDS</jta-data-source>

    <!--       

<properties>

         

        </properties> -->

   

    </persistence-unit>

 

</persistence>

 

此註釋用來實例化JPAEntityManager

@PersistenceContext(unitName="jboss")

    private EntityManager entitymanager;

 

實體bean註釋@Entity@Table@Id@Column@GeneratedValue@ManyToMany@ManyToOne@OneToMany@OneToOne@OrderBy

定義一個POJO

@Entity

@Table(name=”XXX”)

Class XXX implements java.io.Serializable

@Entity註釋用來定義一個實體

@Table用來配置此實體對應的數據庫中的表明,庫名等信息

public interface Table

    extends Annotation

{

 

    public abstract String name();

 

    public abstract String catalog();

 

    public abstract String schema();

 

    public abstract UniqueConstraint[] uniqueConstraints();

}

JPA的註釋太多了 可以參看oracle的JPA文檔庫的介紹 很詳細

http://www.oracle.com/technology/global/cn/products/ias/toplink/jpa/index.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章