Embeddable EJB 3.0を使用してTomcat上でEJB3.0を動かしてみます。
筆者の環境
Embeddable EJB3.0をダウンロードして解凍します。
※Preview RC9はTomcatデプロイ時にエラーとなってしまうためRC8を取得してください。
まずはEmbeddable EJB3.0の動作確認を行います。
はじめにEmbeddable EJBのjarファイルをUser LibraryとしてEclipseに定義してしまいます。
EclipseでDynamic Web Projectを作成します。今回はプロジェクト名をEJB3OnTomcatにしました。
srcにEmbeddable EJB3.0のconfフォルダにあるファイルを全てコピーします。
ProjectのPropertiesのJava Build Pathで、Libraryに先ほど定義したEmbeddable EJBのライブラリを追加します。
さらにJ2EE Module DependenciesでもEmbeddable EJBのライブラリを選択します。
上記の操作が終わったらTomcatにデプロイして起動してみます。
例外が無く正常に起動できればOKです。ちょっと警告が出ますが、とりあえず気にしないでおきます。
次にプログラムを書きます。
まずはEJBのプログラムです。EJBはjarファイルにしてWEB-INF/libに配置する必要があるので、別プロジェクトに作成します。
EclipseでJava Projectを作成します。プロジェクト名はEJB3OnTomcatEJBにしました。
Webプロジェクトと同様に、ProjectのPropertiesのJava Build Pathで、Embeddable EJBのライブラリを追加します。
プロジェクトのsrcディレクトリに以下の4つのファイルを作成します。
META-INF/persistence.xml
永続化定義です。defaultの永続化機構をjava:/DefaultDSにマップします。java:/DefaultDSの定義は、Webプロジェクトのembedded-jboss-beans.xmlに記述してあります。
tekit/ejb3tomcat/ejb/Car.java
Entity Beanです。
tekit/ejb3tomcat/ejb/CarDAO.java
SessionBeanのインターフェイスです。
tekit/ejb3tomcat/ejb/CarDAOBean.java
SessionBeanの実装です。
次にWebのプログラムを書きます。EJBを参照するのでProjectのPreferencesにて、J2EE Module Dependenciesの設定でEJB3OnTomcatEJBプロジェクトを選択します。
EJBを呼び出すロジックはJSPに書いてしまいます。
WebContent/index.jsp
以上でプログラムは終了です。
Tomcatにデプロイして実行してみると、こんな感じで動作確認できます。
アルファ版なのですがEntityBeanとSessionBeanを使う分には問題なさそうです。
非力なPCで開発する際にJBossが重い場合は、Tomcat+EJBで開発してみるのも良いかもしれませんね。
次はTomcat上でJBoss Seamを動かしてみます。
- JDK1.6.0_05
- Tomcat6.0.16
- Eclipse 3.3.1.1
Embeddable EJB3.0をダウンロードして解凍します。
※Preview RC9はTomcatデプロイ時にエラーとなってしまうためRC8を取得してください。
まずはEmbeddable EJB3.0の動作確認を行います。
はじめにEmbeddable EJBのjarファイルをUser LibraryとしてEclipseに定義してしまいます。
EclipseでDynamic Web Projectを作成します。今回はプロジェクト名をEJB3OnTomcatにしました。
srcにEmbeddable EJB3.0のconfフォルダにあるファイルを全てコピーします。
ProjectのPropertiesのJava Build Pathで、Libraryに先ほど定義したEmbeddable EJBのライブラリを追加します。
さらにJ2EE Module DependenciesでもEmbeddable EJBのライブラリを選択します。
上記の操作が終わったらTomcatにデプロイして起動してみます。
例外が無く正常に起動できればOKです。ちょっと警告が出ますが、とりあえず気にしないでおきます。
次にプログラムを書きます。
まずはEJBのプログラムです。EJBはjarファイルにしてWEB-INF/libに配置する必要があるので、別プロジェクトに作成します。
EclipseでJava Projectを作成します。プロジェクト名はEJB3OnTomcatEJBにしました。
Webプロジェクトと同様に、ProjectのPropertiesのJava Build Pathで、Embeddable EJBのライブラリを追加します。
プロジェクトのsrcディレクトリに以下の4つのファイルを作成します。
META-INF/persistence.xml
永続化定義です。defaultの永続化機構をjava:/DefaultDSにマップします。java:/DefaultDSの定義は、Webプロジェクトのembedded-jboss-beans.xmlに記述してあります。
<?xml version="1.0" encoding="UTF-8"?>
<persistence>
<persistence-unit name="default">
<jta-data-source>java:/DefaultDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
</persistence>
tekit/ejb3tomcat/ejb/Car.java
Entity Beanです。
package tekit.ejb3tomcat.ejb;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Car {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private Integer price;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
}
tekit/ejb3tomcat/ejb/CarDAO.java
SessionBeanのインターフェイスです。
package tekit.ejb3tomcat.ejb;
import java.util.List;
import javax.ejb.Local;
import javax.ejb.Remote;
@Local
@Remote
public interface CarDAO {
public abstract void create(String name, Integer price);
public abstract ListgetList();
}
tekit/ejb3tomcat/ejb/CarDAOBean.java
SessionBeanの実装です。
package tekit.ejb3tomcat.ejb;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless
public class CarDAOBean implements CarDAO{
@PersistenceContext
private EntityManager em;
public void create(String name, Integer price) {
Car car = new Car();
car.setName(name);
car.setPrice(price);
em.persist(car);
}
public ListgetList(){
return em.createQuery("select c from Car c").getResultList();
}
}
次にWebのプログラムを書きます。EJBを参照するのでProjectのPreferencesにて、J2EE Module Dependenciesの設定でEJB3OnTomcatEJBプロジェクトを選択します。
EJBを呼び出すロジックはJSPに書いてしまいます。
WebContent/index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="tekit.ejb3tomcat.ejb.Car"%>
<%@page import="java.util.Hashtable"%>
<%@page import="tekit.ejb3tomcat.ejb.CarDAO"%>
<%@page import="javax.naming.InitialContext"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Tomcat上でEJB3.0を動かすサンプル</title>
</head>
<body>
<%
// EJBを取得する
Hashtable<String, String> props = new Hashtable<String, String>();
props.put("java.naming.factory.initial", "org.jnp.interfaces.LocalOnlyContextFactory");
props.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
CarDAO dao = (CarDAO)new InitialContext(props).lookup("CarDAOBean/local");
// 作成ボタンからの遷移ならエンティティを作成する
if("create".equals(request.getParameter("command"))){
dao.create(request.getParameter("name"), new Integer(request.getParameter("price")));
}
// エンティティを列挙する
for(Car car : dao.getList()){
%>
<%= car.getName() %> / <%= car.getPrice() %><br/>
<%
}
%>
<form action="./index.jsp" method="post">
名前<input name="name" type="text"/>
価格<input name="price" type="text"/>
<input name="command" value="create" type="submit" title="作成"/>
</form>
</body>
</html>
以上でプログラムは終了です。
Tomcatにデプロイして実行してみると、こんな感じで動作確認できます。
アルファ版なのですがEntityBeanとSessionBeanを使う分には問題なさそうです。
非力なPCで開発する際にJBossが重い場合は、Tomcat+EJBで開発してみるのも良いかもしれませんね。
次はTomcat上でJBoss Seamを動かしてみます。
0 件のコメント:
コメントを投稿