当前位置:  技术问答>java相关

怎样调用EJB的问题

    来源: 互联网  发布时间:2015-02-23

    本文导语:  EJB和clien是在同一台机上当然是没有问题啦,但要是不是同一个机子上呢? 比如说,人家在北京部署了一个EJB,就叫EJB1吧,我在广州应该怎么调用它呢?假设我知道它的Home接口和远程接口的方法。 这边写程序调用...

EJB和clien是在同一台机上当然是没有问题啦,但要是不是同一个机子上呢?

比如说,人家在北京部署了一个EJB,就叫EJB1吧,我在广州应该怎么调用它呢?假设我知道它的Home接口和远程接口的方法。

这边写程序调用的时候是不是要有它的class呢?

要是得人家把class给我我才能用的话……我干嘛还这么远来调用它的BEAN?我拿它的class本地部署一个来用不就得了?还要分布式做什么?

要是不需要他们那边的class的话,又应该怎么调用呢?

|
不需要有代码,但调用者需要有rmi存根(定义了接口,部署时获得),然后通过配置ejb引用来访问。

欢迎光临Java,J2EE论坛( http://letsjava.yeah.net )。 
http://www.minij2ee.com/ 

|
EJB1Home类是肯定要有的,没有的话,就无法create一个EJB的实例,同样EJB的Remote Inteface类也要有,不然就不知道可以用哪些方法了。具体的代码sun的j2eetoure包中有,weblogic中也有例子。

这里提供一个简单的例子,是我刚写好的,已经测试通过:
/*
 * HelloWorldHome.java
 *
 * Created on 2001年11月13日, 下午9:46
 */

package testejb;

/**
 *
 * @author  hcxing
 * @version 
 */
public interface HelloWorldHome extends javax.ejb.EJBHome {

    HelloWorld create() throws java.rmi.RemoteException, javax.ejb.CreateException;
    
}

/*
 * HelloWorld.java
 *
 * Created on 2001年11月13日, 下午5:27
 */

package testejb;

/**
 *
 * @author  hcxing
 * @version 
 */
public interface HelloWorld extends javax.ejb.EJBObject {

    public String sayHello() throws java.rmi.RemoteException;
    
}

/*
 * HelloWorldEJB.java
 *
 * Created on 2001年11月13日, 下午9:50
 */

package testejb;

/**
 *
 * @author  hcxing
 * @version 
 */
public class HelloWorldEJB implements javax.ejb.SessionBean {

    /** Creates new HelloWorldEJB */
    public HelloWorldEJB() {
    }

    public void ejbActivate() throws javax.ejb.EJBException, java.rmi.RemoteException {
    }
    
    public void ejbPassivate() throws javax.ejb.EJBException, java.rmi.RemoteException {
    }
    
    public void ejbRemove() throws javax.ejb.EJBException, java.rmi.RemoteException {
    }
    
    public void setSessionContext(javax.ejb.SessionContext sessionContext) throws javax.ejb.EJBException, java.rmi.RemoteException {
    }
    
    public void ejbCreate() throws java.rmi.RemoteException, javax.ejb.CreateException{
    }
    
    public String sayHello(){
        return "Hello World!";
    }
    
}

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;

import java.util.Hashtable;

import testejb.HelloWorld;
import testejb.HelloWorldHome;

public class HelloWorldClient {

   public static void main(String[] args) {
        Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, 
     "weblogic.jndi.WLInitialContextFactory");

//Context ctx = new InitialContext(env);


       try {
           Context initial = new InitialContext(env);
           //Context myEnv = (Context)initial.lookup("java:comp/env");
           Object objref = initial.lookup("testejb/HelloWorldHome");

           HelloWorldHome home = 
               (HelloWorldHome)PortableRemoteObject.narrow(objref, 
                                            HelloWorldHome.class);

           HelloWorld currencyHelloWorld = home.create();

   System.out.println(currencyHelloWorld.sayHello());
           System.exit(0);

       } catch (Exception ex) {
           System.err.println("Caught an unexpected exception!");
           ex.printStackTrace();
       }
   } 



|

明确的说,要!

上面的兄弟不是说了,要接口和RMI存根吗?

你的Home和Remote 接口的class文件是要的,只是不需要Bean的class文件,这里定义了你的EJB的实现业务代码。


|
你通过JNDI查找对象,就是你上文的那个OBJ,至于JNDI怎么找到你所需的对象,看看JDNI文档吧,实际上你得到那个context时,就已经定义了JNDI服务了。

|
访问ejb的client不需要有ejb的业务逻辑代码,但必须要有ejb的接口和rmi存根,否则无法调用。类似corba和dcom。

欢迎光临Java,J2EE论坛( http://letsjava.yeah.net )。 
http://www.minij2ee.com/ 

|
当然,本地机必须要有你调用的home接口类,及object类,而bean类则不需要。

|
jb5会自动生成这个,好象在tools菜单里面

|
这个问题很复杂得,RMI就起到这个作用,你不需要了解到底是怎么调用的(如果你不关心的话)。当然你腰知道在那个EJB1里面有些什么东西。
在你的客户端肯定要用到Lookup()类似的方法(通过EJB1所在的应用服务器),他会找到你要用的EJB1的,当让EJB1部署的地方最好是在“北京”了

    
 
 

您可能感兴趣的文章:

  • 为什么我的BEAN 在WIN2000中调用没有问题,但在LINUX中调用有问题
  • 关于jsp调用javabean的问题!调用是成功了,但是有小问题!
  • 在jbuilder中调用一bean连接数据库没有问题,在jsp中调用就连接不上数据库
  • 关于《Unix网络编程》在ubuntu 8.04下运行的问题,服务器端阻塞在accept调用,客户端阻塞在connect调用,导致连接失败
  • (菜鸟飞飞)问个关于软中断和系统调用的问题
  • 关于Linux系统调用的问题!
  • 请教一个定时调用问题
  • 由于问题变化了,所以重新个贴子,是关于线程间函数调用及串口接收数据的问题?
  • 急,急,急-----------ejb部署调用问题????
  • so动态库相互调用问题?
  • C语言中函数声明与调用问题
  • 关于RPC远程过程调用的问题
  • cgi 中调用bash脚本问题?急 急 急
  • linux系统调用问题
  • 在*.so 中调用*.ko的函数的问题
  • linux系统调用表修改问题
  • 问一个很奇怪的线程调用的问题
  • 频繁调用popen的问题
  • JSP调用EJB的问题,急!急!急!
  • java调用存储过程问题。
  • 我的APPLET在Jbuilder5中,可以调用EJB对象,但是移植到网页上却不能调用EJB对象!是何缘故,值得研究!
  • EJB应用及JavaBean调用EJB
  • EJB新手提问,同一服务器(就是同一容器吧)内EJB之间调用如何处理?
  • 快来救命啊。EJB调用EJB问题。深度郁闷,高分相送。
  • weblogic下,session EJB中调用session EJB的问题
  • EJB内部调用问题
  • 救助,关于EJB调用EJB的问题,急急急!!
  • JSP调用EJB如何实现耦合度最底
  • 我已昏了。快来帮帮我,关于EJB的调用问题
  • 客户端如何调用EJB?
  • 调用ejb的时候一定要把ejb的jar包放到classpath里面吗?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在Python中使用SWIG调用C和C++程序
  • Linux添加系统调用时如何调用C语言库函数
  • sessionbean调用entitybean的时候还需要像Client一样远程调用对象吗??
  • system()调用 与 ioctl()调用
  • linux中为什么系统调用比普通函数调用更费时间?
  • 如何在LINUX下用一个普通文件调用一个自己编写的调用系统的文件
  • 可不可以用java调用其他语言的编译结果?(好象asp调用com那样)
  • 为什么守护进程调用调用getlogin会失败呢?
  • 用RMI进行远程对象调用的时候,可不可以实现多个调用远程对象的并发操作
  • ioctl中能不能调用generic_file_read呀?我一调用就不动了
  • LINUX下系统调用是不能中断的,要怎么改造成可以中断系统调用?
  • 请问用javaScript或vbScript可否调用页面上Applet的public函数?如何调用?
  • 请问在jsp中调用外部的类,与jsp调用javabean有何区别??
  • 调用数学函数,需要调用哪个函数库?
  • 调用system(“命令”)和函数调用之间有什么不同?效率?
  • 请问如何在Java中调用一个VB所写的DLL?如何调用这个Dll的方法?如何取得和设置这个Dll的属性值?谢谢!
  • 脚本1调用脚本2,脚本2必须输入回车,如何在调用过程中自动输入回车
  • 请问linux中的系统调用号是如何跟系统调用表对应起来的
  • 新手:Linux下使用第三方C库(openssl),是调用.so文件还是直接调用.h文件?
  • 在Seesion bean中的一个方法调用Entity Bean调用错误,在线等待!!!!!!!
  • java调用sh脚本遇到export命令会卡住,sh不能调用子sh


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3