多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php框架 > 框架設計 > EJB初級篇--EJB組件之實體Bean

EJB初級篇--EJB組件之實體Bean

來源:程序員人生   發(fā)布時間:2015-01-07 08:29:57 閱讀次數(shù):3422次

     上文我們對會話Bean的生命周期和兩個子類型(有狀態(tài)會話Bean和無狀態(tài)會話Bean)進行了詳細解說,本篇博文中我們繼續(xù)說說EJB組件中的實體Bean

     其實實體Bean就是1個加了注釋符@Entity)的簡單java對象POJO),實體關系和O/R映照也是通過注釋符來定義的,并且提供了幾種不同的數(shù)據(jù)庫操作規(guī)范。1旦被EntityManager訪問,它就成了1個持久化對象,我們就能夠像之前使用Hibernate1樣來使用實體對象了。

     下圖是實體Bean內(nèi)容結(jié)構(gòu)圖,方便我們宏觀的了解實體Bean。通過實體管理器操作實體Bean,來實現(xiàn)對數(shù)據(jù)庫的更新、JPQL查詢和SQL查詢。可以說,實體管理器工具實體Bean則是數(shù)據(jù)

計算機生成了可選文字:實體管理器執(zhí)行更新十JP區(qū)查詢十日朗n~“口飯月/-產(chǎn)困叭尸‘、‘/氣J交0門Cle夕~、沂一\SqIServer,~_一尸、~

     下面主要是通過1個實體Bean實例,來理解其調(diào)用進程。其進程主要包括以下各個進程:

     1)配置數(shù)據(jù)源

     2)指定數(shù)據(jù)源

     3)開發(fā)1個實體Bean

     4)開發(fā)會話Bean進行調(diào)用

     5)打包并部署到JBoss服務器

     6)開發(fā)客戶端進行測試

     看著上面6個步驟是否是覺得記不住啊,沒有關系,這個不需要記,理解了自然就會了。當我們需要新建1個項目時,(1)首先需要肯定數(shù)據(jù)源并且進行配置吧,這就是我們上面的第1個進程--配置數(shù)據(jù)源;2)配置完數(shù)據(jù)源(1個或多個)后,我們就需要肯定當前實體Bean分別需要使用哪一個數(shù)據(jù)源,也就是第2個進程--指定數(shù)據(jù)源;3)做好和數(shù)據(jù)庫連接的準備了,我們需要開發(fā)實體Bean來對應數(shù)據(jù)庫中的表,就是第3個進程--開發(fā)1個實體Bean4)實體Bean開發(fā)完成后,可以被會話Bean調(diào)用,也能夠被其他類調(diào)用,在本實例中我們采取會話Bean調(diào)用實體Bean,所以需要第4個進程--開發(fā)會話Bean進行調(diào)用;5)到此我們服務器真?zhèn)€代碼編寫就完成了,但是我們還需要進行打包并部署到JBoss服務器上,以供客戶端調(diào)用,故第5個進程--打包并部署到JBoss服務器6)最后就是我們客戶端對服務器端組件的調(diào)用了,第6個進程--開發(fā)客戶端進行測試。

     通過上面簡單通俗的介紹,不知道你對實體Bean調(diào)用進程的幾個步驟加深印象了沒有,暫時沒有也沒有關系,以后多用,用著用著就理解深入了,用著用著就爛記于心了。下面我在對這幾個進程進行1個詳細的演示和解說。


1)配置數(shù)據(jù)源


     在實際利用中,我們可能需要使用不同的數(shù)據(jù)庫,如MySQLOracleMSSQL Server等。各個數(shù)據(jù)庫數(shù)據(jù)源配置模板都在%Jboss_Home%docsexamplesjca目錄下,共包括38中數(shù)據(jù)源的連接。要配置到某1個數(shù)據(jù)源的連接,需要進行以下步驟:

     1.復制模板--復制該數(shù)據(jù)庫類型的配置模板到%Jboss_Home%serverdefaultdeploy目錄,并設置數(shù)據(jù)源參數(shù)(以MSSQL Server為例);

