all gone

          all gone

          EJB 3.0 學習筆記——Entity Bean

          在EJB 3.0 學習筆記——準備工作中只是簡單的搭好了EJB3.0開發的基本環境,之

          后就可以開發最簡單的Session Bean了,我感興趣的還是Entity Bean,所以接下來

          我想先試驗一下Entity Bean。
          ?
          一、在JBoss中配置好Data Source
          我使用的是MySQL數據庫,所以首先將MySQL的JDBC驅動復制到
          jboss-4.0.3SP1\server\all\lib目錄,然后將jboss-4.0.3SP1\docs\examples\jca

          下的mysql-ds.xml作出適當修改后復制到jboss-4.0.3SP1\server\all\deploy目錄

          下,這是我修改后的mysql-ds.xml文件:

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

          <!-- ?$Id:?mysql-ds.xml,v?1.3.2.1?2004/12/01?11:46:00?schrouf?Exp?$? -->
          <!-- ??Datasource?config?for?MySQL?using?3.0.9?available?from:
          http://www.mysql.com/downloads/api-jdbc-stable.html
          -->

          < datasources >
          ??
          < local-tx-datasource >
          ????
          < jndi-name > MySqlDS </ jndi-name >
          ????
          < connection-url > jdbc:mysql://localhost:3306/test </ connection-url >
          ????
          < driver-class > com.mysql.jdbc.Driver </ driver-class >
          ????
          < user-name > test </ user-name >
          ????
          < password ></ password >
          ????
          < exception-sorter-class-

          name > org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter </ excepti

          on-sorter-class-name
          >
          ????
          <!-- ?sql?to?call?when?connection?is?created
          ????<new-connection-sql>some?arbitrary?sql</new-connection-sql>
          ??????
          -->
          ????
          <!-- ?sql?to?call?on?an?existing?pooled?connection?when?it?is?obtained?

          from?pool?
          ????<check-valid-connection-sql>some?arbitrary?sql</check-valid-

          connection-sql>
          ??????
          -->

          ????
          <!-- ?corresponding?type-mapping?in?the?standardjbosscmp-jdbc.xml?

          (optional)?
          -->
          ????
          < metadata >
          ???????
          < type-mapping > mySQL </ type-mapping >
          ????
          </ metadata >
          ??
          </ local-tx-datasource >
          </ datasources >

          這樣之后,JBoss下的MySQL Data Source配置完成。

          二、創建數據庫并編寫Entity Bean代碼

          create table book(
          id int not null auto_increment primary key,
          title varchar(20) not null,
          author varchar(40) not null
          );
          新建Java Project,導入User Library:EJB3_JBoss,以下是類代碼。

          // Book.java
          package ?ejb.bean.entity;

          import ?java.io.Serializable;

          import ?javax.persistence.Entity;
          import ?javax.persistence.GeneratedValue;
          import ?javax.persistence.GenerationType;
          import ?javax.persistence.Id;
          import ?javax.persistence.Table;

          @Entity
          @Table(name
          = " book " )
          public ? class ?Book? implements ?Serializable?{
          ?
          /**
          ??*?
          ??
          */
          ?
          private ? static ? final ? long ?serialVersionUID? = ? 1L ;
          ?
          private ?Integer?id;?
          ?
          private ?String?title;?
          ?
          private ?String?author;
          ?
          ?
          public ?Book()?{??
          ??
          super ();?
          ?}?
          ?
          public ?Book(Integer?id,?String?title,?String?author)?{?
          ??
          super ();??
          ??
          this .id? = ?id;??
          ??
          this .title? = ?title;??
          ??
          this .author? = ?author;?
          ??}
          ?@Override
          ?
          public ?String?toString()?{?
          ??
          ??
          return ? " Book:? " ? + ?getId()? + ? " ?Title? " ? + ?getTitle()? + ? " ?

          Author?
          " ?+?getAuthor();?
          ?}
          ?
          public ?String?getAuthor()?{
          ??
          return ?author;
          ?}
          ?
          ?@Id?@GeneratedValue(strategy
          = GenerationType.AUTO)
          ?
          public ?Integer?getId()?{
          ??
          return ?id;
          ?}
          ?
          public ?String?getTitle()?{
          ??
          return ?title;
          ?}
          ?
          public ? void ?setAuthor(String?author)?{
          ??
          this .author? = ?author;
          ?}
          ?
          public ? void ?setId(Integer?id)?{
          ??
          this .id? = ?id;
          ?}
          ?
          public ? void ?setTitle(String?title)?{
          ??
          this .title? = ?title;
          ?}

          }

          三、編寫一個簡單的Stateless Session Bean 并進行測試

          // BookTestLocal.java
          package ?ejb.bean.entity;

          import ?javax.ejb.Local;

          @Local
          public ? interface ?BookTestLocal?{

          ?
          public ? void ?test();
          }

          // BookTestRemote.java
          package ?ejb.bean.entity;

          import ?javax.ejb.Remote;
          @Remote
          public ? interface ?BookTestRemote?{
          ?
          ?
          public ? void ?test();

          }

          // BookTestBean.java
          package ?ejb.bean.entity;

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

          @Stateless
          public ? class ?BookTestBean? implements ?BookTestLocal,?BookTestRemote?{

          ?@PersistenceContext
          ?EntityManager?em;
          ?
          public ? void ?test()?{
          ??
          // ?TODO?Auto-generated?method?stub
          ??Book?book? = ? new ?Book( null ,? " My?first?bean?book " ,?

          " Sebastian " );
          ??em.persist(book);

          ?}

          }


          ?

          // Client.java
          package ?ejb.client.entity;

          import ?ejb.bean.entity. * ;


          import ?javax.naming.InitialContext;

          /**
          ?*?Comment
          ?*
          ?*?
          @author ?<a?href="mailto:bill@jboss.org">Bill?Burke</a>
          ?*?
          @version ?$Revision:?1.1.6.7?$
          ?
          */
          public ? class ?Client
          {
          ???
          public ? static ? void ?main(String[]?args)? throws ?Exception
          ???{
          ??????InitialContext?ctx?
          = ? new ?InitialContext();
          ??????BookTestRemote?book?
          = ?(BookTestRemote)?ctx.lookup

          (
          " BookTestBean/remote " );

          ?????

          ???
          ??????book.test();
          ??????
          ??????System.out.println(
          " test?successful!? " );

          ???}
          }

          三、其他文件
          將jboss-EJB-3.0_RC5-PFD\docs\tutorial中的找到的jndi.properties、log4j.xml、builder.xml等復制到當前工程中,其中builder.xml需要修改。
          //builder.xml

          <? xml?version="1.0" ?>

          <!-- ?

          =======================================================================?

          -->
          <!-- ?JBoss?build?file?????????????????????????????????????????????????????

          ??
          -->
          <!-- ?

          =======================================================================?

          -->

          < project? name ="JBoss" ?default ="ejbjar" ?basedir ="." >

          ???
          < property? file ="../local.properties" ? />
          ???
          < property? environment ="env" />
          ???
          < property? name ="src.dir" ?value ="${basedir}/src" />
          ???
          < property? name ="jboss.home" ?value ="E:/Programming/Servers/jboss-

          4.0.3SP1/"
          />
          ???
          < property? name ="jboss.server.config" ?value ="all" />
          ???
          < property? name ="build.dir" ?value ="${basedir}/build" />
          ???
          < property? name ="build.classes.dir" ?value ="${build.dir}/classes" />

          ???
          <!-- ?Build?classpath? -->
          ???
          < path? id ="classpath" >
          ??????
          <!-- ?So?that?we?can?get?jndi.properties?for?InitialContext? -->
          ??????
          < pathelement? location ="${basedir}" />
          ??????
          < fileset? dir ="${jboss.home}/lib" >
          ?????????
          < include? name ="**/*.jar" />
          ??????
          </ fileset >
          ??????
          < fileset? dir ="${jboss.home}/server/${jboss.server.config}/lib" >
          ?????????
          < include? name ="**/*.jar" />
          ??????
          </ fileset >
          ??????
          < fileset? dir ="${jboss.home}/server/

          ${jboss.server.config}/deploy/ejb3.deployer"
          >
          ?????????
          < include? name ="*.jar" />
          ??????
          </ fileset >
          ??????
          < fileset? dir ="${jboss.home}/server/

          ${jboss.server.config}/deploy/jboss-aop-jdk50.deployer"
          >
          ?????????
          < include? name ="*.jar" />
          ??????
          </ fileset >
          ??????
          < pathelement? location ="${build.classes.dir}" />
          ???
          </ path >

          ???
          < property? name ="build.classpath" ?refid ="classpath" />

          ???
          <!-- ?

          ===================================================================?
          -->
          ???
          <!-- ?Prepares?the?build?directory??????????????????????????????????????

          ??
          -->
          ???
          <!-- ?

          ===================================================================?
          -->
          ???
          < target? name ="prepare" >
          ??????
          < mkdir? dir ="${build.dir}" />
          ??????
          < mkdir? dir ="${build.classes.dir}" />
          ???
          </ target >

          ???
          <!-- ?

          ===================================================================?
          -->
          ???
          <!-- ?Compiles?the?source?code??????????????????????????????????????????

          ??
          -->
          ???
          <!-- ?

          ===================================================================?
          -->
          ???
          < target? name ="compile" ?depends ="prepare" >
          ??????
          < javac? srcdir ="${src.dir}"
          ?????????destdir
          ="${build.classes.dir}"
          ?????????debug
          ="on"
          ?????????deprecation
          ="on"
          ?????????optimize
          ="off"
          ?????????includes
          ="**" >
          ?????????
          < classpath? refid ="classpath" />
          ??????
          </ javac >
          ???
          </ target >

          ???
          < target? name ="ejbjar" ?depends ="compile" >
          ??????
          < jar? jarfile ="build/tutorial.jar" >
          ?????????
          < fileset? dir ="${build.classes.dir}" >
          ????????????
          < include? name ="**/*.class" />
          ?????????
          </ fileset >
          ????????
          < fileset? dir ="." >
          ???????????
          < include? name ="META-INF/persistence.xml" />
          ????????
          </ fileset >
          ??????
          </ jar >
          ??????
          < copy? file ="build/tutorial.jar" ?todir ="${jboss.home}/server/

          ${jboss.server.config}/deploy"
          />
          ???
          </ target >

          ???
          < target? name ="run.stateless" ?depends ="ejbjar" >
          ??????
          < java? classname ="ejb.client.stateless.Client" ?fork ="yes" ?dir ="." >
          ?????????
          < classpath? refid ="classpath" />
          ??????
          </ java >
          ???
          </ target >
          ?
          ?
          < target? name ="run.stateful" ?depends ="ejbjar" >
          ???????
          < java? classname ="ejb.client.stateful.Client" ?fork ="yes" ?

          dir
          ="." >
          ??????????
          < classpath? refid ="classpath" />
          ???????
          </ java >
          ?
          </ target >
          ?
          ?
          < target? name ="run.timer" ?depends ="ejbjar" >
          ???????
          < java? classname ="ejb.client.timer.Client" ?fork ="yes" ?

          dir
          ="." >
          ??????????
          < classpath? refid ="classpath" />
          ???????
          </ java >
          ?
          </ target >
          ?
          ?
          < target? name ="run.entity" ?depends ="ejbjar" >
          ????????
          < java? classname ="ejb.client.entity.Client" ?

          fork
          ="yes" ?dir ="." >
          ???????????
          < classpath? refid ="classpath" />
          ????????
          </ java >
          ??
          </ target >
          ?

          ???
          <!-- ?

          ===================================================================?
          -->
          ???
          <!-- ?Cleans?up?generated?stuff?????????????????????????????????????????

          ??
          -->
          ???
          <!-- ?

          ===================================================================?
          -->
          ???
          < target? name ="clean.db" >
          ??????
          < delete? dir ="${jboss.home}/server/

          ${jboss.server.config}/data/hypersonic"
          />
          ???
          </ target >

          ???
          < target? name ="clean" >
          ??????
          < delete? dir ="${build.dir}" />
          ??????
          < delete? file ="${jboss.home}/server/

          ${jboss.server.config}/deploy/tutorial.jar"
          />
          ???
          </ target >


          </ project >

          最后,在工程目錄下新建目錄META-INF,在目錄META-INF新建persistence.xml文件,以下是文件內容:

          <? xml?version="1.0"?encoding="UTF-8" ?>
          < persistence >
          ???
          < persistence-unit? name ="test" >
          ??????
          < jta-data-source > java:/MySqlDS </ jta-data-source >
          ??????
          < properties >
          ???????
          < property? name ="hibernate.dialect" ?

          value
          ="org.hibernate.dialect.MySQLDialect" /> ???????
          ????????
          < property? name ="hibernate.hbm2ddl.auto" ?value ="update" />
          ??????
          </ properties >
          ???
          </ persistence-unit >
          </ persistence >

          四、運行測試
          run as->ant build后,選擇運行目標為run.entity->run。
          運行結果:

          Buildfile:?D:\Programs\Java\EclipseWork\EJB3\build.xml
          prepare:
          compile:
          ejbjar:
          run.entity:
          ?????
          [ java ] ?test?successful!
          BUILD?SUCCESSFUL
          Total?time:?
          9 ?seconds


          MySQL中

          select ? * ? from ?book;
          id????????title?????????????????????author
          1 ????????My?first?bean?book?????????Sebastian

          已經成功寫入。

          ?

          ?

          ?

          posted on 2006-05-20 22:38 all gone 閱讀(3383) 評論(4)  編輯  收藏 所屬分類: Java

          評論

          # re: EJB 3.0 學習筆記——Entity Bean 2006-05-28 08:06 Richie

          <property name="hibernate.hbm2ddl.auto" value="update"/>
          變成 value="create" 就不用手動建表了。
          EntityBean中比較核心的部分主要還是在映射關系,連鎖,lazyfetch上,加油努力。  回復  更多評論   

          # re: EJB 3.0 學習筆記——Entity Bean 2006-05-29 21:32 all gone

          我這個參考的是JBoss的實現里面的tutorial,Sun的文檔也發布了,感覺講的都很粗,很是期待有一本書可看  回復  更多評論   

          # re: EJB 3.0 學習筆記——Entity Bean 2006-06-03 08:30 frend

          不行啊,出錯了,大家看看我出錯在哪里
          Buildfile: E:\Documents and Settings\myhome\workspace\EJB3Test\src\build.xml
          prepare:
          compile:
          ejbjar:
          run.entity:
          [java] Exception in thread "main" javax.naming.NameNotFoundException: BookTestBean not bound
          [java] at org.jnp.server.NamingServer.getBinding(NamingServer.java:514)
          [java] at org.jnp.server.NamingServer.getBinding(NamingServer.java:522)
          [java] at org.jnp.server.NamingServer.getObject(NamingServer.java:528)
          [java] at org.jnp.server.NamingServer.lookup(NamingServer.java:252)
          [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          [java] at java.lang.reflect.Method.invoke(Method.java:585)
          [java] at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
          [java] at sun.rmi.transport.Transport$1.run(Transport.java:153)
          [java] at java.security.AccessController.doPrivileged(Native Method)
          [java] at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
          [java] at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466)
          [java] at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)
          [java] at java.lang.Thread.run(Thread.java:595)
          [java] at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
          [java] at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
          [java] at sun.rmi.server.UnicastRef.invoke(Unknown Source)
          [java] at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
          [java] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:610)
          [java] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:572)
          [java] at javax.naming.InitialContext.lookup(Unknown Source)
          [java] at ejb.bean.entity.Client.main(Client.java:17)
          [java] Java Result: 1
          BUILD SUCCESSFUL
          Total time: 10 seconds
            回復  更多評論   

          # re: EJB 3.0 學習筆記——Entity Bean 2006-06-16 19:47 all gone

          @frend
          你的BookTestBean 沒有部署成功  回復  更多評論   

          主站蜘蛛池模板: 藁城市| 集贤县| 淳化县| 稻城县| 瓦房店市| 衡南县| 宁都县| 孝感市| 瑞金市| 江都市| 藁城市| 宁强县| 临颍县| 文成县| 景洪市| 宜黄县| 剑河县| 吉安县| 万山特区| 鄂伦春自治旗| 乃东县| 肥乡县| 瑞安市| 肇庆市| 新闻| 永吉县| 长岛县| 中山市| 孟连| 五峰| 静海县| 白沙| 富川| 金沙县| 德格县| 淮南市| 开鲁县| 揭阳市| 长泰县| 临漳县| 师宗县|