我试着运行 银行账户示例 的例子,相信大家也都作过。 配置工作已经完毕!!!工具是---JB7+weblogic7+Oracle8i 
文件有:
Account.java AccountHome.java (local) AccountRemote.java AccountRemoteHome.java (remote)AccountPK.java (pk类)AccountException (自定义异常)AccountBean.java (Bean类)这些都已经写好,打包并且 deploy完毕。
我也写好了Client.java,但是运行出错:
javax.ejb.CreateException: javax.naming.NameNotFoundException: Unable to resolve 'app/ejb/AccountMoudle.jar#Account/comp/env/jdbc/Oracle' Resolved: 'app/ejb/AccountMoudle.jar#Account/comp/env' Unresolved:'jdbc' ; remaining name 'jdbc/Oracle'我的AccountBean.java 中的 查询部分是:
  public Connection getConnection() throws Exception {
    try {
      Context ctx = new InitialContext();
      DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/Oracle");
      return ds.getConnection();
    }
    catch (Exception e) {
      System.err.println("Could not locate datasource!  Reason:");
      e.printStackTrace();
      throw e;
    }
  }
(Oracle是我在 weblogic 的console中配置的 JNDI Name)
 我想可能是(Client.java类中的) :
   Properties h = System.getProperties();
      h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
      h.put(Context.PROVIDER_URL,"t3://localhost:7001");
      Context ctx = new InitialContext(h);
      Object obj = ctx.lookup("AccountRemote");
      AccountRemoteHome Home = (AccountRemoteHome)PortableRemoteObject.narrow(obj,AccountRemoteHome.class);问题,但我把 Object obj = ctx.lookup("XXX");  中 XXX 换成什么都不行,谁帮帮我阿

解决方案 »

  1.   

    DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/Oracle");
    你在weblogic中 配置的Datasource的 jndi名字是Oracle
    那么就 DataSource ds=(DataSource)ctx.lookup("Oracle")还有 察看一下 
    看看在weblogic-ejb-jar.xml文件中,这个bean的JNDI名到底是什么……,如下:
    weblogic-ejb-jar.xml
        <weblogic-enterprise-bean>
            <ejb-name>Account</ejb-name>
            <jndi-name>Account</jndi-name>
        </weblogic-enterprise-bean>这里的jndi名字 ,我想应该是Accountgood luck
      

  2.   

    jndi最好将jdbc/Oracle改为Oracle,我以前也是像你这样出错了的,最后不要前面部分就好了,好像Weblogic不能用这种形式,由于试验不多顾不能肯定,但我的确遇到过这样的情况,改了就好了
      

  3.   

    我的weblogic-ejb-jar.xml是:
    <weblogic-ejb-jar>
        <weblogic-enterprise-bean>
            <ejb-name>Account</ejb-name>
            <jndi-name>AccountRemote</jndi-name>
            <local-jndi-name>Account</local-jndi-name>
        </weblogic-enterprise-bean>
    </weblogic-ejb-jar>我改成 DataSource ds=(DataSource)ctx.lookup("Oracle") 
    然后:
          Object obj = ctx.lookup("AccountRemote");
          AccountRemoteHome Home = (AccountRemoteHome)PortableRemoteObject.narrow(obj,AccountRemoteHome.class);
    报错是这样的:
    javax.ejb.CreateException: javax.naming.NameNotFoundException: Unable to resolve 'Oracle' Resolved: '' Unresolved:'Oracle' ; remaining name 'Oracle再帮我看看吧,我现在真是摸不着头脑,实在无法解决了。
      

  4.   

    如果 lookup 
    Remote jndi是  AccountRemote
    local jndi的是Account看一下你的weblogic 里 DataSource的jndi名字是否为Oracle
    如果用CMP2.0的化 要用Weblogic 里的 TxDataSource
    Connection Pool是否正确了
    配置DataSource 要用到Connection Pool的JNDI,是否正确,
    是否apply 到server中了
    启动weblogic的时候看一下你的连接池是否有包错,或者DataSource是否包错
      

  5.   

    DataSource 的JNDI Name 是Oracle ,但是我用的不是
    CMP2.0  而我用的是 TxDataSource 。
    配置Connection Pool的时候没有 JNDI 这项。 
    启动weblogic 时开始报连接池的错,但后来我在jb里面把oracle的jdbc驱动引入,就正常了。
    我的问题是在 TxDataSource 上面吗?
      

  6.   

    问题在于 你没把 连接池 佩好,佩TxDataSource时 要你 提供连接池名字,
    如果连接池没对, TxDataSource 也不会对,所以也就lookup不到你的datasource
      

  7.   

    TxDataSource 配好了阿,连接池名就是配 Connection Pool的 名字,都是 
    OraclePool,这个肯定对的。要不我的weblogic 也启动不了。
      

  8.   

    DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/Oracle");
    你在weblogic中 配置的Datasource的 jndi名字是Oracle
    那么就 DataSource ds=(DataSource)ctx.lookup("Oracle")还有 察看一下 
    看看在weblogic-ejb-jar.xml文件中,这个bean的JNDI名到底是什么……,如下:
    weblogic-ejb-jar.xml
        <weblogic-enterprise-bean>
            <ejb-name>Account</ejb-name>
            <jndi-name>Account</jndi-name>
        </weblogic-enterprise-bean>这里的jndi名字 ,我想应该是Accountgood luck
      

  9.   

    这是谁阿,怎么用 bcdavid(莉莉) 答过的话来回答阿?