1. 開發環境
IDE開發工具:Eclipse Java EE IDE for Web Developers
EJB容器:jboss-4.2.3.GA
后台數據庫:MysQL5.1
2. 開發步驟
2.1 在Eclipse中配置jboss-4.2.3.GA
1. 點擊小三角,選中New server
2. 選中JBOSS AS4.2
3. 點擊ADD。進行JBOSS配置
4. 在Home Directory中。點擊Browser選擇JBOSS4.2的安裝文件夾,在JRE中配置JRE的安裝文件夾,點擊finish
在finish。就可以完畢對JBOSS在Eclipse中的配置。
2.2 新建EJB3.0projecttitan
1. 右鍵->New->Project
2. 選擇EJB Project->next
3. Project name為“titan”,Targetruntime選擇配置好的JBOSS4.2,EJB module version選擇3.0,然后finish。新的EJB3.0project創建成功。
2.3 項目開發
2.3.1 開發Cabin實體Bean
package com.titan.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity//告知persistence provider這是一個映射到數據的實體類,而且能夠受管於EntityManager服務。
@Table(name="CABIN")//告知EJB容器。beanclass 應該被映射到哪一張數據庫表。
public classCabin implementsjava.io.Serializable{
/**
*
*/
private staticfinal longserialVersionUID = 1L;
/**
*
*/
private intid;
private String name;
private intdeckLevel;
private intshipId;
private intbedCount;
@Id//表示CAbin實體的主鍵,主鍵標志是必須的
@Column(name="ID")//定義怎樣將成員屬性映射到數據庫表CABIN中的字段。並不是是必須的
public intgetId() {
return id;
}
public voidsetId(int id) {
this.id =id;
}
@Column(name="NAME")
public String getName() {
return name;
}
public voidsetName(String name) {
this.name =name;
}
@Column(name="DECK_LEVEL")
public intgetDeckLevel() {
return deckLevel;
}
public voidsetDeckLevel(int deckLevel) {
this.deckLevel= deckLevel;
}
@Column(name="SHIP_ID")
public intgetShipId() {
returnshipId;
}
public voidsetShipId(int shipId) {
this.shipId= shipId;
}
@Column(name="BED_COUNT")
public intgetBedCount() {
return bedCount;
}
public voidsetBedCount(int bedCount) {
this.bedCount= bedCount;
}
}
2.3.2開發遠程接口TravelAgentRemote
package com.titan.travelagent;
import javax.ejb.Remote;
import com.titan.domain.Cabin;
@Remote//表示這是一個遠程接口
public interfaceTravelAgentRemote {
public voidcreateCabin(Cabin cabin);
public Cabin findCabin(int id);
}
2.3.3開發遠程接口的實現Bean類TravelAgentBean(StatelessBean)
package com.titan.travelagent;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import com.titan.domain.Cabin;
@Stateless//表示這是一個無狀態sessionbean
public classTravelAgentBean implementsTravelAgentRemote {
//@PersistenceContext告知EJB容器,必須用一個EntityManager實例來設置manager數據成員。
@PersistenceContext(unitName="titan") privateEntityManager manager;
public voidcreateCabin(Cabin cabin) {
// TODO Auto-generated method stub
manager.persist(cabin);
}
public Cabin findCabin(int id) {
// TODO Auto-generated method stub
return manager.find(Cabin.class, id);
}
}
2.3.4在META-INF下創建文件persistence.xml文件
配置例如以下:
<?xml version="1.0"encoding="UTF-8" ?>
<persistence version="1.0"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/persistencehttp://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="titan">
<jta-data-source>java:/titan</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto"value="create-drop"/>
</properties>
</persistence-unit>
</persistence>
2.3.5在com.titan.clients包下開發客戶端程序
packagecom.titan.clients;
importjavax.naming.InitialContext;
importjavax.naming.Context;
importjavax.naming.NamingException;
importjavax.rmi.PortableRemoteObject;
importcom.titan.domain.Cabin;
importcom.titan.travelagent.TravelAgentRemote;
importjava.util.Properties;
importjavax.rmi.PortableRemoteObject;
public classClient {
public static void main(String[]args){
try {
Context jndiContext=getInitialContext();
Objectref=jndiContext.lookup("TravelAgentBean/remote");
TravelAgentRemotedao=(TravelAgentRemote)
PortableRemoteObject.narrow(ref, TravelAgentRemote.class);
Cabin cabin_1=new Cabin();
cabin_1.setId(1);
cabin_1.setName("MasterSuite");
cabin_1.setDeckLevel(1);
cabin_1.setShipId(1);
cabin_1.setBedCount(3);
dao.createCabin(cabin_1);
Cabin cabin_2=dao.findCabin(1);
System.out.println(cabin_2.getId());
System.out.println(cabin_2.getName());
System.out.println(cabin_2.getShipId());
System.out.println(cabin_2.getDeckLevel());
System.out.println(cabin_2.getBedCount());
} catch (ClassCastException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static Context getInitialContext()throws NamingException {
// TODO Auto-generated method stub
Properties p=new Properties();
//...制定專有EJB廠商的JNDI屬性
p.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
p.put(Context.PROVIDER_URL, "://localhost:1099");
return newjavax.naming.InitialContext(p);
}
}
至此項目的client開發完畢。
2.4 配置MySql的datasource
1. 將mysql-connector-java-5.1.16.jar包放置到JBOSS_HOME\server\default\lib文件夾下.
2. 將配置好的mysql-ds.xml放到JBOSS_HOME\server\default\deploy文件夾下。配置例如以下:
<?
xmlversion="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>titan</jndi-name>
<connection-url>jdbc:mysql://192.168.9.85:3306/titan</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>root</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>
2.4.1創建數據庫
1、創建數據庫titan
2、創建數據表cabin
DROP TABLE IFEXISTS `cabin`;
CREATE TABLEcabin (
ID int(11) NOT NULL,
NAME varchar(255) DEFAULT NULL,
DECK_LEVEL int(11) DEFAULT NULL,
SHIP_ID int(11) DEFAULT NULL,
BED_COUNT int(11) DEFAULT NULL,
PRIMARY KEY (`ID`)
)
3. 執行
1. 將titanproject公布到JBOSS。啟動JBOSS
2. 打開client程序。右鍵->Run As->Java Application
3. 在數據庫里能夠查詢到對應的數據記錄,在控制台中能夠看到對應的查詢結果。