【问题标题】:NameNotFoundException Java Enterprise ApplicationNameNotFoundException Java 企业应用程序
【发布时间】:2014-04-26 20:10:43
【问题描述】:

我正在开发一个 Java Enterprise 应用程序,它有一个 EJB 层和一个与 EAR 捆绑在一起的 WEB 层。我面临的问题是我的 EJB 层中有一些实体,当我尝试在我的 WEB 层中通过 JNDI 获取它们的 EAO 时,我得到 NameNotFoundException。

我的耳朵名字是:StudentManagement

我的 EJB 层是:StudentManagementEJB

我的 Web 层是: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 对象作为

   try {
        StudentEAO studentEao = (StudentEAO) new InitialContext().lookup("StudentManagement/StudentEAOImpl/remote");
        studentEao.save(student);
    } catch (NamingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

错误堆栈跟踪:

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)

我没有得到我在这里缺少的东西。请在这方面帮助我。

谢谢!

【问题讨论】:

    标签: java jakarta-ee ejb-3.0 jndi jboss-4.2.x


    【解决方案1】:

    最后!问题已解决,以下是我的发现:

    1-你必须检查你的EJB、WEB和EAR层编译器级别,应该都是一样的。

    2- 在提供 JNDI 名称时检查您的 EAR 名称,这意味着如果您的 JNDI 名称是:MyEar/MYEJB/remote,那么 MyEar 应该是您的 EA-Project 名称。

    3- 你的服务器日志必须是干净的。它不应该产生任何可能会停止的关键异常。

    在完成所有这些检查和修复后,我的问题得到了解决。 希望它会对某人有所帮助。

    【讨论】:

      【解决方案2】:

      尝试手动绑定您的 EAOImpl 类,如下所示:

      @RemoteBinding(jndiBinding="StudentManagement/StudentEAOImpl/remote")

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-29
        • 1970-01-01
        • 2012-05-02
        • 2012-04-30
        • 1970-01-01
        • 1970-01-01
        • 2013-07-04
        • 1970-01-01
        相关资源
        最近更新 更多