#freeze
* [[EJB3]]
[[EJB>http://www.itmedia.co.jp/enterprise/0401/30/epn11.html]]は2のころはとてもめんどくさく、ほんとにこんなもん使ってるんか?と思っていましたが、ある方から、「3はいいよ」といってられたので、早速試してみる次第です。使ってみた結論ですが、私にはJPAはとても使えるような代物ではないというのが感想です。SQLが使いづらいのはほんとかんべんしてほしいな.....

#contents

** 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は[[MySQL]]5を使いました。あと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>JDK1.5]]を入れておきましょう。アプリケーションサーバにはJBoss4を使います。GlassFishはまた今度試してみます。[[Eclipse>Eclipse]]で開発していきますので、[[WTP>http://www.atmarkit.co.jp/fjava/rensai3/eclipse31_03/eclipse31_03_1.html]]までいれておきます。[[All-In-One Eclipse>http://aioec.sourceforge.jp]]で入れれば簡単に入ります。~
またDBは[[MySQL>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徹底解説>http://journal.mycom.co.jp/special/2006/jpa/]]~
[[JBoss Seam - EJB 3.0時代のフレームワークを使いこなす>http://journal.mycom.co.jp/special/2006/seam/]]~
[[JPAの問題点>http://d.hatena.ne.jp/higayasuo/20070106]]~
** 参考書籍

** コメント
-#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS