各位高人:小弟初学j2ee,希望得到你们的指导,谢谢!
  我 用WebLogic服务器器发布了一个ejb,要从另外一个java工程访问之。我打出了jndi的名称空间似乎也存在这个ejb。代码及结果如下:
代码:
package org.eclipseguide.hello;
import javax.naming.InitialContext;
import mor.smis.ejb.Inf_ControllerLocal;
import mor.smis.ejb.fetchDataLocal;
import mor.smis.ejb.fetchDataRemote;
import java.util.Hashtable;
import java.util.Properties;   
import javax.naming.Context;   
import javax.naming.InitialContext; 
import javax.naming.*;
public class HelloWorld {
/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
 String url = "t3://localhost:7001";         
  Context ctx =null;
  Properties prop = null;  
  try {     
  
//   Hashtable   ht   =   new   Hashtable();   
//   ht.put(Context.INITIAL_CONTEXT_FACTORY,   
//   "weblogic.jndi.WLInitialContextFactory");   
//   ht.put(Context.PROVIDER_URL,   
//   "t3://localhost:7001");   
//   Context context = new InitialContext(ht);     
   prop = new Properties();   
   prop.put(Context.INITIAL_CONTEXT_FACTORY,   
     "weblogic.jndi.WLInitialContextFactory");   
   prop.put(Context.PROVIDER_URL, url);   
   Context context = new InitialContext(prop);     
   ctx = new InitialContext(prop);      
listContext(ctx,"");
System.out.println( ctx.lookup("java:comp/env/ejb/FectchData"));

}catch(NamingException ex)
{
System.out.println("4444  "+ex.toString());
System.exit(1);
};
}

private static void listContext(Context ctx,String indent)
{
try{
NamingEnumeration list =ctx.listBindings("");
while(list.hasMore())
{
Binding item =(Binding)list.next();
String cName= item.getClassName();
String name= item.getName();
System.out.println(indent
+cName+" "+name);
Object o=item.getObject();
if(o instanceof javax.naming.Context)
listContext((Context )o, indent+" ");
}
}catch(NamingException ex)
{
System.out.println("dddddd"+ex);
}
}}运行结果:
weblogic.corba.j2ee.naming.ContextImpl Gd_Controller#mor
 weblogic.corba.j2ee.naming.ContextImpl smis
  weblogic.corba.j2ee.naming.ContextImpl ejb
   $Proxy0 Gd_ControllerRemote
weblogic.corba.j2ee.naming.ContextImpl weblogic
ddddddjavax.naming.NamingException: Exception in listBindings [Root exception is org.omg.CORBA.NO_PERMISSION:   vmcid: 0x0  minor code: 0  completed: No]
weblogic.corba.j2ee.naming.ContextImpl YsQb_Controller#mor
 weblogic.corba.j2ee.naming.ContextImpl smis
  weblogic.corba.j2ee.naming.ContextImpl ejb
   $Proxy1 YsQb_ControllerRemote
mor.smis.ejb._YsQb_Controller_lu5f5s_YsQb_ControllerRemoteIntf_Stub smisEARsmisEJB_jarYsQb_Controller_YsQb_ControllerRemote
weblogic.ejb.container.interfaces._Ejb3RemoteHome_Stub smisEARsmisEJB_jarDd_Controller_Home
mor.smis.ejb._Gjh_Controller_p4dok4_Gjh_ControllerRemoteIntf_Stub smisEARsmisEJB_jarGjh_Controller_Gjh_ControllerRemote
weblogic.corba.j2ee.naming.ContextImpl Gjh_Controller#mor
 weblogic.corba.j2ee.naming.ContextImpl smis
  weblogic.corba.j2ee.naming.ContextImpl ejb
   $Proxy2 Gjh_ControllerRemote
weblogic.ejb.container.interfaces._Ejb3RemoteHome_Stub smisEARsmisEJB_jarQb_Controler_Home
weblogic.ejb.container.interfaces._Ejb3RemoteHome_Stub smisEARsmisEJB_jarYsQb_Controller_Home
mor.smis.ejb._Gd_Controller_avf4g0_Gd_ControllerRemoteIntf_Stub smisEARsmisEJB_jarGd_Controller_Gd_ControllerRemote
weblogic.corba.j2ee.naming.ContextImpl Hyjh_Controller#mor
 weblogic.corba.j2ee.naming.ContextImpl smis
  weblogic.corba.j2ee.naming.ContextImpl ejb
   $Proxy3 Hyjh_ControllerRemote
mor.smis.ejb._Inf_Controller_bczzpo_Inf_ControllerRemoteIntf_Stub smisEARsmisEJB_jarInf_Controller_Inf_ControllerRemote
weblogic.ejb.container.interfaces._Ejb3RemoteHome_Stub smisEARsmisEJB_jarHyjh_Controller_Home
mor.smis.ejb._fetchData_8vu3cw_fetchDataRemoteIntf_Stub smisEARsmisEJB_jarfetchData_fetchDataRemote
weblogic.corba.j2ee.naming.ContextImpl ejb
 weblogic.corba.j2ee.naming.ContextImpl mgmt
  org.omg.stub.javax.management.j2ee._ManagementHome_Stub MEJB
