EJB 3の持続化
EJB 3の永続化機構はHibernateとよく似ている.
環境:
サーバ:JBOSS 5.0
データベース:MySQL 5.0
1.データソースの作成
まずjboss-5.0.0.GAserverdefaultdeployの下で、データベースに接続するためのデータソースを作成します.
XMLファイルを作成します.名前はmysql-ds.xmlです.その内容は次のとおりです.
もちろん、データベースによって構成方法が異なります.具体的には、jboss-5.0.0.GAdocsexamplesjcaの対応するXMLファイルを参照してください.
MYSQLのJDBCドライバをjboss-5.0.0.GAserverdefaultlibにコピーする必要があります.
2.永続化ユニットの作成
src/META-INFディレクトリの下に、次のようなXMLファイルpersitence.xmlを作成します.
3.エンティティークラスを作成するには:
注記@Column注記は、プロパティにもフィールドにも使用できます.次のように使用できます.
ただし、フィールドとプロパティでこの注記を同時に使用することはできません.つまり、
同時使用ただし、UserIdの注釈がgetUserId()に使用されている場合、他のフィールドはフィールドに使用できますが、実際に機能する属性の注釈、すなわちフィールドに関する注釈は無視されます.
4.SessionインタフェースとSession Beanクラスの確立
5.エンティティBeanとSessionBean、およびMETA-INFフォルダをjarファイルにパッケージ化し、 jboss-5.0.0.GAserverdefaultdeploy、基本的にはいいです.
6.先のEJBが永続化できるかどうかをテストするため.
JNDIの検索に使用する属性ファイルをsrcの下に作成します.ファイル名はjndi.propertiesで、内容は以下の通りです.
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099
次のようなテストクラスEjbPersistenceTest.javaを再構築します.
通常、username=javaitと入力され、EJBの永続化プロセスが完了します.
環境:
サーバ:JBOSS 5.0
データベース:MySQL 5.0
1.データソースの作成
まずjboss-5.0.0.GAserverdefaultdeployの下で、データベースに接続するためのデータソースを作成します.
XMLファイルを作成します.名前はmysql-ds.xmlです.その内容は次のとおりです.
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/ejb3inaction</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>200596</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
もちろん、データベースによって構成方法が異なります.具体的には、jboss-5.0.0.GAdocsexamplesjcaの対応するXMLファイルを参照してください.
MYSQLのJDBCドライバをjboss-5.0.0.GAserverdefaultlibにコピーする必要があります.
2.永続化ユニットの作成
src/META-INFディレクトリの下に、次のようなXMLファイルpersitence.xmlを作成します.
<?xml version="1.0"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="mysqlpersistence">
<jta-data-source>java:/MySqlDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.jdbc.fetch_size" value="18"/>
<property name="hibernate.jdbc.batch_size" value="10"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
3.エンティティークラスを作成するには:
package com.entity;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="userinfo")
public class UserInfo implements Serializable {
private static final long serialVersionUID = -3200018567382795556L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer userId;
@Column(name="user_name",length=32)
private String username;
@Column(name = "password",nullable=false)
private String password;
public Integer getUserId() {
return userId;
}
public String getUsername() {
return username;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
注記@Column注記は、プロパティにもフィールドにも使用できます.次のように使用できます.
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer getUserId() {
return userId;
}
ただし、フィールドとプロパティでこの注記を同時に使用することはできません.つまり、
private Integer userId;
public Integer getUserId() {
return userId;
}
同時使用ただし、UserIdの注釈がgetUserId()に使用されている場合、他のフィールドはフィールドに使用できますが、実際に機能する属性の注釈、すなわちフィールドに関する注釈は無視されます.
4.SessionインタフェースとSession Beanクラスの確立
package com.dao;
import javax.ejb.Remote;
import com.entity.UserInfo;
@Remote
public interface IUserDao {
UserInfo getUserInfo(int userId);
void insertUser(UserInfo user);
}
package com.dao;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import com.entity.UserInfo;
@Stateless
public class UserDaoImp implements IUserDao{
@PersistenceContext(unitName="mysqlpersistence")
EntityManager entityManager;
public UserInfo getUserInfo(int userId) {
UserInfo userInfo= entityManager.find(UserInfo.class, userId);
return userInfo;
}
public void insertUser(UserInfo user) {
entityManager.persist(user);
}
}
5.エンティティBeanとSessionBean、およびMETA-INFフォルダをjarファイルにパッケージ化し、 jboss-5.0.0.GAserverdefaultdeploy、基本的にはいいです.
6.先のEJBが永続化できるかどうかをテストするため.
JNDIの検索に使用する属性ファイルをsrcの下に作成します.ファイル名はjndi.propertiesで、内容は以下の通りです.
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099
次のようなテストクラスEjbPersistenceTest.javaを再構築します.
package test;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.dao.IUserDao;
import com.entity.UserInfo;
public class EjbPersistenceTest {
public static void main(String[] args) throws NamingException {
// TODO Auto-generated method stub
Context initialContext = new InitialContext();
IUserDao user = (IUserDao) initialContext.lookup("UserDaoImp/remote");
//
UserInfo userInfo = new UserInfo();
userInfo.setUsername("javait");
userInfo.setPassword("2008");
user.insertUser(userInfo);
// ID
UserInfo userInfo = user.getUserInfo(1);
System.out.println("username="+userInfo.getUsername());
}
}
通常、username=javaitと入力され、EJBの永続化プロセスが完了します.