EJB3

EJBは2のころはとてもめんどくさく、ほんとにこんなもん使ってるんか?と思っていましたが、ある方から、「3はいいよ」といってられたので、早速試してみる次第です。使ってみた結論ですが、私にはJPAはとても使えるような代物ではないというのが感想です。SQLが使いづらいのはほんとかんべんしてほしいな.....

hibernate-annotationsとhibernate-entitymanager

とりあえず簡単にJPAを試してみたいのであれば、これが一番手っ取り早く環境ができそうだったので、まずふれてみましょう。

-
 |-src
 |     |-testHibernate.java
 |     |-log4j.properties
 |     |-bean
 |     |       |-Item.java
 |     |-META-INF
 |     |              |-persistence.xml
 |-lib

まず、http://www.hibernate.org/のDownloadにいって、

Hibernate Core 	 3.2.1 GA 	 16.11.2006 	 Production 	 Download 	
Hibernate Annotations 	3.2.0 GA 	16.10.2006 	Production 	Download 	
Hibernate EntityManager 	3.2.0 GA 	16.10.2006 	Production 	Download 	

をダウンロードしましょう。その中にある、

hibernate3.jar
hibernate-annotations.jar
hibernate-entitymanager.jar

lib

にあるjarをとりあえずlibにコピーしましょう。DBはMySQL5を使いました。あとJDBC Driverはディスクにあったmysql-connector-java-3.1.10-bin.jarを使いました。これもlibにほり込んでおきます。後はEclipseでJavaのビルド・パスのライブラリーのJARの追加で今ほりこんだjarを追加しておきます。では実行してみましょう。テーブルが作成され、データが追加されました。

ではソース。

testHibernate.java

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import bean.Item;
public class testHibernate {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		EntityManagerFactory emf = Persistence
				.createEntityManagerFactory("manager1");
		EntityManager em = emf.createEntityManager();
		EntityTransaction tx = em.getTransaction();
		tx.begin();
		for (int i = 0; i < 10; i++) {
			Item item = new Item();
			item.setName("テスト" + i);
			item.setPrice(i + 30);
			em.persist(item);
		}
		tx.commit();
		em.close();
		emf.close();
	}
}

bean/Item.java

package bean;
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 = "ITEMTABLE")
public class Item implements Serializable{
   private Integer id;
   private String name;
   private int price;
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   public Integer getId() {
       return id;
   }
   public void setId(Integer id) {
       this.id = id;
   }
    public String getName() {
       return name;
   }
   public void setName(String name) {
       this.name = name;
   }
   public int getPrice() {
       return price;
   }
   public void setPrice(int price) {
       this.price = price;
   }
}

persistence.xml DB,ユーザ,パスワードは適当に。

<?xml version="1.0" encoding="UTF-8"?>
<persistence>
  <persistence-unit name="manager1" transaction-type="RESOURCE_LOCAL">
     <class>bean.Item</class>
     <properties>
        <property name="hibernate.hbm2ddl.auto" value="create" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.connection.username" value="mysql"/>
        <property name="hibernate.connection.password" value="mysql"/>
        <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/ejbtest"/>
        <property name="hibernate.max_fetch_depth" value="3"/>
     </properties>
  </persistence-unit>
</persistence>

log4j.properties これはhibernate-3.2.1.ga.zipにあったやつです。

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=warn, stdout
#log4j.logger.org.hibernate=info
log4j.logger.org.hibernate=warn
### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug
### log just the SQL
#log4j.logger.org.hibernate.SQL=debug
### log JDBC bind parameters ###
log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=debug
### log schema export/update ###
log4j.logger.org.hibernate.tool.hbm2ddl=debug
### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug
### log cache activity ###
#log4j.logger.org.hibernate.cache=debug
### log transaction activity
#log4j.logger.org.hibernate.transaction=debug
### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug
### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace

環境

まずはJ2SE5.0を入れておきましょう。アプリケーションサーバにはJBoss4を使います。GlassFish?はまた今度試してみます。Eclipseで開発していきますので、WTPまでいれておきます。All-In-One Eclipseで入れれば簡単に入ります。
またDBはMySQLを使います。5.0.22です。 ではJBoss http://labs.jboss.com/portal/jbossas/download
より4.0.5のRun Installerを選択します。するとJWSが動いてダウンロードが始まります。70Mぐらいです。途中で、Install Typeをejb3を選択して、パスワード設定する以外はデフォルトでいきました。環境変数を定義します。

