日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何通過遠(yuǎn)程客戶端跨JVM遠(yuǎn)程訪問EJB

對于EJB主要指(SessionBean)大體上有三種客戶端,即本地客戶端,遠(yuǎn)程客戶端和web服務(wù)客戶端。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了秀嶼免費(fèi)建站歡迎大家使用!

 所謂本地客戶端,就是其必須與所要訪問的的Bean在同一個(gè)JVM中,對于遠(yuǎn)程客戶端無此限制,可以在同一個(gè)JVM中,也可以不在同一個(gè)JVM中。Web服務(wù)客戶端也可以以兩種方式來訪問Bean,但僅限于無狀態(tài)會(huì)話Bean,消息驅(qū)動(dòng)Bean則不可以。而對于客戶端的形式,則無要求,可以是web客戶端,普通java應(yīng)用客戶端或其他的Bean。

 本次討論的是EJB的遠(yuǎn)程客戶端,且客戶端與Bean在不同的JVM中的調(diào)用方式。環(huán)境為兩個(gè)xp,MyEclipse6.0,JBoss5。還是簡單的Hello World的例子。不是Hello fancy !呼呼 !

 1.首先寫遠(yuǎn)程接口如下:

package test;

import javax.ejb.Remote;

@Remote
public interface HelloWorldRemote {

 public String sayHello(String name);
}

2.寫B(tài)ean類實(shí)現(xiàn)遠(yuǎn)程接口:

package test;

import javax.ejb.Stateless;


@Stateless
public class HelloWorld implements HelloWorldRemote{

 public String sayHello(String name){
 
  return "Hello ,"+name;
 }
}

3.利用MyEclipse打包,將遠(yuǎn)程接口和Bean類打成helloworld.jar

4.部署EJB,即將helloworld.jar直接copy到D:\jboss5\server\default\deploy下。

5.寫客戶端代碼如下:

package client;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import test.HelloWorldRemote;

 /**
 *
 * javac -d . *.java                              ---編譯命令
 *
 * java -Djava.ext.dirs=D:\clientLib TestHello    ---運(yùn)行命令,

-Djava.ext.dirs=D:\clientLib指定了外部jar包目錄
 *
 *
 * @author rainsunneau
 *
 */

public class TestHello {

 public static void main(String[] args){

  ClassLoader loader = TestHello.class.getClassLoader();
  InputStream in = loader.getResourceAsStream("context-config.properties");
  Properties props = new Properties();
  try {
   props.load(in);
   try {
    InitialContext ctx = new InitialContext(props);
    HelloWorldRemote hello = (HelloWorldRemote)ctx.lookup("HelloWorld/remote");  
    System.out.println(hello.sayHello("fancy!"));
   } catch (NamingException e) {
    e.printStackTrace();
   }
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

 6.創(chuàng)建JNDI配置文件context-config.properties如下:

 java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=192.168.1.108:1099
java.naming.factory.pakgs=org.jboss.naming:org.jnp.interfaces

7.在IDE中直接運(yùn)行客戶端測試程序,輸出如下:

Hello ,fancy!

8.將客戶端程序連同配置文件一同打包,并連同所需jar包,放到另外一臺(tái)xp上測試。

 java -Djava.ext.dirs=D:\clientlib client.TestHello

 結(jié)果拋如下異常:

javax.naming.CommunicationException [java.rmi.ConnectException: Connection refused to host。

根據(jù)前輩的帖子指點(diǎn):

 客戶端程序向服務(wù)端請求一個(gè)對象的時(shí)候,返回的stub對象里面包含了服務(wù)器的hostname,客戶端的后續(xù)操作根據(jù)這個(gè)

 hostname來連接服務(wù)器端。

 解決方式如下:

(1).修改hostname.

        vi /etc/hosts

         將 127.0.0.1 改為真實(shí)地址,如:192.168.100.72。

這樣客戶端就能得到真實(shí)的ip了。

 

(2)在啟動(dòng)jboss時(shí)顯示指定hostname.

       如:nohup ./run.sh --host="192.168.100.72" &

 我用了(2),因?yàn)槲业氖莤p嗎。第一種方式對應(yīng)到windows/system32/drivers/etc/hosts文件,怎么修改都不好用。

 第二種方式可行:啟動(dòng)JBoss命令如下:

run -b192.168.1.108 或 run --host=192.168.1.108。

結(jié)果在另一臺(tái)xp上看到:

Hello ,fancy!

至此終于實(shí)現(xiàn)了跨JVM遠(yuǎn)程訪問EJB。


網(wǎng)站欄目:如何通過遠(yuǎn)程客戶端跨JVM遠(yuǎn)程訪問EJB
標(biāo)題路徑:http://www.dlmjj.cn/article/cdpsphd.html