日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EJB通过ANT提高EJB应用程序的开发效率、无状态发展本地接口bean、开发状态bean...

發(fā)布時(shí)間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EJB通过ANT提高EJB应用程序的开发效率、无状态发展本地接口bean、开发状态bean... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

該jboss集成到eclipse

關(guān)掉Jboss控制臺(tái)新聞Ctrl+c,在MyEclipse→Servers→Jboss可配置JBoss。


通過ANT提高EJB應(yīng)用的開發(fā)效率

在HelloWorld 增加ANT,右擊項(xiàng)目新建xml:build.xml,右擊打開方式選擇Ant ..

相應(yīng)用進(jìn)行編譯、打包、公布、解公布

?

<?

xml version="1.0" encoding="UTF-8"?

> <!--basedirz項(xiàng)目所在路徑,.代表在build.xml的所在路徑--> <project name="HelloWorld" basedir="."> <property name="src.dir" value="${basedir}\src"></property> <!--指的是系統(tǒng)變量--> <property environment="env"></property> <property name="jboss.home" value="${env.JBOSS_HOME}"></property> <!--用于指定眼下JBoss使用的配置項(xiàng)--> <property name="jboss.server.config" value="default"></property> <!--用于編譯源文件class類存放的文件夾--> <property name="build.dir" value="${basedir}\build"></property> <!--ejb依賴的jar文件--> <path id="build.classpath"> <fileset dir="${jboss.home}\client"> <include name="*.jar"/> </fileset> <pathelement location="${build.dir}"/> </path> <target name="prepare"> <delete dir="${build.dir}"></delete> <mkdir dir="${build.dir}"></mkdir> </target> <target name="compile" depends="prepare" description="編譯"> <!--對源文件進(jìn)行編譯。destdir編譯后class存放文件夾--> <javac srcdir="${src.dir}" destdir="${build.dir}"> <!--編譯依賴的jar文件--> <classpath refid="build.classpath"></classpath> </javac> </target> <target name="EJBjar" depends="compile" description="創(chuàng)建EJB公布包"> <!--${ant.project.name}就是上面的name HelloWorld--> <jar jarfile="${basedir}\${ant.project.name}.jar"> <fileset dir="${build.dir}" > <include name="**/*.class"/> </fileset> </jar> </target> <target name="deploy" depends="EJBjar" description="公布EJB"> <copy file="${basedir}\${ant.project.name}.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy"></copy> </target> <target name="undeploy" description="卸載ejb"> <delete file="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.jar"></delete> </target> </project>

?

公布:在servers視圖啟動(dòng)Jboss。然后在build.xml的大綱視圖右擊deploy→run as → Ant ..

(發(fā)現(xiàn)編碼問題我項(xiàng)目是GBK,把項(xiàng)目改成UTF-8就可以);

?

卸載EJB,要先停止Jboss在運(yùn)行undeploy就可以;

開發(fā)具有本地接口的無狀態(tài)bean

???????? 之前我們介紹過遠(yuǎn)程接口。通過一個(gè)遠(yuǎn)程接口調(diào)用EJB的過程。首先client須要與EJB建立socket通信。在通信管道上它們須要來回發(fā)送IIOP協(xié)議信息,由于數(shù)據(jù)要在網(wǎng)絡(luò)進(jìn)行傳輸,存放數(shù)據(jù)的Java對象必須要進(jìn)行序列化。在這個(gè)過程。有網(wǎng)絡(luò)通信的開銷、協(xié)議解析的開銷、對象序列化的開銷等。由于EJB是分布式技術(shù)。它同意client與EJB應(yīng)用在不同機(jī)器上。所以這些性能開銷也是必定的。

???????? 可是在實(shí)際開發(fā)中,client與EJB應(yīng)用執(zhí)行在同一個(gè)JBoss中。

這時(shí)候client訪問EJB是否有必要走上面的網(wǎng)絡(luò)通信呢?據(jù)我們所知,這時(shí)候client與EJB是在同一個(gè)JVM內(nèi),他們之間全然能夠通過內(nèi)存進(jìn)行交互,這樣就能夠避免網(wǎng)絡(luò)通信的性能開銷。既然我們都想到了這一點(diǎn),EJB專家組也想到了這一點(diǎn),所以引入了本地接口。通過本地接口調(diào)用EJB,直接在內(nèi)存中交互。這樣就能避免因網(wǎng)絡(luò)通信所造成的各種性能開銷。可是有一點(diǎn)。大家必須注意,僅僅有client與EJB應(yīng)用在同一個(gè)JVM內(nèi)執(zhí)行的時(shí)候,我們才干調(diào)用本地接口,否則僅僅能調(diào)用遠(yuǎn)程接口。

僅僅要client與EJB公布在同一個(gè)JBoss內(nèi)。我們就覺得他們是在同一個(gè)JVM。

????????

?

client和EJB部署到同機(jī)器上面

將HelloWorldBean指定為本地接口(@Remote改動(dòng)為@Local):

@Stateless

@Local(HelloWorld.class)