<span style="font-size:18px;"><datasources> <local-tx-datasource> <!-- 數(shù)據(jù)源名稱 --> <jndi-name>MSSQLDS</jndi-name> <!-- 指定連接本地的Demo數(shù)據(jù)庫 --> <connection-url>jdbc:microsoft:sqlserver://localhost:8080;DatabaseName=Demo</connection-url> <!-- 數(shù)據(jù)庫驅(qū)動類 --> <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class> <!-- Demo數(shù)據(jù)庫登錄用戶名--> <user-name>sunliduan</user-name> <!-- Demo數(shù)據(jù)庫登錄密碼--> <password>sunliduan</password> <metadata> <type-mapping>MSSQLSERVER2000</type-mapping> </metadata> </local-tx-datasource> </datasources></span>

     如果JBoss服務器處于啟動狀態(tài),則此時JBoss會自動監(jiān)控到該文件,并加載起來,并在控制臺輸出相應信息。

     2.添加驅(qū)動--添加該數(shù)據(jù)庫的驅(qū)動程序包到%Jboss_Home%serverdefaultlib目錄,并重啟JBoss服務器加載該程序包。

     各個數(shù)據(jù)庫的數(shù)據(jù)源配置都是這兩個步驟,基本類似。


2)指定數(shù)據(jù)源


     以上配置的數(shù)據(jù)源都是由JBoss服務器加載和管理的,要使用這些數(shù)據(jù)源,還需要在利用中指定援用哪個數(shù)據(jù)源。而這項工作的完成靠persistence.xml便可。

<span style="font-size:18px;"><SPANstyle="FONT-SIZE: 14px; FONT-FAMILY: MicrosoftYaHei"><persistence> <!-- Name屬性用于定義持久化內(nèi)容的名稱 --> <persistence-unitname="demo"> <!-- Jta-data-source 用于指定實體Bean使用的數(shù)據(jù)源名稱 --> <jta-data-source>java:/MSSQLDS</jta-data-source> <!-- 廠商專有屬性(可選) --> <properties> <!--自動輸出schema創(chuàng)建DDL語句 --> <propertyname="hibernate.hbm2ddl.auto" value="create-drop"/> </properties> </persistence-unit> </persistence></SPAN></span>

     這里需要注意的1點是:"hibernate.hbm2ddl.auto"的值,若為上文中的"create-drop",則在實體Bean發(fā)布及卸載時將自動創(chuàng)建及刪除相應的數(shù)據(jù)庫表。為了使以后實體Bean的改動能反應到數(shù)據(jù)庫表,建議使用update,這樣實體Bean添加1個屬性時能同時在數(shù)據(jù)庫表增加相應字段。


3)開發(fā)實體Bean


     實體Bean實際上對應了數(shù)據(jù)庫中的,它是數(shù)據(jù)庫中表在Java類中的表現(xiàn)。EJB容器能夠根據(jù)實體Bean自動在數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表。

     開發(fā)1個實體Bean很簡單,只需要新建1個POJO,添加與數(shù)據(jù)表字段同名的變量,同時使用1些注釋符來表示該實體Bean數(shù)據(jù)庫表的對應映照關系便可。

<span style="font-size:18px;">/** * @ClassName: 用戶實體Bean * @Description: 用戶實體Bean * @author 孫麗端 * @date 2014年11月28日20:22:51 */ package com.tgb.ejb; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="user") public class User implements Serializable { private int id; //用戶ID private String username; //用戶名 private String password; //密碼 @Id @GeneratedValue(strategy=GenerationType.IDENTITY) public int getId() { return id; } public void setId(int id) { this.id = id; } @Column(name="userName",length=50) public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @Column(name="password",length=50) public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }</span>

     需要注意:實體Bean需要實現(xiàn)Serializable接口,這樣就能夠有EJB客戶端創(chuàng)建該對象,并將該對象傳送到服務器端。

 

4)開發(fā)會話Bean并調(diào)用


     實體Bean既可以被會話Bean調(diào)用,也能夠被任何的JavaJSP調(diào)用,在EJB利用程序中,我們通常會在會話Bean中調(diào)用實體Bean,來實現(xiàn)對數(shù)據(jù)庫的操作。

     新建1個遠程的會話Bean組件后會生成1個遠程接口類實現(xiàn)類。代碼以下:


<span style="font-size:18px;">/** * @ClassName: 用戶管理的遠程接口類 * @Description: 用戶管理的遠程接口類 * @author 孫麗端 * @date 2014年11月28日20:22:51 */ package com.tgb.ejb; import javax.ejb.Remote; @Remote public interface UserManager { public void addUser(User user); }</span>

