- 追加された行はこの色です。
- 削除された行はこの色です。
- EJB3 へ行く。
#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&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