public classHelloWorldBean implementsHelloWorld {

?

本地接口的無狀態(tài)bean已經(jīng)被開發(fā)出來了。

通過Ant的deploy部署到EJB中。

?

新建一個(gè)web Project 做為EJB的client。而且部署到Jboss中,這樣client和EJB就在同一個(gè)jvm中了。

新建Web Projcet:EJBClient,部署到Jboss。

在用jsp調(diào)用EJB。新建test.jsp,將編碼格式換成utf-8,這樣就能夠通過本地接口訪問EJB了(把HelloWorld項(xiàng)目引用進(jìn)來:右擊項(xiàng)目Build Path→Conf…→Projects→add):

?

<%@ pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>

<%@ pageimport="javax.naming.*,cn.hqu.ejb3.*"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

?

<!DOCTYPEHTMLPUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">

<html>

? <head>

??? <basehref="<%=basePath%>">

???

??? <title>My JSP'test.jsp' starting page</title>

???

??? <metahttp-equiv="pragma"content="no-cache">

??? <metahttp-equiv="cache-control"content="no-cache">

??? <metahttp-equiv="expires"content="0">???

??? <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">

??? <metahttp-equiv="description"content="This is my page">

??? <!--

??? <linkrel="stylesheet" type="text/css"href="styles.css">

??? -->

?

? </head>

?

? <body>

????? <%

?????? try {

?????????? InitialContextctx = new InitialContext();

?????????? HelloWorldhelloworld = (HelloWorld) ctx

????????????????? .lookup("HelloWorldBean/local");

?????????? out.println(helloworld.sayHello("本地的蘇志達(dá)"));

?????? }catch (NamingException e) {

?????????? e.printStackTrace();

?????? }

??? %>

? </body>

</html>

?

client應(yīng)用開發(fā)完了。導(dǎo)出war文件,將war文件復(fù)制到Jboss的公布文件夾下,看控制臺(tái)發(fā)現(xiàn)應(yīng)用公布成功了(能夠通過MyEclipse部署項(xiàng)目到Jboss,啟動(dòng)Jboss就可以公布)

http://localhost:8080/EJBClient/test.jsp

?

通過本地接口調(diào)用EJB成功了。web應(yīng)用和EJB部署到同一個(gè)Jboss中的。在同一個(gè)jvm中。能夠進(jìn)行訪問。

?

client和EJB部署到不同機(jī)器上面。

新建一個(gè)本地接口,在HelloWorld項(xiàng)目新建HelloWorldLocal接口。繼承遠(yuǎn)程接口HelloWorld。

HelloWorldBean實(shí)現(xiàn)HelloWorldLocal和HelloWorld接口。

?

@Stateless

@Remote(HelloWorld.class)

@Local(HelloWorldLocal.class)

public class HelloWorldBean implements HelloWorld,HelloWorldLocal {

??? @Override

??? public StringsayHello(String name) {

??????? return name+"說:你好!

";

??? }

}

?

部署同一個(gè)機(jī)器上的時(shí)候優(yōu)先調(diào)用本地,不同機(jī)器上我們僅僅能通過遠(yuǎn)程接口訪問。

本地調(diào)用:部署啟動(dòng)JBoss執(zhí)行http://localhost:8080/EJBClient/test.jsp

遠(yuǎn)程調(diào)用:

將HelloWorld的EJBClient類改為遠(yuǎn)程接口:

HelloWorldhelloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");

部署公布:執(zhí)行Ant deploy,啟動(dòng)Jboss執(zhí)行main方法。

在client通過遠(yuǎn)程接口調(diào)用EJB,如今他們是在不同JVM內(nèi)的,僅僅能通過遠(yuǎn)程接口訪問,執(zhí)行EJBCLient的mian方法。成功訪問到。

?

在實(shí)際應(yīng)用中我們最好把本地接口和遠(yuǎn)程借口都實(shí)現(xiàn)出來。主要是能夠解決能夠公布在同一個(gè)Jboss或者不同Jboss都能夠使用。

開發(fā)有狀態(tài)bean

僅僅須要改動(dòng)@Stateless為@Stateful就能夠標(biāo)注為有狀態(tài)bean

@Stateful

@Remote(HelloWorld.class)

@Local(HelloWorldLocal.class)

public class HelloWorldBean implementsHelloWorld,HelloWorldLocal {

??? @Override

??? public StringsayHello(String name) {

??????? return name+"說:你好。";

??? }

}

?

Ant deploy部署

?

有狀態(tài)和無狀態(tài)在代碼上需然區(qū)別不大。可是採用對bean的管理的技術(shù)的不一樣的.

Bean實(shí)例的兩種管理技術(shù)

1.無狀態(tài)bean使用實(shí)例池技術(shù)管理bean

2.有狀態(tài)bean使用激活(activation)管理bean

???????? 每一個(gè)用戶都有自己的Bean實(shí)例,相當(dāng)于有多少個(gè)用戶就有多少個(gè)Bean實(shí)例為之服務(wù)。假設(shè)不採取不論什么機(jī)制,這樣必定會(huì)導(dǎo)致server資源嚴(yán)重消耗,最后落個(gè)down機(jī)罷工。

為了解決問題。EJB引入了激活機(jī)系統(tǒng)。該機(jī)構(gòu)的原理來實(shí)現(xiàn),這是,在EJBserver如果有必要,節(jié)約資源。從內(nèi)存中恢復(fù)bean示例。將舉行它的會(huì)話狀態(tài)序列化到磁盤,他們占用內(nèi)存釋放。如果此時(shí)client正確EJB再次發(fā)起請求,EJB再次實(shí)例化一個(gè)容器Bean示例,并從硬盤的狀態(tài)恢復(fù)在先前。

碼:http://pan.baidu.com/s/1gdGIi8V

轉(zhuǎn)載于:https://www.cnblogs.com/yxwkf/p/5042703.html

總結(jié)

以上是生活随笔為你收集整理的EJB通过ANT提高EJB应用程序的开发效率、无状态发展本地接口bean、开发状态bean...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。