筆者の環境
- 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 List getList();
}
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 List getList(){
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を動かしてみます。