你把 ejb 的类 和 servelet 打在一个包里 试试!!!

解决方案 »

  1.   

    servlet还没打包,但EJB中的类已经解压缩,并放到WEB-INF/Classes/ 下了。
      

  2.   

    流程很简单,就是从servlet上调用远程EJB Server上的一个Session Bean的方法。
      

  3.   

    你的ejb 是什么类型 !!  回话bean 还是 entity bean  或者 是cmp  or bmp ??
      

  4.   

    <%@ page import="ActivityList.* "%>
    <%!
    ActivityHome aHome = null;
    ActivityRemote aRemote = null;
    %>     
    <%  
    try
    {
     ctx = new InitialContext();                   
     ref = ctx.lookup("Activity"); 
     aHome=(ActivityHome)PortableRemoteObject.narrow(ref,ActivityHome.class);
     aRemote = aHome.create();
    }
    catch(Exception e)
    {
                        System.out.println("error")
      return ;
    }
    %>你看看我这个 声明的例子!!!
      

  5.   

    你在servelet 里 调用ejb 和jsp 应该都一样的
      

  6.   

    这个是我的:
        String url="t3://服务器名:7001";
        String user="用户名";
        String pwd="密码";
        java.util.Properties prop=new java.util.Properties();
        prop.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
        prop.put(javax.naming.Context.PROVIDER_URL,url);
        prop.put(javax.naming.Context.SECURITY_PRINCIPAL,user);
        prop.put(javax.naming.Context.SECURITY_CREDENTIALS,pwd);
        try{
        javax.naming.Context ct=new javax.naming.InitialContext(prop);
        Object obj=ct.lookup("EJB");
        EJBHome = (EJBHome) PortableRemoteObject.narrow(obj, EJBHome.class);
        EJB=EJBHome.create();
        EJB.method();当Client和Server在同一台机子上时,正常。当Client远程访问Server时,PortableRemoteObject.narrow就抛出异常了。
     flyshp(天堂雨) ,你的那个JSP页和EJB是放在同一台机器上吧。
      

  7.   

    你把异常信息打出来看看他怎么说用 System.out.println(e.getMessage());
      

  8.   

    呵呵,异常就这个
    java.lang.ClassCastException: Cannot narrow remote object to EJB
    异常就指向
    EJBHome = (EJBHome) PortableRemoteObject.narrow(obj, EJBHome.class)
    这一行
      

  9.   

    更正:
    java.lang.ClassCastException: Cannot narrow remote object to EJBHome
    是这个。
      

  10.   

    这种web 端程序不会出现问题的啊你正常启动server 在客户端 调用 server 上的servelet 访问 ejb他们都是在 server 上执行的啊 .....
      

  11.   

    把所有的接口对应的*.class部署到client端
      

  12.   

    flyshp(天堂雨) 
    我所说的client和server是指 EJB的client和Server
    在我这里,Servlet是Client,而Server是部署了EJB的服务器。
      

  13.   

    bdsc()
    EJB中的类已经解压缩,并放到Servlet的WEB-INF/Classes/ 下了。
    如果是接口找不到,那抛出的就是java.lang.NoClassDefFoundError了
      

  14.   

    client 和 server  的两台机器 都有防火墙么??
      

  15.   

    还有 你的url 中 t3 是weblogic 的内部协议在客户端 是不是应该指定 url 的具体地址啊用 http:// server ip:7001  试试呢??
      

  16.   

    感觉你的这种 web 方式本身就不太合理为什么要把 servlet 放在 client 端呢??
      

  17.   

    client 和 server  的两台机器 都有防火墙么??没有
    --------------------------------还有 你的url 中 t3 是weblogic 的内部协议在客户端 是不是应该指定 url 的具体地址啊用 http:// server ip:7001  试试呢??这个url是用于访问JNDI的,当JDNI和Servlet不在同一台机子上的时候,创建Context需要指定这些连接属性。所以是不能用HTTP协议访问的。
    ------------------------------------------
    感觉你的这种 web 方式本身就不太合理为什么要把 servlet 放在 client 端呢??servlet对于EJB服务器来说,是它的客户端。但从整个WEB应用上看,Servlet仍然是Server端,它是在Web服务器中的。这种结构只是实现了J2EE的分布式应用。
      

  18.   

    检查你的HomeClass有没有在WEB-INF/classes下,注意package路径. 
      

  19.   

    呵呵,终于有人也碰到这个问题了呀。
    你的servlet和ejb是分开运行的,并且servlet并不是运行在weblogic上,对不对?这个weblogic的一个bug,我们公司在开发上也遇到这个问题。因为我们是买了bea的产品,所以就这个问题,我们跟bea的技术支持交涉了多次,起初他们还不承认这是他们的bug,到后来在我们出示的有力证据面前终于承认了,并且单独给我们一个patch,解决了这个问题。
    我们用的是weblogic server 7.0 sp2。其实只要servlet运行在weblogic server里面,不管是不是跟ejb在一起,都是可以的。但是我们公司的servlet,由于种种原因,不能运行在weblogic上,所以就出现了这个问题。我们试了最新的weblogic server 8.0,好像仍然有这个问题,看来BEA是死不悔改了
      

  20.   

    请教各位大侠一个问题:
    如果客户端并非JSP,而是普通的应用程序,并且客户端和服务端(假设服务端EJB部署在WebLogic中)不在一台机器上,请问,这个时候客户端如何加载楼主代码内的"weblogic.jndi.WLInitialContextFactory"(此文件在WebLogic.jar中)?是不是应该把WebLogic.jar拷贝至客户端?