このデモのSession Beanサンプルでは、JPAを使用して簡単なエンティティ・クラスを操作します。 ステートレスSession Beanのサンプル・コードを次に示します。
@Stateless
public class EmployeeFacadeBean implements EmployeeFacade {
@PersistenceContext
private EntityManager em;
public Employee addEmployee(String empName, double sal) {
Employee emp = new Employee();
emp.setName(empName);
emp.setSal(sal);
em.persist(emp);
return emp;
}
public Employee findEmployeeByEmpNo(Long empNo){
return em.find(Employee.class,empNo);
}
}
エンティティ・クラスは、エンティティであることを示す
@Entity
で注釈される簡単なJavaクラスです。
@Entity
@Table(name = "EMPLOYEES")
public class Employee implements java.io.Serializable
{
private Long empNo;
private String name;
private double sal;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="EMPNO")
public Long getEmpNo()
{
return empNo;
}
..
}
エンティティは、persistence.xmlとして
howto
という永続性ユニットで構成されます。永続性ユニットはJNDIの場所が
jdbc/OracleDS
にあるデータソースを使用します。
<persistence-unit name="howto">
<jta-data-source>jdbc/OracleDS</jta-data-source>
<properties>
<property name = "toplink.ddl-generation"
value = "create-tables"/>
<property name = "toplink.ddl-generation.output-mode" value = "database"/>
</properties>
</persistence-unit>
</persistence>
EJB 3.0はPOJOベースのため、JNDIからアクセスしてSpringから直接使用します。 インタフェースはすでにビジネス・インタフェースであるため、EJB 2.1 Session Beanとは異なり、EJBに別のビジネス・インタフェースを作成する必要はありません。 また、Springのプロキシ・クラスの追加も不要です。
サーブレットから使用されるSpring Beanから、EmployeeFacade EJBを使用します。
EmployeeFacade EJB
を使用するSpring Beanのコードを次に示します。
public class EmployeeFacadeServiceBean implements EmployeeFacadeService {
protected EmployeeFacade employeeFacade ;
//Uses setter injection
public void setEmployeeFacade(EmployeeFacade employeeFacade) {
this.employeeFacade = employeeFacade;
}
public Employee addEmployee(String empName, Double sal){
return (Employee) this.employeeFacade.addEmployee(empName, sal);
}
public Employee findEmployeeByEmpNo(Long empNo) {
return (Employee) this.employeeFacade.findEmployeeByEmpNo(empNo);
}
}
InsertServletはSpring Bean(EmployeeFacadeServiceBean)を使用します。
@EJB(name="ejb/EmployeeFacade",beanInterface=oracle.ejb30.EmployeeFacade.class)
public class InsertServlet extends HttpServlet
{
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
..
EmployeeFacadeServiceBean es = (EmployeeFacadeServiceBean) appContext.getBean("employeeFacadeService");
Employee emp = es.addEmployee(name,sal);
System.out.println("Successfully persisted an employee");
..
}
}
Webモジュールにパッケージされた
howto-ejb-service.xml
には、Spring構成が含まれます。 次のように、Spring Beanは
EmplyeeFacade
EJBのリモート・ビジネス・インタフェースを使用し、
JndiObjectFactoryBean
を使用してENCから取得されることを確認してください。
<bean id = "employeeFacade" class = "org.springframework.jndi.JndiObjectFactoryBean">
<property name = "jndiName" value = "java:comp/env/ejb/EmployeeFacade"/>
</bean>
We use setter injection in
EmployeeFacadeServiceBean
to inject an instance of
EmployeeFacade
EJB and hence must be referenced as follows:
<bean id="employeeFacadeService" class="oracle.ejb30.EmployeeFacadeServiceBean">
<property name = "employeeFacade" ref = "employeeFacade"/>
</bean>
<connection-pool name="ScottConnectionPool">
<connection-factory factory-class="oracle.jdbc.pool.OracleDataSource"
user="scott"
password="tiger"
url="jdbc:oracle:thin:@localhost:1521:ORCL" >
</connection-factory>
</connection-pool>
<managed-data-source name="OracleManagedDS"
connection-pool-name="ScottConnectionPool"
jndi-name="jdbc/OracleDS"
/>
ANTタスクを使用して、JDBCリソースを作成できます。 ant-oracle.propertiesファイルのデータベース構成(db.host、db.sid、db.port、db.user、db.password)が変更されていることを確認してください。
$ORACLE_HOME/ant/binが
PATH環境変数に含まれていることを確認し、次のコマンドを実行してください。
>ant configure-ds
Ant 1.6.2はOracle Containers for J2EE(OC4J)に同梱されており、
PATH環境変数を
$ORACLE_HOME/ant/binに設定する必要があります。 オペレーティング・システムによっては、現在はAntが環境変数をサポートしていないものがあります。 該当するオペレーティング・システムの場合は、
%HOWTO_HOME%ディレクトリにあるant-oracle.xmlを修正してください。
demo
directoryのant-oracle.propertiesを編集し、
次のOracle Containers for J2EE(OC4J)スタンドアロンで示されているとおりに、プロパティに正しい値が設定されていることを確認してください。
- oc4j.host:Oracle Containers for J2EE(OC4J)が稼働しているホスト
(デフォルトはlocalhost)
- oc4j.admin.port:RMIポート番号(デフォルトは23791)
- oc4j.admin.user:管理ユーザー名(デフォルトはoc4jadmin)
- oc4j.admin.password:管理ユーザーのパスワード(デフォルトはwelcome)
- oc4j.binding.module:デプロイしたWebモジュールがあるWebサイト名(デフォルトはhttp-web-site)
Oracle Application Server管理インストールを使用している場合、Oracle Application Serverインストールで管理されているOracle Containers for J2EE(OC4J)インスタンスの
oc4j.admin.userおよび
oc4j.admin.password以外の変更については、次のプロパティを変更します。
- opmn.host:Oracle Application Serverが稼働しているhostname/IP
(デフォルトはlocalhost)
- opmn.port:Oracle Application Serverインストール時のOPMNリクエスト・ポート(デフォルトは6003)
- oc4j.instance:管理ユーザー名(デフォルトはoc4jadmin)
環境に応じて、ant-oracle.propertiesのdeployer.uriを適切にコメントアウトする必要があります。たとえば、OPMNの管理する単一のOracle Containers for J2EE(OC4J)インスタンスやクラスタ化されたOC4Jインスタンス/グループなどです。
アプリケーションを構築するには、
%HOWTO_HOME%ディレクトリで次のコマンドを入力します。
>ant
これで、
%HOWTO_HOME%/libディレクトリ内に
springejb3.earが新しく作成されます。
構築が成功すると、このコマンドはアプリケーション・アーカイブのデプロイを試みます。 このコマンドはデプロイを実行する前に、Oracle Containers for J2EEが稼働しているかをテストします。
アプリケーションは、別々にデプロイすることもできます。
%ORACLE_HOME%の環境変数が定義されていることを確認したら、
%HOWTO_HOME%ディレクトリから次のコマンドを入力します。
>ant deploy