paulwong

          My Links

          Blog Stats

          常用鏈接

          留言簿(67)

          隨筆分類(1391)

          隨筆檔案(1149)

          文章分類(7)

          文章檔案(10)

          相冊

          收藏夾(2)

          AI

          Develop

          E-BOOK

          Other

          養生

          微服務

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          60天內閱讀排行

          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-26 09:44 paulwong 閱讀(412) 評論(0)  編輯  收藏 所屬分類: J2EE

          主站蜘蛛池模板: 玉龙| 汤阴县| 奈曼旗| 福贡县| 玛多县| 岱山县| 于都县| 南靖县| 儋州市| 平武县| 大英县| 长顺县| 台南市| 菏泽市| 娄底市| 额敏县| 河东区| 田阳县| 吉首市| 新化县| 双流县| 普宁市| 珠海市| 孟州市| 海林市| 涟水县| 成安县| 龙口市| 彰化市| 永胜县| 寿宁县| 富蕴县| 石楼县| 道孚县| 玉树县| 克什克腾旗| 石河子市| 哈尔滨市| 汝阳县| 昭平县| 镇康县|