HelloWorldHome home = (HelloWorld)ctx.lookup("HelloEJB.HelloWorldHome");//这里lookup的是你的Home JNDI name  也就是你写的HelloWorldEJB不是HelloEJB.HelloWorldHome你先把helloworld。jar部署到weblogic然后运行client 还有因为client和你的jar包不在同一个jvm 所以要用远程调用HelloWorldHome home = (HelloWorldHome)javax.rmi.PortableRemoteObject.narrow(ctx.lookup("HelloWorldEJB"),HelloWorldHome.class);

解决方案 »

  1.   

    public class RzEjbTools {    public static Context getInitialContext(){
            Properties properties = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
    properties.put(Context.PROVIDER_URL, "t3://localhost:80");
    properties.put(Context.SECURITY_PRINCIPAL, "system");
    properties.put(Context.SECURITY_CREDENTIALS, "weblogic");        InitialContext initialcontext = null;
            try {
    initialcontext = new InitialContext(properties);
            } catch (NamingException namingexception){        }
            return initialcontext;
        }    public static Object narrow(Class class1, Class class2)
        {
            Context context = getInitialContext();
            Object obj = null;
            try {
                Object obj1 = context.lookup(class1.getName());
                EJBHome ejbhome = (EJBHome)PortableRemoteObject.narrow(obj1, class1);
                Method method = class1.getMethod("create", new Class[0]);
                obj = PortableRemoteObject.narrow(method.invoke(ejbhome, null), class2);
                context.close();
            } catch(Exception e) {        }
            return obj;
        }}
    使用方法:
    TTAllDetailEjb lEjb = (TTAllDetailEjb)RzEjbTools.narrow( TTAllDetailEjbHome.class, TTAllDetailEjb.class);
    mTotalCount = lEjb.getCount(getCmEjbProperty(), mTTAllDetailTSData);
      

  2.   

    先谢谢楼上的两位
    经初步改动,我的client代码如下
    import javax.ejb.*;
    import javax.naming.*;
    import java.rmi.*;
    import java.util.Properties;public class TestHelloEJB
    {
    public static void main(String[] args)
    {
    try 
    {
         Context ctx = getInitialContext();
         HelloWorldHome home = (HelloWorldHome)javax.rmi.PortableRemoteObject.narrow
         (ctx.lookup("HelloWorldEJB"),HelloWorldHome.class);
      
       
         System.out.println("Creating Demo\n");
         HelloWorld hw = home.create();
      
         System.out.println("The result is " + hw.HelloWorld());
     
        }
        catch (Exception e) 
        {
          System.out.println(" => Error <=");
        }
        
    }

    static String user = "system";
    static String password = "88888888";
    static String url = "t3://172.16.5.70:7001";

    static public Context getInitialContext() throws Exception 
    {
        Properties p = new Properties();
        p.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.T3InitialContextFactory");
        p.put(Context.PROVIDER_URL, url);
        p.put(Context.SECURITY_PRINCIPAL, user);
        p.put(Context.SECURITY_CREDENTIALS, password);
        
        InitialContext intialcontext = null;
            try 
            {
    initialcontext = new InitialContext(p);
            } catch (NamingException namingexception){}
                 
        return intialcontext;
      }
    }我的HelloWorld.jar也已经部署好了
    现在我启动WebLogic6.1,再编译,仍然出错:--------------------Configuration: TestHelloEJB - j2sdk1.4.1_02 <Default>--------------------
    D:\work\EJB\TestHelloEJB\TestHelloEJB.java:28: cannot resolve symbol
    symbol  : class HelloWorldHome 
    location: class TestHelloEJB
          HelloWorldHome home = (HelloWorldHome)javax.rmi.PortableRemoteObject.narrow
                  ^
    D:\work\EJB\TestHelloEJB\TestHelloEJB.java:28: cannot resolve symbol
    symbol  : class HelloWorldHome 
    location: class TestHelloEJB
          HelloWorldHome home = (HelloWorldHome)javax.rmi.PortableRemoteObject.narrow
                                         ^
    D:\work\EJB\TestHelloEJB\TestHelloEJB.java:29: cannot resolve symbol
    symbol  : class HelloWorldHome 
    location: class TestHelloEJB
          (ctx.lookup("HelloWorldEJB"),HelloWorldHome.class);
                                               ^
    D:\work\EJB\TestHelloEJB\TestHelloEJB.java:35: cannot resolve symbol
    symbol  : class HelloWorld 
    location: class TestHelloEJB
         HelloWorld hw = home.create();
                 ^
    D:\work\EJB\TestHelloEJB\TestHelloEJB.java:64: cannot resolve symbol
    symbol  : variable initialcontext 
    location: class TestHelloEJB
    initialcontext = new InitialContext(p);
                            ^
    5 errorsProcess completed.
    请问会不会是WebLogic6.1的问题?
    我把它装好后就没配置过。
      

  3.   

    建议看一下WEBLOGIC自带的EJB例子,非常清楚。
      

  4.   

    我觉得用JBuilder+weblogic,或者JBuilder+JBoss
    学起来比较方便点一方面,JBuilder生成EJB比较方便
    还有厂商特性,比如weblogic有很多weblogic-ejb-jar.xml 之类的所以用JBuilder,可以自动生成这些,
    然后再去学会方便很多
      

  5.   

    你没有包含进你的HelloWorldHome 和 HelloWorld 到classpath你的包名是debug
    你的testHelloWorld没有加package debug 当然找不到。。或者 import debug.*;  不过要把HelloWorldHome 和 HelloWorld放进classpath
      

  6.   

    谢谢 getdown(我就是这么拽) 1,你没有包含进你的HelloWorldHome 和 HelloWorld 到classpath
    是指要除了用WebLogic的Console install一个ejb外,还要在有WebLogic的那台机器上设置classpath对吗?
    2,import debug.*;  
    是要在client的源代码里加上吗?
    也就是说编译的时候必须把client的程序和ejb的程序放在一起编译?
    你能详细的说一下吗?万分感谢
      

  7.   

    呵呵 java的命名规范要看一下
    你的客户端我想肯定放在你jb项目的debug 目录下面而你的jb  classpath 自动指向你的项目目录debug 所以你的TestHelloEJB 应该在开始的地方写上package debug;
    就可以了 这个和你的ejb没有任何关系 
    只是你的这个类文件没有通过编译 在开始的地方放上上面那句 或者干脆把代码拷出来 删掉
    用jb new 一个出来 第一行package 。。不要动 其他全部覆盖