weblogic.ejb.container.interfaces._Ejb3RemoteHome_Stub smisEARsmisEJB_jarZyr_Controller_Home
weblogic.ejb.container.interfaces._Ejb3RemoteHome_Stub smisEARsmisEJB_jarGjh_Controller_Home
weblogic.corba.j2ee.naming.ContextImpl javax
ddddddjavax.naming.NamingException: Exception in listBindings [Root exception is org.omg.CORBA.NO_PERMISSION:   vmcid: 0x0  minor code: 0  completed: No]
weblogic.ejb.container.interfaces._Ejb3RemoteHome_Stub smisEARsmisEJB_jarfetchData_Home
weblogic.corba.j2ee.naming.ContextImpl Dd_Controller#mor
 weblogic.corba.j2ee.naming.ContextImpl smis
  weblogic.corba.j2ee.naming.ContextImpl ejb
   $Proxy4 Dd_ControllerRemote
weblogic.corba.j2ee.naming.ContextImpl Zyr_Controller#mor
 weblogic.corba.j2ee.naming.ContextImpl smis
  weblogic.corba.j2ee.naming.ContextImpl ejb
   $Proxy5 Zyr_ControllerRemote
mor.smis.ejb._Hyjh_Controller_7rl7r4_Hyjh_ControllerRemoteIntf_Stub smisEARsmisEJB_jarHyjh_Controller_Hyjh_ControllerRemote
mor.smis.ejb._Zyr_Controller_r2ei8_Zyr_ControllerRemoteIntf_Stub smisEARsmisEJB_jarZyr_Controller_Zyr_ControllerRemote
weblogic.corba.j2ee.naming.ContextImpl Qb_Controler#mor
 weblogic.corba.j2ee.naming.ContextImpl smis
  weblogic.corba.j2ee.naming.ContextImpl ejb
   $Proxy6 Qb_ControlerRemote
mor.smis.ejb._Dd_Controller_25882o_Dd_ControllerRemoteIntf_Stub smisEARsmisEJB_jarDd_Controller_Dd_ControllerRemote
weblogic.ejb.container.interfaces._Ejb3RemoteHome_Stub smisEARsmisEJB_jarInf_Controller_Home
org.omg.stub.javax.management.j2ee._Management_Stub mejbmejb_jarMejb_EO
mor.smis.ejb._Qb_Controler_oqm3m0_Qb_ControlerRemoteIntf_Stub smisEARsmisEJB_jarQb_Controler_Qb_ControlerRemote
weblogic.ejb.container.interfaces._Ejb3RemoteHome_Stub smisEARsmisEJB_jarGd_Controller_Home
weblogic.corba.j2ee.naming.ContextImpl FectchData#mor
 weblogic.corba.j2ee.naming.ContextImpl smis
  weblogic.corba.j2ee.naming.ContextImpl ejb
   $Proxy7 fetchDataRemote
weblogic.corba.j2ee.naming.ContextImpl Inf_Controller#mor
 weblogic.corba.j2ee.naming.ContextImpl smis
  weblogic.corba.j2ee.naming.ContextImpl ejb
   $Proxy8 Inf_ControllerRemote//ctx.lookup("java:comp/env/ejb/FectchData") 在这里报错。。
4444  javax.naming.NameNotFoundException: remaining name: env/ejb/FectchData//end
//如果用jspd调则没问题。。各位高人。我该如何解决,如何去找到绑定对象呀?

解决方案 »

  1.   

    主要是我想 lookup 到ejb对象哭死了
      

  2.   

    jndi的初始化没错。ctx.lookup("java:comp/env/ejb/FectchData")
    报错的话那应该要检查weblogic上的初始值是否有FectchData了。
      

  3.   

    我看WebLogic 的jndi空间里面似乎有啊。。呵呵。。我是初学者,楼上能否将明白一些。。最好有例子什么的。。先谢过了
      

  4.   

    jndi需要依赖于容器的。
    你是直接通过main函数运行的吗?如果是,这肯定不行。
      

  5.   

    我在书上《21天学会j2ee》上也看到有直接用main函数运行的呀。我是仿造它写的。。
      

  6.   

    我没注意你程序中添加了weblogic的上下文。这应该是可以的(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory "); 
      

  7.   

    谢谢你。。那我用lookup时。为什么会出现:javax.naming.NameNotFoundException: remaining name: env/ejb/FectchData的错误呀
      

  8.   

    首先,你是怎么发布ejb的,配置文件都写了吗?
    其次,你的服务器运行着吗?
      

  9.   

    呵呵。。终于解决了。。我的lookup查找的绑定名字不对。。不过感谢各位的支持。。我仍然给分,第一次操作还不知道咋给呢。。O(∩_∩)O~