【原創】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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【原創】eclipse + JBoss 5 + EJB3開發指南(2):編寫有狀態的SessionBeanEclipseSessionBean
- 【原創】eclipse + JBoss 5 + EJB3開發指南(3):使用Session Bean的本地介面EclipseSessionBean
- 【原創】eclipse + JBoss 5 + EJB3開發指南(5):使用配置檔案釋出Session BeanEclipseSessionBean
- 【原創】eclipse + JBoss 5 + EJB3開發指南(4):Session Bean中的註釋方法EclipseSessionBean
- JAVA開發環境搭建及變數配置(利用eclipse編寫第一個Java程式HelloWorld)Java開發環境變數Eclipse
- 編寫第一個Qt程式QT
- Linux C++ 開發2 - 編寫、編譯、執行第一個程式LinuxC++編譯
- 惡意軟體開發——編寫第一個Loader載入器
- Flutter學習指南:編寫第一個應用Flutter
- 求教,eclipse2.1+jboss3.2.2開發EclipseS3
- Oracle資料庫開發指南(原創)Oracle資料庫
- Flutter學習指南:編寫第一個Flutter應用Flutter
- Flutter入坑指南:編寫第一個Flutter應用Flutter
- Xamarin iOS開發實戰第1章使用C#編寫第一個iOS應用程式iOSC#
- rust druid編寫第一個窗體RustUI
- eclipse+lomboz+jboss開發疑問(新手)Eclipse
- iOS 11開發教程(七)編寫第一個iOS11程式碼Hello,WorldiOS
- 編寫更好程式碼的 6 個提示
- 編寫第一個HADOOP應用程式Hadoop
- jboss3.2.6+ms sqlserver 開發BMP實體bean的問題(吐血懇求高手指導)S3SQLServerBean
- Eclipse+JBoss+MySQL開發環境設定EclipseMySql開發環境
- 【原創】Struts1.x系列教程(1)-B:用MyEclipse開發第一個Struts程式Eclipse
- 系統開發中的實體BeanBean
- iOS 11開發教程(二)編寫第一個iOS 11應用iOS
- 【原創】Struts1.x系列教程(6):Bean標籤庫Bean
- JBOSS EAP 5專案遷移至JBOSS EAP 6
- Flutter外掛開發指南01: 通道Channel的編寫與實現Flutter
- # 編寫第一個Chrome ExtensionChrome
- Three.js開發指南(5 6):使用Three.js的幾何體JS
- HTML5遊戲開發(二):使用TypeScript編寫程式碼HTML遊戲開發TypeScript
- 編寫你人生中第一個機器學習程式碼吧!機器學習
- Xamarin iOS編寫第一個應用程式建立工程iOS
- 使用PyQt來編寫第一個Python GUI程式QTPythonGUI
- Django開發——003程式碼編寫Django
- Jboss7 部署EJB3 簡明教程
- 在Windows下編寫並執行第一個ASP.NET 5 Preview Web API程式WindowsASP.NETViewWebAPI
- 編寫第一個 .NET 微服務微服務
- PHP_TP5框架開發後端介面(程式碼編寫思路)PHP框架後端