JBOSS_HOME    C:\jboss-4.0.5.GA
pathにC:\jboss-4.0.5.GA\binを追加

後は、Postgresの場合は、C:\Program Files\PostgreSQL\8.1\jdbc\postgresql-8.1-407.jdbc3.jarをJBOSS_HOME\server\default\libにコピーしておきます。
またJBOSS_HOME\docs\examples\jcaにpostgres-ds.xmlがありますので、JBOSS_HOME\server\default\deployにコピーして編集しておきます。

<datasources>
 <local-tx-datasource>
   <jndi-name>PostgresDS</jndi-name>
<connection-url>jdbc:postgresql://localhost:5432/ejbtest</connection-url>
   <driver-class>org.postgresql.Driver</driver-class>
   <user-name>postgres</user-name>
   <password>postgres</password>
     <metadata>
        <type-mapping>PostgreSQL 7.2</type-mapping>
     </metadata>
 </local-tx-datasource>
</datasources>

JBOSSのTomcatはデフォルトでJDK1.4を使うようになっているので、

JBOSS_HOME\server\default\deploy\jbossweb-tomcat55.sar\conf\web.xml

の中に

     <!-- Uncomment to use jdk1.5 features in jsp pages
     <init-param>
        <param-name>compilerSourceVM</param-name>
        <param-value>1.5</param-value>
     </init-param>
     -->

とあるので、

     <!-- Uncomment to use jdk1.5 features in jsp pages -->
     <init-param>
        <param-name>compilerSourceVM</param-name>
        <param-value>1.5</param-value>
     </init-param>
     <!-- -->

にしておきます。 では動かしてみましょう。C:\jboss-4.0.5.GA\binで

run -c default

終了は

shutdown -S

です。あれエラーがでまくってます。どうも8080ポートが使われてるといってますね。

Address already in use: JVM_Bind:8080

Active Portsで調べて止めておきます。Oracle Database 10g Express Editionで遊んでいたのを忘れてました。http://localhost:8080/で画面がでればOKです。 では http://labs.jboss.com/portal/jbosside/downloads/development-releaseより、EclipseプラグインのJBoss IDEを入れておきます。2.0.0.ALPHA All Pluginsをいれます。ではEclipseを立ち上げ、EJB 3.0 Projectを選んで、プロジェクトを作りましょう。途中、Create a JBoss Serverのボタンで、JBoss IncにあるJBoss AS 4.0を選択して、進めていていきます。

Dali JPA Tools

http://www.eclipse.org/dali/viewlets/01-Add_Persistence_viewlet_swf.htmlにFlashでのデモがあるので、やってみましょう。ウィンドウ>ビューの表示から、Java Persistenceがありますので、Persistence Propertiesを選んで表示しておきます。次に、JavaProject?を作成します。作成後にプロジェクトを選択し、右ボタンをクリックするとメニューに

Java Persistence

というメニューがあるので選択します。するとConnectionなど選択できる画面がでますので、  Add Connections... を選び、新規にコネクションを作成します。新規作成の画面で、

データベース:mysql
JDBCドライバークラス:org.gjt.mm.mysql.Driver
クラスロケーション:c:\JDBC\mysql-connector-java-3.1.10-bin.jar
接続URL:jdbc:mysql://localhost/mysql?useUnicode=true&amp;characterEncoding=MS932

このあたりは環境に合わせてて設定します。テスト接続がうまくいったら、画面を閉じ、Add Java Persistenceの画面で、

Configure the project build path...

を選択します。ライブラリーの追加で、

JBoss EJB3 Libraries

を選択します。またAdd Java Persistenceの画面で、  Persistence unit name にdemo-puと同じようにいれてOKです。ではパッケージエクスプローラをみると

META-INF\persistence.xml

ができているはずです。では次にhttp://www.eclipse.org/dali/viewlets/02-Generate_Entities_from_Tables_viewlet_swf.html を参照します。

リンク

http://www.stackasterisk.jp/tech/java/ejb301_01.jsp
http://itpro.nikkeibp.co.jp/article/COLUMN/20060615/241006/
Java Persistence API + H2徹底解説
JBoss Seam - EJB 3.0時代のフレームワークを使いこなす
JPAの問題点

参考書籍

コメント

  • #comment

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-08-17 (金) 16:19:00 (6117d)