Приложение NameNotFoundException Java Enterprise

Я работаю над приложением Java Enterprise, в котором есть слой EJB и слой WEB, объединенные вместе с EAR. Проблема, с которой я столкнулся, заключается в том, что у меня есть несколько объектов на моем уровне EJB, и когда я пытаюсь получить их EAO с помощью JNDI на своем веб-уровне, я получаю NameNotFoundException.

Имя моего уха: StudentManagement

Мой слой 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();
    }
}

}

И в моем сервлете я пытаюсь получить объект StudentEAOImpl как

   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)

Я не получаю то, что мне здесь не хватает. Пожалуйста, помогите мне в этом отношении.

Спасибо!


person Muhammad Salman Farooq    schedule 26.04.2014    source источник


Ответы (2)


Наконец! Проблема решена, и вот мои выводы по этому поводу:

1- Вы должны проверить свой уровень компилятора EJB, WEB и EAR, все должно быть одинаковым.

2- Проверьте свое имя EAR при вводе имени JNDI, это означает, что если ваше имя JNDI: MyEar/MYEJB/remote, то MyEar должно быть именем вашего проекта EA.

3- Ваш журнал сервера должен быть чистым. Он не должен создавать каких-либо критических исключений, которые могут препятствовать показу.

После выполнения всех этих проверок и исправлений моя проблема решена. Надеюсь, это поможет кому-то.

person Muhammad Salman Farooq    schedule 29.04.2014

Попробуйте связать свой класс EAOImpl вручную следующим образом:

@RemoteBinding(jndiBinding="Управление студентами/StudentEAOImpl/remote")

person G.S.Tomar    schedule 28.04.2014