【原創】eclipse + JBoss 5 + EJB3開發指南(6):編寫第一個實體Bean程式
本文為原創,如需轉載,請註明作者和出處,謝謝!
EJB3容器通過EntityManager物件管理實體Bean,該類最主要的功能就是在記錄和JavaBean之間進行互相對映。例如,我們從資料庫 中查出一條記錄,這條記錄有field1和field2兩個欄位,假設有一個JavaBean,也包含了field1和field2屬性。那麼 EntityManager可以將這條記錄中的值對映到JavaBean的field1和field2屬性中。也就是說,在資料庫中的一條記錄就對應於一 個JavaBean的物件例項。下面將給出一個簡單的例子來演示如何來實現一個應用實體Bean的程式。在這個例子中使用無狀態的session bean通過EntityManager物件從資料表中查詢一條記錄,將該記錄對映成實體Bean的物件例項,最後通過session bean的方法返回該記錄的某個欄位值。
表名:t_users
表中的欄位和記錄
id name password_md5
1 bill TaokQpoNJQb02eafO/JgYw==
一、配置JBoss的資料庫連線池
在\server\default\deploy目錄中建立一個mysql-ds.xml檔案,內容如下:
mysql-ds.xml檔案用於配置mysql的資料來源。實際上,該檔案可以在\docs\examples\
jca目錄中找到,讀者只需要將資料庫名、使用者名稱和密碼以及jndi名改成自己的就可以了。最後將修改後的mysql-ds.xml檔案複製到
deploy目錄中(必須叫這個檔名)。
連線mysql資料庫需要一個jdbc驅動(jar檔案),將該檔案複製到\server\default\lib目錄中。
二、編寫實體Bean
User類是一個實體Bean,程式碼如下:
三、配置persistence.xml檔案
在META-INF目錄中建立一個persistence.xml檔案,程式碼如下:
其中元素的值就是mysql-ds.xml檔案中配置的資料來源名。如果使用註釋配置session bean,META-INF目錄下只有兩個檔案即可:MANIFEST.MF和persistence.xml。
四、在session bean中呼叫實體bean
其中UserBeanRemote為遠端介面。要注意的是,@PersistenceContext註釋的unitName屬性值必須和persistence.xml檔案中的元素的name屬性值相同。
五、客戶端呼叫session bean
由於本書的程式都在一個ear包中,因此,預設的jndi名是MyEnterprise/UserBean/remote,如果直接釋出包含EJB的jar包,預設的jndi名稱為UserBean/remote。
執行上面的程式碼後,將輸出如下的字串:
EJB3容器通過EntityManager物件管理實體Bean,該類最主要的功能就是在記錄和JavaBean之間進行互相對映。例如,我們從資料庫 中查出一條記錄,這條記錄有field1和field2兩個欄位,假設有一個JavaBean,也包含了field1和field2屬性。那麼 EntityManager可以將這條記錄中的值對映到JavaBean的field1和field2屬性中。也就是說,在資料庫中的一條記錄就對應於一 個JavaBean的物件例項。下面將給出一個簡單的例子來演示如何來實現一個應用實體Bean的程式。在這個例子中使用無狀態的session bean通過EntityManager物件從資料表中查詢一條記錄,將該記錄對映成實體Bean的物件例項,最後通過session bean的方法返回該記錄的某個欄位值。
表名:t_users
表中的欄位和記錄
id name password_md5
1 bill TaokQpoNJQb02eafO/JgYw==
一、配置JBoss的資料庫連線池
在
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>MyPIMjndi-name>
<connection-url>jdbc:mysql://localhost:3306/pimconnection-url>
<driver-class>com.mysql.jdbc.Driverdriver-class>
<user-name>rootuser-name>
<password>1234password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorterexception-sorter-class-name>
<metadata>
<type-mapping>mySQLtype-mapping>
metadata>
local-tx-datasource>
datasources>
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>MyPIMjndi-name>
<connection-url>jdbc:mysql://localhost:3306/pimconnection-url>
<driver-class>com.mysql.jdbc.Driverdriver-class>
<user-name>rootuser-name>
<password>1234password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorterexception-sorter-class-name>
<metadata>
<type-mapping>mySQLtype-mapping>
metadata>
local-tx-datasource>
datasources>
mysql-ds.xml檔案用於配置mysql的資料來源。實際上,該檔案可以在
連線mysql資料庫需要一個jdbc驅動(jar檔案),將該檔案複製到
二、編寫實體Bean
User類是一個實體Bean,程式碼如下:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->package entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "t_users")
public class User
{
private int id;
private String name;
private String password;
@Id
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
@Column(name = "password_md5")
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
}
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->package entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "t_users")
public class User
{
private int id;
private String name;
private String password;
@Id
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
@Column(name = "password_md5")
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
}
三、配置persistence.xml檔案
在META-INF目錄中建立一個persistence.xml檔案,程式碼如下:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->xml version="1.0" encoding="UTF-8"?>
<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="myentity">
<jta-data-source>java:/MyPIMjta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="none" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
properties>
persistence-unit>
persistence>
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->xml version="1.0" encoding="UTF-8"?>
<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="myentity">
<jta-data-source>java:/MyPIMjta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="none" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
properties>
persistence-unit>
persistence>
其中
四、在session bean中呼叫實體bean
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->package service;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import entity.User;
@Stateless
public class UserBean implements UserBeanRemote
{
@PersistenceContext(unitName="myentity")
protected EntityManager em;
@Override
public String getPassword()
{
User user = em.find(User.class, 1);
return user.getPassword();
}
}
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->package service;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import entity.User;
@Stateless
public class UserBean implements UserBeanRemote
{
@PersistenceContext(unitName="myentity")
protected EntityManager em;
@Override
public String getPassword()
{
User user = em.find(User.class, 1);
return user.getPassword();
}
}
其中UserBeanRemote為遠端介面。要注意的是,@PersistenceContext註釋的unitName屬性值必須和persistence.xml檔案中的
五、客戶端呼叫session bean
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->InitialContext ctx = new InitialContext();
UserBeanRemote userBeanRemote = (UserBeanRemote) ctx.lookup("MyEnterprise/UserBean/remote");
System.out.println(userBeanRemote.getPassword());
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->InitialContext ctx = new InitialContext();
UserBeanRemote userBeanRemote = (UserBeanRemote) ctx.lookup("MyEnterprise/UserBean/remote");
System.out.println(userBeanRemote.getPassword());
由於本書的程式都在一個ear包中,因此,預設的jndi名是MyEnterprise/UserBean/remote,如果直接釋出包含EJB的jar包,預設的jndi名稱為UserBean/remote。
執行上面的程式碼後,將輸出如下的字串:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->TaokQpoNJQb02eafO/JgYw==
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->TaokQpoNJQb02eafO/JgYw==
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12921506/viewspace-606601/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JAVA開發環境搭建及變數配置(利用eclipse編寫第一個Java程式HelloWorld)Java開發環境變數Eclipse
- Linux C++ 開發2 - 編寫、編譯、執行第一個程式LinuxC++編譯
- 編寫第一個Qt程式QT
- 惡意軟體開發——編寫第一個Loader載入器
- Flutter學習指南:編寫第一個應用Flutter
- rust druid編寫第一個窗體RustUI
- Flutter學習指南:編寫第一個Flutter應用Flutter
- Flutter入坑指南:編寫第一個Flutter應用Flutter
- Flutter外掛開發指南01: 通道Channel的編寫與實現Flutter
- # 編寫第一個Chrome ExtensionChrome
- JBoss5.x6.x 反序列化漏洞
- HTML5遊戲開發(二):使用TypeScript編寫程式碼HTML遊戲開發TypeScript
- Django開發——003程式碼編寫Django
- Three.js開發指南(5 6):使用Three.js的幾何體JS
- 基礎入門: 編寫第一個 Go 語言程式Go
- 編寫第一個 .NET 微服務微服務
- PHP_TP5框架開發後端介面(程式碼編寫思路)PHP框架後端
- 自媒體不會寫原創?這個模板直接套
- PEP 8 程式程式碼的編寫風格指南
- PHP擴充套件開發教程2 – 編寫第一個擴充套件 hello worldPHP套件
- 如何編寫第一個 ngrx Effect 類
- 6個原則助您建立高效能軟體開發團隊
- 6個小技巧教你編寫乾淨整潔的程式碼
- java安全編碼指南之:方法編寫指南Java
- React入門系列 - 2 編寫第一個Hello world的React程式React
- React入門系列 – 2 編寫第一個Hello world的React程式React
- 如何下載Eclipse和編寫Hallow worldEclipse
- 【cypress】3. 編寫第一個測試
- [原創]Brida操作指南
- 08_第一個相對完整的驅動實踐編寫
- 【譯】五個ES6功能,讓你編寫程式碼更容易
- 一個基於Java的介面快速開發框架!無需編寫程式碼,透過UI介面編寫介面!Java框架UI
- C#-sharpdevelop開發第一個winform程式C#devORM
- 手把手教你使用Go基於zookeeper編寫服務發現「原創」Go
- PyQt5 編寫一個UDP ServerQTUDPServer
- 編寫你的第一個垃圾收集器
- [譯] 編寫函式式的 JavaScript 實用指南函式JavaScript
- eBPF編寫避坑指南eBPF
- Java環境下載、配置環境、編寫我的第一個Java程式Java