EJB3EJBは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で入れれば簡単に入ります。 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にコピーしておきます。 <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 Toolshttp://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 参考書籍コメント
|