<span style="font-size:18px;">/** * @ClassName: 用戶管理的實現(xiàn)類 * @Description: 用戶管理的實現(xiàn)類 * @author 孫麗端 * @date 2014年11月28日20:22:51 */ package com.tgb.ejb; import javax.ejb.Local; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; @Stateless @Local public class UserManagerBean implements UserManager { @PersistenceContext protected EntityManager em; @Override public void addUser(User user) { em.persist(user); //保存記錄 } }</span>

     其中我們比較陌生的多是@PersistenceContextEntityManager。先說EntityManager,它是實體管理器,也就是實體Bean的管理容器。通過該對象,我們能夠?qū)崿F(xiàn)與數(shù)據(jù)庫的各種交互,包括增刪改查等。再說@PersistenceContextEntityManager通過注釋@PersistenceContext可以實現(xiàn)動態(tài)注入EntityManager對象,如果persistence.xml文件中配置了多個不同的持久化內(nèi)容,則還需要通過unitName屬性來指定持久化名稱,以下:

<span style="font-size:18px;">@PersistenceContext(unitName="demo") protected EntityManager em;</span>


(5)打包并部署到JBoss服務器


     完成了以上的開發(fā),我們就能夠?qū)斍袄冒l(fā)布到JBoss中,構(gòu)成JNDI服務以供外部訪問了。發(fā)布的方法很簡單,只需要導出該項目的JAR包到JBoss服務器的部署目錄%Jboss_Home%serverdefaultdeploy便可。然后JBoss服務器就會自動加載該服務,創(chuàng)建數(shù)據(jù)庫表,并且發(fā)布JNDI服務UserManagerBean/remote,我們就能夠通過客戶端訪問JNDI服務UserManagerBean/remote了。

 

6)開發(fā)客戶端進行測試


     首先我們需要把實體類User.java和接口類UserManager.java導出為Jar添加到客戶端項目的類路徑下,然后新建測試類UserManagerClient.java,代碼以下:

<span style="font-size:18px;">/** * @ClassName: 用戶管理的客戶端測試類 * @Description: 用戶管理的客戶端測試類 * @author 孫麗端 * @date 2014年11月28日20:22:51 */ package com.tgb.ejb; import javax.naming.InitialContext; import javax.naming.NamingException; public class UserManagerClient { public static void main(String[] args) throws NamingException { InitialContext context = new InitialContext(); UserManager usermanager = (UserManager)context.lookup("UserManagerBean/remote"); User user = new User(); user.setUsername("孫麗端"); user.setPassword("sunliduan"); usermanager.addUser(user); System.out.print("用戶已成功保存!"); } }</span>

     該類就通過訪問遠程JNDI服務UserManagerBean/remote”,獲得了遠程會話Bean實例usermanager。然后創(chuàng)建了1個實體對象,調(diào)用addUser方法插入該對象。

 

     這樣就是1個完全的利用實體Bean數(shù)據(jù)庫中添加數(shù)據(jù)的1個小demo了。最后用1張圖來表示1下以上6個進程之間的關系:


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 久久精品一区二区三区四区 | 国产成人久久久精品一区二区三区 | 久久se精品一区二区国产 | 伊人久久综合成人网小说 | 中文字幕国产欧美 | 一区二区三区中文 | 成人资源在线观看 | 欧美v片 | 亚洲一区欧美 | 性8sex亚洲区入口 | 欧美在线精品永久免费播放 | 日韩精品综合 | 国产1区2区| 伊人情人综合 | 性欧美videofree另类hd | 在线观看噜噜噜私人影院 | 午夜三级在线 | 欧美精品自拍 | 中文乱码字幕午夜无线观看 | 性xxxxⅹhd成人 | 青青草原国产在线观看 | 亚洲精品一区久久狠狠欧美 | 2020亚洲天堂 | 一级毛片免费一级直接观看 | 高清一级做a爱过程免费视频 | 亚洲永久| 日韩大片免费在线观看 | 永久免费毛片在线播放 | 欧美xxxx做受视频 | 伊人国产在线视频 | 国产免费叼嘿在线观看 | 精品一区二区三区中文 | 午夜秋霞成人理论 | 久久春色 | 日本-区二区三区免费精品 日本人69式视频最长 | 亚洲第一页在线播放 | 亚洲第一视频在线播放 | 欧美成人观看免费全部完小说 | 久久69精品久久久久久hb | 在线欧美一级毛片免费观看 | 久久福利一区二区三区 |