这是AccountBean:package bmptest.ejb;import javax.ejb.*;
import java.sql.*;
import java.sql.Date;
import java.util.*;
import java.net.*;
import javax.naming.*;public class AccountBean
    implements EntityBean {
  EntityContext entityContext;
  String acAccountCd;
  String acCreBy;
  Date acCreDt;
  String acModBy;
  Date acModDt;
  String acNameTx;
  String acSnameTx;
  String acTypeCd;
  public AccountPK ejbCreate(String acAccountCd, String acTypeCd) throws
      CreateException {
    setAcAccountCd(acAccountCd);
    setAcTypeCd(acTypeCd);
    return null;
  }  public void ejbPostCreate(String acAccountCd, String acTypeCd) throws
      CreateException {
  }  public void ejbRemove() throws RemoveException {
  }  public void setAcAccountCd(String acAccountCd) {
    this.acAccountCd = acAccountCd;
  }  public void setAcCreBy(String acCreBy) {
    this.acCreBy = acCreBy;
  }  public void setAcCreDt(Date acCreDt) {
    this.acCreDt = acCreDt;
  }  public void setAcModBy(String acModBy) {
    this.acModBy = acModBy;
  }  public void setAcModDt(Date acModDt) {
    this.acModDt = acModDt;
  }  public void setAcNameTx(String acNameTx) {
    this.acNameTx = acNameTx;
  }  public void setAcSnameTx(String acSnameTx) {
    this.acSnameTx = acSnameTx;
  }  public void setAcTypeCd(String acTypeCd) {
    this.acTypeCd = acTypeCd;
  }  public String getAcAccountCd() {
    return acAccountCd;
  }  public String getAcCreBy() {
    return acCreBy;
  }  public Date getAcCreDt() {
    return acCreDt;
  }  public String getAcModBy() {
    return acModBy;
  }  public Date getAcModDt() {
    return acModDt;
  }  public String getAcNameTx() {
    return acNameTx;
  }  public String getAcSnameTx() {
    return acSnameTx;
  }  public String getAcTypeCd() {
    return acTypeCd;
  }  public AccountPK ejbFindByPrimaryKey(AccountPK pk) throws FinderException {
    PreparedStatement pstmt = null;
    Connection conn = null;
    try {
      conn = getConnection();
      pstmt = conn.prepareStatement("select ac_account_cd,ac_type_cd from emis_account_tb where ac_account_cd = ?1 and ac_type_cd = ?2");
      pstmt.setString(1, pk.acAccountCd);
      pstmt.setString(2, pk.acTypeCd);
      ResultSet rs = pstmt.executeQuery();
      rs.next();
      return pk;
    }
    catch (Exception e) {
      throw new FinderException(e.toString());
    }
    finally {
      try {
        if (pstmt != null) {
          pstmt.close();
        }
      }
      catch (Exception e) {}
      try {
        if (conn != null) {
          conn.close();
        }
      }
      catch (Exception e) {}
    }
    //return null;
  }  public Collection ejbFindByNameCre(String name, String cre_by) throws
      FinderException {
    PreparedStatement pstmt = null;
    Connection conn = null;
    Vector v = new Vector();
    try {
      conn = getConnection();
      pstmt = conn.prepareStatement("select ac_account_cd,ac_type_cd from emis_account_tb where ac_name_tx = ?1 and ac_cre_by = ?2");
      pstmt.setString(1, name);
      pstmt.setString(2, cre_by);
      ResultSet rs = pstmt.executeQuery();      while(rs.next()){
        String account_cd = rs.getString("ac_accunt_cd");
        String type_cd = rs.getString("ac_type_cd");
        v.addElement(new AccountPK(account_cd,type_cd));
      }
      return v;
    }
    catch (Exception e) {
      throw new FinderException(e.toString());
    }
    finally {
      try {
        if (pstmt != null) {
          pstmt.close();
        }
      }
      catch (Exception e) {}
      try {
        if (conn != null) {
          conn.close();
        }
      }
      catch (Exception e) {}      //return null;
    }
  }
    public Connection getConnection() throws Exception {
      try {
        Context ctx = new InitialContext();
        javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup(
            "java:comp/evn/jdbc/DataSoure");
        return ds.getConnection();
      }
      catch (Exception e) {
        e.printStackTrace();
        throw e;
      }
    }    public void ejbLoad() {
    }    public void ejbStore() {
    }    public void ejbActivate() {
    }    public void ejbPassivate() {
    }    public void setEntityContext(EntityContext entityContext) {
      this.entityContext = entityContext;
    }    public void unsetEntityContext() {
      this.entityContext = null;
    }
  }

解决方案 »

  1.   

    俺觉得这句有问题啊:
    Object obj = ctx.lookup("AccountHome");你的部署文件“ejb-jar.xml”中<ejb-name>定义的是AccountHome吗?
    如果不是应该lookup那个名字,比如lookup("Account")。
      

  2.   

    看到你的“ejb-jar.xml”了,你定义的<ejb-name>是“Account”
    所以你应该写:Object obj = ctx.lookup("Account");
    “Account”才是你的JNDI名称。
      

  3.   

    那也只是ejb-name 啊, 不是jndi-name,  难道两名相同吗?
      

  4.   

    谢谢提示,我修改了jboss.xml中的jndi-name ,改为 AccountHome,可还是提示:javax.naming.NameNotFoundException: AccountHome not bound
    jboss.xml:<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.2//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_2.dtd">
    <jboss>
      <enterprise-beans>
        <entity>
          <ejb-name>Account</ejb-name>
          <jndi-name>AccountHome</jndi-name>
          <local-jndi-name>AccountLocalHome</local-jndi-name>
        </entity>
      </enterprise-beans>
    </jboss>
      

  5.   

    client.javajava.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
    java.naming.factory.url.pkgs=org.jboss.naming.client
    java.naming.provider.url=jnp://10.3.1.10:1099
    System.out.println(env);
    ctx = new javax.naming.InitialContext(env);
    System.out.println("Got context");
    Object ref = ctx.lookup("Account");我的JBOSS.XML
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.2//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_2.dtd">
    <jboss>
      <enterprise-beans>
        <entity>
          <ejb-name>Account</ejb-name>
          <jndi-name>Account</jndi-name>
        </entity>
      </enterprise-beans>
    </jboss>ejb-jar.xml:<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
    <ejb-jar>
      <display-name>account</display-name>
      <enterprise-beans>
        <entity>
          <display-name>Account</display-name>
          <ejb-name>Account</ejb-name>
          <home>accounts.ejb.AccountRemoteHome</home>
          <remote>accounts.ejb.AccountRemote</remote>
          <ejb-class>accounts.ejb.AccountBean</ejb-class>
          <persistence-type>Bean</persistence-type>
          <prim-key-class>accounts.ejb.AccountPK</prim-key-class>
          <reentrant>False</reentrant>
          <cmp-version>2.x</cmp-version>
        </entity>
      </enterprise-beans>
      <assembly-descriptor>
        <container-transaction>
          <method>
            <ejb-name>Account</ejb-name>
            <method-name>*</method-name>
          </method>
          <trans-attribute>Required</trans-attribute>
        </container-transaction>
      </assembly-descriptor>
    </ejb-jar>还是出现
    javax.naming.NameNotFoundException: Account not bound
    的错误