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

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

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

    gembin

    OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

    HBase, Hadoop, ZooKeeper, Cassandra

    Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

    There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

    About Me

     

    EJB3 學習Notes 1。

    [Notes 1]   Get Started --- setup environment and Helloworld Example
       
           1.  建立開發環境,安裝JDK5.0 Up,設置JAVA_HOME
                  下載EJB3 Container,本文采用Sun的GlassFish V2,glassfish-installer-v2ur1-b09d-windows.jar,
                  java -Xmx256m -jar glassfish-installer-v2ur1-b09d-windows.jar
                  cd glassfish
                  lib\ant\bin\ant -f setup.xml
            
           2.  啟動GlassFish,把glassfish_home\bin 加到Path, 執行Command,asadmin start-domain domain1 或者
    asadmin start-domain 將會啟動默認
                的domain
    . 用asadmin stop-domain domain1來shutdown GlassFish.
               關于admin command 可以參考
    http://docs.sun.com/app/docs/doc/819-3675/6n5slue6r?a=expand
           3.  建立測試環境,添加以下的Jars到ClassPath,
                GlassFish\lib\admin-cli.jar
                GlassFish\lib\appserv-rt.jar
                GlassFish\lib\appserv-ext.jar
                GlassFish\lib\javaee.jar

                創建jndi.properties,放在src目錄下,     

                         java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory
              java.naming.factory.url.pkgs
    =com.sun.enterprise.naming
              java.naming.factory.state
    =com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl
              org.omg.CORBA.ORBInitialHost
    =localhost
              org.omg.CORBA.ORBInitialPort
    =3700

              創建sun-ejb-jar.xml,放在META-INF目錄下,

           <?xml version="1.0" encoding="UTF-8"?>
           <!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 EJB 3.0//EN" "http://www.sun.com
           /software/appserver/dtds/sun-ejb-jar_3_0-0.dtd">
           <sun-ejb-jar>
            <enterprise-beans>
            </enterprise-beans>
           </sun-ejb-jar>
           創建數據庫表:
           
     CREATE TABLE "PEOPLE" 

       (  "ID" 
    NUMBER(9,0NOT NULL ENABLE, 

             "NATION" 
    VARCHAR2(20 BYTE) NOT NULL ENABLE, 

             "CITY" 
    VARCHAR2(50 BYTE), 

             "PHONE_NUMBER" 
    VARCHAR2(50 BYTE), 

             "ZIP_CODE" 
    VARCHAR2(20 BYTE), 

             "NAME" 
    VARCHAR2(200 BYTE) NOT NULL ENABLE, 

              
    CONSTRAINT "PEOPLE_PK" PRIMARY KEY ("ID")

      USING 
    INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 

      STORAGE(INITIAL 
    65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

      PCTINCREASE 
    0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

      TABLESPACE "DEMO"  ENABLE

       ) PCTFREE 
    10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING

      STORAGE(INITIAL 
    65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

      PCTINCREASE 
    0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

      TABLESPACE "DEMO" ;
           配置數據庫DataSource 以及JNDI
        4.  開始EJB3的第1個helloworld,
              
    (1).創建1個Entity
    package ejb3.example.entity;
    import
     java.io.Serializable;

    import javax.persistence.Basic;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.NamedQuery;
    import javax.persistence.SequenceGenerator;
    import javax.persistence.Table;

    @Entity
    @Table(name
    ="PEOPLE")
    @NamedQuery(name 
    = "People.findAll", query = "SELECT p FROM People p")
    @SequenceGenerator(name 
    = "PeopleSequence",sequenceName="SEQ_PEOPLE",initialValue=1,allocationSize=1)
    public class People implements Serializable{
        @Id
        @Column(name
    ="ID",nullable=false)
        @GeneratedValue(strategy 
    = GenerationType.SEQUENCE,generator="PeopleSequence")
        
    private int id;
        
        @Column(name
    ="NATION",nullable=false)
        
    private String nation;
        
        @Basic
        
    private String city;
        
        @Column(name
    ="PHONE_NUMBER")
        
    private String phoneNumber;
        
        @Column(name
    ="ZIP_CODE")
        
    private String zipCode;
        
        @Column(name
    ="NAME",nullable=false)
        
    private String name;
        
        
        
    public int getId() {
            
    return id;
        }
        
    public void setId(int id) {
            
    this.id = id;
        }
        
    public String getNation() {
            
    return nation;
        }
        
    public void setNation(String nation) {
            
    this.nation = nation;
        }
        
    public String getCity() {
            
    return city;
        }
        
    public void setCity(String city) {
            
    this.city = city;
        }
        
    public String getPhoneNumber() {
            
    return phoneNumber;
        }
        
    public void setPhoneNumber(String phoneNumber) {
            
    this.phoneNumber = phoneNumber;
        }
        
    public String getZipCode() {
            
    return zipCode;
        }
        
    public void setZipCode(String zipCode) {
            
    this.zipCode = zipCode;
        }
        
    public String getName() {
            
    return name;
        }
        
    public void setName(String name) {
            
    this.name = name;
        }
        
        
        
    public String toString(){
            
    return new StringBuilder()
            .append(
    "id="+id+"\n")
            .append(
    "name="+name+"\n")
            .append(
    "nation="+nation+"\n")
            .append(
    "city="+city+"\n")
            .append(
    "zipCode="+zipCode+"\n")
            .append(
    "phoneNumber="+phoneNumber).toString();
        }
    }
             創建persistence.xml放在META-INF目錄下,定義Persistence Unit提供給EntityManager使用
    <?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="PeoplePersistenceUnit" transaction-type="JTA">
            
    <provider>
                oracle.toplink.essentials.PersistenceProvider
            
    </provider>
            
    <jta-data-source>oracleDataSourceJNDI</jta-data-source>
            
    <!--mapping-file>ejb3/example/entity/orm.xml</mapping-file-->
            
    <class>ejb3.example.entity.People</class>
            
    <properties>
                
    <property name="toplink.target-server" value="SunAS9"/>
                
    <property name="toplink.target-database" value="Oracle"/>
                
    <property name="toplink.logging.level" value="FINE"/>
                
    <!--<property name="toplink.ddl-generation" value="drop-and-create-tables"/>
                
    -->
            
    </properties>
        
    </persistence-unit>

    </persistence>
             
            
    (2) 創建IPeoplePersistenceService來做Persistence Facade,使用EntityManager的API
             

    package ejb3.example.service.api;

    import java.util.List;

    import javax.ejb.Local;

    import ejb3.example.entity.People;


    public interface IPeoplePersistenceService {
           
        
    public void save(People p);
        
        
    public People find(int id);
        
        
    public List<People>findAll();
        
        
    public void update(People p);
        
        
    public void delete(int id);
        
        
    public List<People>query(String query);
        
        
    public List<People> queryByPagination(String query,int startPage,int pageSize);
    }
     
             (3). 實現Persistent Service
            


    package ejb3.example.service.impl;

    import java.util.List;

    import javax.ejb.Stateless;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import javax.persistence.Query;

    import ejb3.example.entity.People;

    @Stateless
    public class PeoplePersistenceServiceBean implements IPeoplePersistenceService {
        @PersistenceContext(unitName
    ="PeoplePersistenceUnit")
        
    private EntityManager entityManager;
        
        
    private static final int DEFAULT_PAGE_SIZE=20;
        
    public List<People>query(String query){
            
    return entityManager.createQuery(query).getResultList();
        }
        
        
    public List<People>findAll(){
            
    return entityManager.createNamedQuery("People.findAll").getResultList();
        }
        
        
    public void save(People p) {
            assertNotNull(p);
            entityManager.persist(p);
        }
        
        
    public People find(int id){
            
    return entityManager.find(People.class, id);
        }

        
    public void delete(int id) {
            People p
    =entityManager.find(People.class, id);
            
    if(p!=null)
             entityManager.remove(p);
        }

        
    public void update(People p) {
            assertNotNull(p);
            entityManager.merge(p);
        }
        
        
        
    public List<People> queryByPagination(String query,int startPage,int pageSize){
            Query q
    =entityManager.createQuery(query);
            q.setMaxResults(pageSize
    <1?DEFAULT_PAGE_SIZE:pageSize);
            
    if(startPage<1)startPage=1;
            q.setFirstResult(startPage
    *pageSize);
            
    return q.getResultList();
        }
        
        
        
    private void assertNotNull(Object o){
             
    if(null==o)
                 
    throw new RuntimeException("Object cannot be null");
        }
         
    }

            (4). 創建Business Logic的Service Interface

    package ejb3.example.service.api;

    import java.util.List;

    import javax.ejb.Local;
    import javax.ejb.Remote;

    import ejb3.example.entity.People;



    public interface IPeopleManager {
          
          
    public People findById(int id);
          
          
    public List<People> findByName(String name);
          
          
    public List<People> findByNation(String nation);
          
          
    public List<People> findAll();
          
          
    public void update(People p);
          
          
    public void deleteById(int id);
          
          
    public void save(People p);
          
          
    public List<People> queryByPagination(String query,int startPage,int pageSize);
        
    }
          
          (5).創建Stateless Bean來處理Busniess Logic , 它實現IPeopleManager


    package ejb3.example.service.impl;

    import java.util.List;

    import javax.annotation.Resource;
    import javax.ejb.EJB;
    import javax.ejb.Remote;
    import javax.ejb.Stateless;
    import javax.jms.Connection;
    import javax.jms.ConnectionFactory;
    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.MessageProducer;
    import javax.jms.ObjectMessage;
    import javax.jms.Session;

    import ejb3.example.entity.People;


    @
    Local(IPeopleManager.class)
    @Stateless(name
    ="peopleManagerBean", mappedName="peopleManagerBeanJNDI"
    public class PeopleManagerBean implements IPeopleManager {

        
    private static final String PEOPLE_ENTITY=People.class.getSimpleName();

        @EJB IPeoplePersistenceService persister;

        
        
    public void deleteById(int id) {
            persister.delete(id);

        }

        
    public List<People> findAll() {
            
    return persister.findAll();
        }

        
    public People findById(int id) {
            
    return persister.find(id);
        }

        
    public List<People> findByName(String name) {
            
    return  persister.query("select p from "+PEOPLE_ENTITY+" p where p.name=:"+name);
        }

        
    public List<People> findByNation(String nation) {
            
    return  persister.query("select p from "+PEOPLE_ENTITY+" p where p.nation=:"+nation);
        }

        
    public List<People> queryByPagination(String query,int startPage, int pageSize) {
            
    return  persister.queryByPagination(query, startPage, pageSize);

        }

        
    public void save(People p) {
            persister.save(p);
        }

        
    public void update(People p) {
            persister.update(p);
        }
         
    }

           (6). Export Jar,把它放在glassfish\domains\domain1\autodeploy,這個會再GlassFish啟動的時候自動部署或者打開http://localhost:4848,用默認的帳號登陸來Deploy
                 (user: admin   password: adminadmin)
                

            (7). 創建測試客戶端
     

    package ejb3.example.client;

    import java.sql.SQLException;
    import java.util.Iterator;

    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;

    import ejb3.example.service.api.IPeopleManager;
    import ejb3.example.entity.People;


    public class TestClient {

        
    /**
         * Method documentation to be filled
         * TODO
         *
         * 
    @param args
         * 
    @throws NamingException 
         * 
    @throws SQLException 
         * 
    @throws ClassNotFoundException 
         * 
    @throws IllegalAccessException 
         * 
    @throws InstantiationException 
         
    */
        
    public static void main(String[] args) throws NamingException, SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException {

            Context context 
    = new InitialContext ();
            IPeopleManager mgr 
    = (IPeopleManager)context.lookup ("peopleManagerBeanJNDI");
            People p
    =mgr.findById(1);
            p.setCity(
    "beijing Chaoyang");
            p.setName(
    "gembin");
            p.setNation(
    "Great China");
            p.setPhoneNumber(
    "xxxx");
            p.setZipCode(
    "100000");
            mgr.update(p);
            Iterator
    <People>ps=mgr.findAll().iterator();
            
    while(ps.hasNext()){
                System.out.println(
    "*********************");
                System.out.println(ps.next());
                System.out.println(
    "*********************");
            }
         
        }
    }


           

    posted on 2009-02-25 11:21 gembin 閱讀(1824) 評論(2)  編輯  收藏 所屬分類: EJB3

    評論

    # re: EJB3 學習Notes 1。 2009-02-25 12:40 3條魚

    暈倒,就這么點  回復  更多評論   

    # re: EJB3 學習Notes 1。 2009-02-25 14:43 gembin

    hehe 剛才還沒寫完。。。  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    統計

    常用鏈接

    留言簿(6)

    隨筆分類(440)

    隨筆檔案(378)

    文章檔案(6)

    新聞檔案(1)

    相冊

    收藏夾(9)

    Adobe

    Android

    AS3

    Blog-Links

    Build

    Design Pattern

    Eclipse

    Favorite Links

    Flickr

    Game Dev

    HBase

    Identity Management

    IT resources

    JEE

    Language

    OpenID

    OSGi

    SOA

    Version Control

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    free counters
    主站蜘蛛池模板: 亚洲综合色丁香麻豆| 69国产精品视频免费| 国产91色综合久久免费| 久久精品无码专区免费东京热| 久久免费动漫品精老司机| 18禁男女爽爽爽午夜网站免费 | 亚洲卡一卡2卡三卡4卡无卡三| 亚洲va在线va天堂va不卡下载| 亚洲精品动漫在线| 免费精品久久久久久中文字幕| 久久久久久久久久久免费精品| 久久国产精品免费看| 国产在线播放免费| 亚洲国产另类久久久精品| 亚洲精品美女久久7777777| a毛片免费观看完整| 亚洲熟妇无码一区二区三区| 人人爽人人爽人人片av免费 | 日本久久久久亚洲中字幕| 亚洲精品天堂在线观看| 亚洲天堂一区二区三区四区| 欧洲精品码一区二区三区免费看| 中文字幕成人免费视频| 亚洲一区二区三区乱码A| 亚洲国产日韩综合久久精品| 久久黄色免费网站| 久久久青草青青国产亚洲免观 | 亚洲精品高清国产麻豆专区| 中文字幕免费人成乱码中国| 国产成人精品日本亚洲专区| 亚洲精品人成网线在线播放va| 日本免费网站视频www区| 亚洲国产精品久久久久婷婷软件| 一级人做人爰a全过程免费视频 | 成人av免费电影| 亚洲福利视频一区二区三区| 一级毛片免费播放| 久久亚洲春色中文字幕久久久 | 日韩免费一级毛片| 亚洲av永久无码精品秋霞电影秋| 四虎成年永久免费网站|