久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

EJB入門(mén)基礎(chǔ)

 hh3755 2011-07-20
EJB分類(lèi):
1.會(huì)話(huà)bean(session bean)
負(fù)責(zé)與客戶(hù)端交互,是編寫(xiě)業(yè)務(wù)邏輯的地方,,在session bean中操作數(shù)據(jù)庫(kù)有兩種方式:
•通過(guò)jdbc直接操作數(shù)據(jù)庫(kù)(不常用)
•通過(guò)entity bean完成對(duì)數(shù)據(jù)庫(kù)的操作

session bean分為有狀態(tài)(stateful)會(huì)話(huà)bean和無(wú)狀態(tài)(stateless)會(huì)話(huà)bean,。
stateless session bean:
平時(shí)使用的比較多,它的bean實(shí)例可供多個(gè)用戶(hù)使用,,所以性能比stateful session bean性能高,。前一個(gè)用戶(hù)設(shè)置的值有可能被后一個(gè)用戶(hù)所修改,所以無(wú)法保存某個(gè)用戶(hù)設(shè)置的值,,因此是無(wú)狀態(tài)的,。
stateful session bean:
使用的比較少,一個(gè)bean實(shí)例只供一個(gè)用戶(hù)使用,,性能開(kāi)銷(xiāo)大,。用戶(hù)設(shè)置的值不會(huì)被其它用戶(hù)修改,可以正確保存用戶(hù)設(shè)置的值,。典型應(yīng)用是購(gòu)物車(chē),。

2.實(shí)體bean(會(huì)話(huà)bean)
它實(shí)際上數(shù)據(jù)Java持久化規(guī)范(JPA:Java Persistence API)里的技術(shù),JPA的出現(xiàn)主要是為了簡(jiǎn)化現(xiàn)有的持久化開(kāi)發(fā)工作和整合ORM(Object-Relational Mapping)技術(shù),,結(jié)束現(xiàn)在Hibernate/Toplink等ORM框架各自為營(yíng)的局面,。

3.消息驅(qū)動(dòng)bean(message-driven bean)
它是專(zhuān)門(mén)用于異步處理Java消息的組件,具有處理大量并發(fā)消息的能力,。

 
開(kāi)發(fā)EJB依賴(lài)的jar文件在JBOSS_HOME/client下,,通常把該目錄下的所有jar文件引入到工程中。


 
如何開(kāi)發(fā)一個(gè)stateless bean:
接口(遠(yuǎn)程接口或本地接口)
實(shí)現(xiàn)類(lèi)
實(shí)例:
接口
1 package cn.jvpy.ejb3;
2 
3 public interface HelloWorld {
4     public String sayHello(String name);
5 }

實(shí)現(xiàn)

 1 package cn.jvpy.ejb3.impl;
 2 
 3 import javax.ejb.Remote;
 4 import javax.ejb.Stateless;
 5 
 6 import cn.jvpy.ejb3.HelloWorld;
 7 
 8 @Stateless
 9 @Remote(HelloWorld.class)
10 public class HelloWorldBean implements HelloWorld {
11 
12     public String sayHello(String name) {
13         return name + " said: Hello EJB3!";
14     }
15 
16 }

EJB的客戶(hù)端

 1 package cn.jvpy.test;
 2 
 3 import java.util.Properties;
 4 
 5 import javax.naming.InitialContext;
 6 import javax.naming.NamingException;
 7 
 8 import cn.jvpy.ejb3.HelloWorld;
 9 
10 public class EJBClient {
11 
12     public static void main(String[] args) {
13         Properties props = new Properties();
14         // 根據(jù)不同的服務(wù)器有不同的設(shè)置,,下面是JBoss的設(shè)置
15         props.setProperty("java.naming.factory.initial""org.jnp.interfaces.NamingContextFactory");
16         props.setProperty("java.naming.provider.url""localhost:1099");
17         try {
18             InitialContext ctx = new InitialContext(props);
19             HelloWorld helloWorld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");
20             System.out.println(helloWorld.sayHello("Xiao Ming"));
21         } catch (NamingException e) {
22             System.out.println(e.getMessage());
23         }
24     }
25 
26 }


上面EJBClient中對(duì)jndi的設(shè)置是硬編碼設(shè)置的,,也可以通過(guò)jndi.properties文件設(shè)置,并將該文件放到項(xiàng)目的類(lèi)路徑下面(在eclipse中可以放到源文件下,,編譯的時(shí)候會(huì)自動(dòng)編譯進(jìn)類(lèi)路徑),。
如下:
1 java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
2 java.naming.provider.url=localhost:1099
這時(shí)在EJBClient中可以去掉13~16行,只需要如下一行,,InitialContext 會(huì)自動(dòng)在類(lèi)路徑下尋找jndi的配置文件
InitialContext ctx = new InitialContext();

文件分布如下


 

上面的例子是具有remote接口的session bean,。如果不加標(biāo)注(@Remote or @Local),默認(rèn)為本地接口,。


當(dāng)把上面的remote相應(yīng)的改成local的時(shí)候,,程序無(wú)法運(yùn)行,拋出EJBException,,這是因?yàn)榭蛻?hù)端并沒(méi)有發(fā)布到ejb所在的jboss中,,即客戶(hù)端與ejb在不同的JVM內(nèi)。
這時(shí)可以建立一個(gè)web工程,將要測(cè)試的本地接口工程類(lèi)加入到web工程的Java build path中,,將該工程打包成war文件部署到j(luò)boss的deploy目錄下,,然后在jsp頁(yè)面中對(duì)local接口進(jìn)行測(cè)試。
jsp頁(yè)面如下:

工程結(jié)構(gòu):

運(yùn)行結(jié)果:

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多