JavaEEで基本的なWebアプリケーションを操作する。私はJavaBean、Bean Interface、Servlet、Entity、JSPページを作成しました。私は、サーブレットのURLをリクエストすると、それはError instantiating servlet class and the root cause is:
@EJBでプログラムがクラッシュする
javax.naming.NameNotFoundException: Name [com.packageName.UserServlet/userDao] is not bound in this Context. Unable to find [com.packageName.UserServlet].
エラーメッセージが表示されます奇妙なこと(私の意見では)私はUserServletクラスの@EJB注釈を削除すると、それが動作することです。私は理由を理解できません。
@EJBを削除すると、@ EJBを削除したので、userDao.addUser(user)
(NullPointerException)を実行すると問題がありますか?
私はJavaEEの初心者ですので、用語が間違っているかもしれませんが、私の問題を理解していただければ幸いです。
クラス:UserServlet
@WebServlet(name = "UserServlet", urlPatterns = {"/UserServlet"})
public class UserServlet extends HttpServlet {
@EJB("UserDaoBean") <---- This annotation makes it crash
private UserDaoLocal userDao;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int userId = 2;
User user = new User(userId, "userName", "password");
userDao.addUser(user);
request.getRequestDispatcher("userinfo.jsp").forward(request, response);
}
クラス:ユーザー
@Entity
@Table
@NamedQueries(@NamedQuery(name = "User.getAll", query = "select e from User e"))
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column
private int userid;
@Column
private String name;
@Column
private String password;
public User() {
}
public User(int userid, String name, String password) {
this.userid = userid;
this.name = name;
this.password = password;
}
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
クラス:UserDaoLocal
public interface UserDaoLocal {
void addUser(User user);
}
クラス:UserDaoBean
@Local
@Stateless(name = "UserDaoBean")
public class UserDaoBean implements UserDaoLocal {
@PersistenceContext
private EntityManager entityManager;
public UserDaoBean() {
}
@Override
public void addUser(User user) {
entityManager.persist(user);
}
}
どのアプリケーションサーバーを使用していますか?スタンドアロンのTomcatは、これをコンパイルするためのjarファイルでも、動作しません。 GlassfishやWildflyを例に使っていますか? – stdunbar
私はTomCat 7.0.70を使用するIDEとしてIntelliJを使用しています。データベースとして私はPostgreSQLを使用します。私は外部ライブラリに "postgresql jdbc driver"を追加しました。また、jsp-apiとservlet-apiをTomcatフォルダに追加しました。 – Tobias