用weblogic 7  server的话,如果是在非局域网里面访问这个ejb的话,那么要修改配置的
具体配置方法可以去bea.com看administrator的文档

解决方案 »

  1.   

    跟着下面的步聚去写吧
    http://www-900.ibm.com/websphere/techjournal/0110_wosnick/index_eng.shtml
      

  2.   

    在局域网内。
    我的客户端程序其实是想通过服务器上的消息驱动bena穿点数据,可是就是没法初始上下文
      

  3.   

    weblogic:Properties p = new Properties();
    p.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
    p.put(Context.PROVIDER_URL,url);
    //连接服务器的代码,针对不同的中间件,不同
    Context CalDueValueInterface=new InitialContext(p);
    Object obj=CalDueValueInterface.lookup(lus);
    CalDueHome home=(CalDueHome)PortableRemoteObject.narrow(obj,CalDueHome.class);
    CalDue se = (CalDue)home.create();webshpere:
     InitialContext ic = new InitialContext();
             Object objRef = ic.lookup("java:comp/env/ejb/TheConverter");
             ConverterHome home = (ConverterHome)PortableRemoteObject.narrow(objRef, ConverterHome.class);
             converter = home.create();
      

  4.   

    楼上的,这个方法不行,Application在客户机上,根本就没法初始化上下文,我曾经试着该了客户机的jre的包,最后给我报了个空指针错误,密茫!!
      

  5.   

    大家如果有兴趣的话,可以写个很简单的Application,调用服务器上的ejb,不要在开发环境下运行哦,用jre的java指令来运行,但愿是我错了。
      

  6.   

    下面不知是不是你说的意思:
      private Context getInitialContext() throws Exception
      {
        String url = "t3://bigbear:7001";      //bigbear:安装weblogic服务器
        String user = null;
        String password = null;
        Properties properties = null;
        try
        {
          properties = new Properties();
          properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
          properties.put(Context.PROVIDER_URL, url);
          if (user != null)
          {
            properties.put(Context.SECURITY_PRINCIPAL, user);
            properties.put(Context.SECURITY_CREDENTIALS, password == null ? "" : password);
          }      return new InitialContext(properties);
        }
        catch(Exception e)
        {
          System.out.println("Unable to connect to WebLogic server at " + url);
          System.out.println("Please make sure that the server is running.");
          throw e;
        }
      

  7.   

    楼上的方法我用过,行不通,这种声明的方法只能在Application同在服务器上时候才能正确。
      

  8.   

    String url = "t3://ip:7001";
    ip写你的weblogic服务器难道不行吗?
      

  9.   

    TO forjie(风信子) :
       这种方法好象只能用于客户端程序部署在服务器上,由客户机器调用的情况。
       我现在是想在客户机器上运行一个applocation(application存在客户机器上),这时我认为需要对客户机器上的jre进行特殊的处理,各位觉得呢?
      

  10.   

    你的客户机上有这个吗?
    weblogic.jndi.WLInitialContextFactory
      

  11.   

    你现在的客户机光后JRE有啥用呢..
    客户机根本没有提供上下文环境的包
    .所以你把weblogic.jar(可能还需其它包)都
    弄到客户机上,一定可以..然后再慢慢精简.一定行的---------------------->
      

  12.   

    to 楼上的:
       有这个类,我已经把它加入到rt.jar中了
      

  13.   

    to realplay(代码录入员) :
      我已经这样做了,现在报weblogic.i18tools.中一个类中的loadProps()方法抛出了空指针错误(具体类名我忘记了)
      

  14.   

    我也遇到这个问题是在jms中,我认为是jndi查找的问题。
    光设置Context.INITIAL_CONTEXT_FACTORY和Context.PROVIDER_URL好像不行因为查到的是一个引用所以必然要对引用的实现不如rmi和iiop等所以好想要设置别的属性。
    十分关注。
      

  15.   

    楼上的:
       患难兄弟,我也是为了调用服务器上的一个消息驱动bean,你后来是怎么解决的?
      

  16.   

    这个问题应该不难啊,明天我回公司试一下.
    肯定是缺少某些包或配置不对,
    APPLICATION和WEBLOGIC是不同的独立进程跑的.
    可以共享的就只是那些包,
    所以,在开发环境上能跑的话,只要CLASSPATH包含了足够的类库,只要把这些类库移到另一台机上,肯定是可以跑的.
    因此根本上与你的开发环境的WEBLOGIC配置无关
    只可能是某些包缺少或是应用程序的问题
    本来WEBLOGIC就是在JDK131上跑起来的.怎么可能你把APPLICATION独立离开发环境就跑不了.
    那是不可能的.
      

  17.   

    我就做过一个通过jms发送异步消息的APPLICATION,与你讲的程序功能差不多,它就是不在WEBLOGIC欢境下跑的.
    当应用服务器接到消息就用messagedriverbean来出来消息
      

  18.   

    可惜太晚了,要是明天我相信我可以给答案--我知道有些情况下就是没法子初始化上下文的,和有没有相关的.jar文件没有关系。
      

  19.   

    帮着up一下,我也很想知道到底怎么了,难道非的按特定的厂商实现发才可以吗?还是有propertiles要配置。
      

  20.   

    http://www-900.ibm.com/websphere/techjournal/0110_wosnick/index_eng.shtml
      

  21.   

    import java.rmi.*;
    import javax.rmi.*;
    import javax.naming.*;
    import java.util.*;//Äã×Ô¼ºµÄEJB½Ó¿Ú (TimeFunctions)
    import sbtutorial.*;public class EjbClient{

        String url = "t3://192.168.0.67:9001"; 
        String user = null;
        String password = null;
        Properties h = new Properties();    public Context getInitialContext(String url,String user,String password) throws NamingException {
            try{
               h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
               h.put(Context.PROVIDER_URL,url);
               //h.put(Context.SECURITY_PRINCIPAL,user);
               //h.put(Context.SECURITY_CREDENTIALS,password);
               return new InitialContext(h);
            }catch(NamingException ne)
            {
                throw ne;
            }
        }
        
        public void EjbClient(){             
        }


    public static void main(String[] args) {
    EjbClient ejbClient = new EjbClient();  
    ejbClient.start();                     
    }   private void start(){
       
           try{
               Context initial = getInitialContext(url,user,password);
               Object objref = initial.lookup("TimeFunctions");
               TimeFunctionsHome tfHome = (TimeFunctionsHome)PortableRemoteObject.narrow(objref,TimeFunctionsHome.class);
               TimeFunctions tfEjb = tfHome.create();
               System.out.println(tfEjb.getTime());
           }catch(Exception e)
           {
               e.printStackTrace();
               System.out.println(e.getMessage());
           }
       
       
       
       
       
       }
       
       
       
    }就这样就可以了,我刚测试完,不信我把EJB和上面的源码发给你
    在客户端调用EJB有两个条件1.必须有JDK(JRE)
    2.必需要第三方(这里是WEBLOGIC)提供的JNDI上下文环境(weblogic.jndi.WLInitialContextFactory)
    3.javax.naming
    4.java.rmi,javax.rmi是捕获错误的类包如果你用jms,则还需要包含
    javax.jms.*;真是不知你是怎么试的,只要有上面的东西,就一定能行...快把1000分给我吧.............
      

  22.   

    来晚了,我在java.sun.com的forum上问过类似问题,下面是一则回复:Context.PROVIDER_URL is required only when you have have to connect from remote location.If your code using JNDI is on same machine, that has the application server, then you donot need to specify PROVIDER_URL or INITIAL_CONTEXT_FACTORY.
    You can get the InitialContext using the default constructor as-
    Context ctx = new InitialContext();else you need to specify both of these.
    帖子的地址:
    http://forum.java.sun.com/thread.jsp?thread=198336&forum=51&message=656557另外,那个Context.INITIAL_CONTEXT_FACTORY和Context.INITIAL_CONTEXT_FACTORY要视application server而定的,比如我用的是JBoss3.0.2,我的jndi代码如下:
    Properties env = System.getProperties();
    env.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
    env.put("java.naming.provider.url","192.168.0.168:1099");
    env.put("java.naming.factory.url.pkgs","org.jboss.naming.:org.jnp.interfaces");
    InitialContext context = new InitialContext(env);
    Object obj = context.lookup("UserRemote");
    你的是什么?realplay(代码录入员) 的回复我认为是详细和正确的,请仔细参考
    btw,你最好贴出exception stacktrace让大家看看
      

  23.   

    谢谢各位捧场,我用的就是各位所提到的初始化上下文的方法,客户机的JRE中也包含了初始化上下文所需的类库,可是报的错是:
    java.lang.NullPointerException:
      at weblogic.i18tools.i10LookUp.loadProps(.....)
    ................................
    这到底是为什么?
      

  24.   

    to  chenyuan_tongji(codeguru):
       我们遇到的问题不一样,我最初遇到的异常是说客户机器上没有WLInitialContext类,现在这个异常已经解决了,反倒出了个空指针
      

  25.   

    是不是耍人的嘛。。我怎么没遇到这种问题呢。。在一台linux的客户机连接WEBLOGIC应用服务器,而且向它发送JMS,都没问题,不知你咋搞的。。
      

  26.   

    >java.lang.NullPointerException:
    >  at weblogic.i18tools.i10LookUp.loadProps(.....)
    >................................
    >这到底是为什么?to liukuncn(咖啡泡JAVA):weblogic我不是很熟,但是从你的exception和我的常识分析:你注意到i18tools了没有,这个就是internationalization。这个exception我理解为你的weblogic试图加载i18n资源,比如最常见的字符串资源,但是没有找到。你的ejb或者web applicaiton等等,有没有哪里用到了多语言支持?抱歉,由于你的exception stack strace给的不全,加上我能力有限,目前只能给你这个参考。
      

  27.   

    看看chenyuan_tongji(codeguru) 的贴子,获益匪浅。
      

  28.   

    就按realplay(代码录入员)說的去做,我這就是這麼做的沒生麼問題
      

  29.   

    高手如云,小弟初来乍到,功力微薄,能做的只能是帮你 Up了!
    21cnfox
      

  30.   

    高手如云,小弟初来乍到,功力微薄,能做的只能是帮你 Up了!
    21cnfox
      

  31.   

    重新安裝你的客戶機上的jdk,並將weblogic.jar 等考到客戶機上
    set CLASSPATH 試試看,因該可以解決的
      

  32.   

    各位的方法我曾经都试过,虽然现在也没有解决,但还是要感谢各位。
    Thanks a lot!
    结贴。