我正在开发一个Java Enterprise应用程序,它有一个EJB层和一个与EAR捆绑在一起的WEB层。我面临的问题是我的EJB层中有一些实体,当我尝试在我的WEB层中通过JNDI获取他们的EAO时,我得到了NameNotFoundException。
我的耳朵名称是:学生管理
我的EJB层是: StudentManagementEJB
我的网络图层是: StudentManagementWEB
应用服务器: JBOSS-4.2
我的实体类:
@Entity
@Table(name="student")
public class Student implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="student_id")
private int studentId;
@Column(name="sudent_name")
private String studentName;
@Column(name="student_class")
private String studentClass;
public int getStudentId() {
return studentId;
}
public void setStudentId(int studentId) {
this.studentId = studentId;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public String getStudentClass() {
return studentClass;
}
public void setStudentClass(String studentClass) {
this.studentClass = studentClass;
}
}
我的远程接口:
@Remote
public interface StudentEAO {
public void save(Student student);
}
我的界面实施:
@Stateless
public class StudentEAOImpl implements StudentEAO {
@PersistenceContext
private EntityManager entityManager;
/* (non-Javadoc)
* @see com.learn.interfce.StudentEAO#save(com.learn.entity.Student)
*/
@Override
public void save(Student student) {
// TODO Auto-generated method stub
try{
entityManager.persist(student);
}
catch(Exception e){
e.printStackTrace();
}
}
}
在我的servlet中,我试图将StudentEAOImpl Object作为
try {
StudentEAO studentEao = (StudentEAO) new InitialContext().lookup("StudentManagement/StudentEAOImpl/remote");
studentEao.save(student);
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
错误的StackTrace:
01:15:45,539 INFO [STDOUT] Hello World from StudentActionServlet.
01:15:45,543 ERROR [STDERR] javax.naming.NameNotFoundException: StudentManagement not bound
01:15:45,543 ERROR [STDERR] at org.jnp.server.NamingServer.getBinding(NamingServer.java:529)
01:15:45,543 ERROR [STDERR] at org.jnp.server.NamingServer.getBinding(NamingServer.java:537)
01:15:45,543 ERROR [STDERR] at org.jnp.server.NamingServer.getObject(NamingServer.java:543)
01:15:45,543 ERROR [STDERR] at org.jnp.server.NamingServer.lookup(NamingServer.java:267)
01:15:45,543 ERROR [STDERR] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:628)
01:15:45,543 ERROR [STDERR] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:590)
01:15:45,543 ERROR [STDERR] at javax.naming.InitialContext.lookup(InitialContext.java:392)
01:15:45,543 ERROR [STDERR] at com.learn.servlets.StudentActionServlet.doGet(StudentActionServlet.java:46)
我没有得到我在这里失踪的东西。请帮助我。
谢谢!
答案 0 :(得分:1)
Atlast!问题已经解决,以下是我的调查结果:
1-您必须检查您的EJB,WEB和EAR层编译器级别,它们应该是相同的。
2-在给出JNDI名称时检查您的EAR名称,意味着如果您的JNDI名称是:MyEar / MYEJB / remote,那么MyEar应该是您的EA项目名称。
3-您的服务器日志必须干净。它不应该产生任何可能显示出阻止的关键异常。
完成所有这些检查和修复后,我的问题就解决了。 希望它会帮助别人。
答案 1 :(得分:0)
尝试手动绑定您的EAOImpl类,如下所示:
@RemoteBinding(jndiBinding = “StudentManagement / StudentEAOImpl /远程”)