这是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;
}
}
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;
}
}
Object obj = ctx.lookup("AccountHome");你的部署文件“ejb-jar.xml”中<ejb-name>定义的是AccountHome吗?
如果不是应该lookup那个名字,比如lookup("Account")。
所以你应该写:Object obj = ctx.lookup("Account");
“Account”才是你的JNDI名称。
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>
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
的错误