love fish大鵬一曰同風起,扶搖直上九萬里

          常用鏈接

          統計

          積分與排名

          friends

          link

          最新評論

          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-07-21 01:39 liaojiyong 閱讀(609) 評論(0)  編輯  收藏 所屬分類: EJB

          主站蜘蛛池模板: 临沭县| 繁峙县| 闽清县| 清苑县| 乌兰察布市| 民丰县| 贺州市| 阿尔山市| 东光县| 平阴县| 大埔区| 扎兰屯市| 台江县| 东乡族自治县| 郸城县| 许昌市| 灵宝市| 宜章县| 信宜市| 宣恩县| 宣城市| 高邮市| 宣武区| 饶阳县| 类乌齐县| 泸定县| 南岸区| 郓城县| 台安县| 灵台县| 龙口市| 朝阳县| 宁南县| 宜黄县| 石嘴山市| 内乡县| 会理县| 临海市| 澄江县| 房山区| 沈阳市|