你的Object obj= context.lookup("java/comp/env/ejb/Trader");
应为Object obj= context.lookup("java/comp/env/Trader");

解决方案 »

  1.   

    谢谢楼上的各位兄弟的回答,我上面的问题解决了,方法是用jb建立一个工程的时候在“Required Libraries”中点“ADD”把shop.jar加入即可。
    不过又出现个新问题,好像直接lookup“java/comp/env/ejb/Trader"一般来说是找不到的,要设置工程的web.xml,我的web.xml设置如下:web.xml
    ----------------------------------------------------------------------------------
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
    <web-app>
    <session>
    <ejb-name>Trader</ejb-name>
    <Home>ejbappdemo.TraderHome</Home>
    <remote>ejbappdemo.Trader</remote>
    <ejb-ref>
    <description>EJB's Referece</description>
    <ejb-ref-name>ejb/Trader</ejb-ref-name> <!-- 这儿引用了ejb/Trader -->
    <ejb-ref-type>Session</ejb-ref-type>
    <Home>TraderHome</Home>
    <remote>Trader</remote>
    <ejb-link>Trader</ejb-link>
    </ejb-ref>
    </session>
    </web-app>
    ----------------------------------------------------------------------------------JavaBean中调用EJB的代码如下:
    ----------------------------------------------------------------------------------
    package testejb;import ejbappdemo.*; //shop.jar中的package
    import java.util.*;
    import javax.naming.*;
    import javax.rmi.PortableRemoteObject;public class TestEJBBean {public TestEJBBean() {
    try{
    Properties properties = new Properties();
    properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
    properties.put(Context.PROVIDER_URL,"t3://demosoft:7001");
    Context context = new InitialContext(properties);
    Object ref=context.lookup("java:comp/env/ejb/Trader"); //这里出现调用出错
    /*如果直接用Object ref=context.lookup("Trader");则成功,这是为什么? */
    TraderHome home=(TraderHome)PortableRemoteObject.narrow(ref,TraderHome.class);
    Trader trader=home.create();
    trader.showMsg();
    }
    catch(Exception e){
    System.err.println(e.getMessage());
    e.printStackTrace();
    }
    }
    }----------------------------------------------------------------------------------
    错误提示如下:
    While trying to look up comp/env/ejb/Trader in /app/webapp/WebTestEJB/29404618.javax.naming.NameNotFoundException: While trying to look up comp/env/ejb/Trader in /app/webapp/WebTestEJB/29404618.; remaining name 'comp/env/ejb/Trader'at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:858)at weblogic.jndi.internal.ApplicationNamingNode.lookup(ApplicationNamingNode.java:150)at weblogic.jndi.internal.WLEventContextImpl.lookup(WLEventContextImpl.java:237)at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:336)at weblogic.jndi.factories.java.ReadOnlyContextWrapper.lookup(ReadOnlyContextWrapper.java:45)at weblogic.jndi.internal.AbstractURLContext.lookup(AbstractURLContext.java:130)at javax.naming.InitialContext.lookup(InitialContext.java:347)at testejb.TestEJBBean.<init>(TestEJBBean.java:17)at jsp_servlet.__callejbjsp._jspService(__callejbjsp.java:130)at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:971)at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:402)at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:446)at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6350)at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3635)at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2585)at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)望赐教如何解决?
      

  2.   

    weblogic可以直接用:Object ref=context.lookup("Trader");
      

  3.   

    我想通过“lookup("java:comp/env/ejb/Trader"); ”这样的方式来查询JNDI不行么?
    因为那个EJB在远程服务器上
      

  4.   

    我再weblogic里面都是直接lookup JNDI名字的,远程服务企业应该这样的