2017-01-18 12 views
1

私はのDAOインターフェイスにあるメソッドを使用しようとしています。私はサーブレットであっ呼んでいるとき、私はWebサービスJava EEでEJBを使用する方法

@WebServlet("/Index") 
public class Index extends HttpServlet { 
private static final long serialVersionUID = 1L; 

    //etc 
    @EJB 
    InterfacesDao dao; 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     //dao.getUsers(); //works well 
     //System.out.println(dao); //will print the dao object correctly 
     Boolean logged = dao.login("myLogin","mystrongpassword"); //works 
     request.setAttribute("logged",logged); 
     request.getRequestDispatcher("/jsp/login.jsp").forward(request, response); 

    } 

    //etc 

} 

をテストしかし、私はアヤックスを使用したいので、Webサービスで渡した場合、私は、例えば、何の問題もありません。 私は

@WebService 
@Path("/users") 
public class UserService { 

    @POST 
    @Path("/login") 
    @Produces("application/json") 
    public String login(@FormParam("login") String login, @FormParam("pwd") String mdp) { 
     return "Hello World" + login; 
    } 
} 

私がログインとPWDが含まれているJSONオブジェクトでhttp://[...]/rest/users/loginに行けば、私はHello World theloginientered を取得するしかし、私は、私がしようとしたEJB

@WebService 
@Path("/users") 
public class UserService { 

    @EJB 
    InterfacesDao dao; 

    @POST 
    @Path("/login") 
    @Produces("application/json") 
    public String login(@FormParam("login") String login, @FormParam("pwd") String mdp) { 

     //System.out.println(dao); //dao null ? 
     //dao.getUsers(); //erros because dao null 
     Boolean logged = dao.login(login,pwd); //doesn't work 
     //I not arrive till here because NullPointerException error 
     return "Hello World" + login; 

    } 
} 

を使用する必要がありますをテストすることができます私のサーブレットに私のウェブサービスのDAOの参照を渡すことによってインスタンスが動作しませんでした 私はjをしようとしました私WebServiceの、コンストラクタ内のinitでUST 1 EJB、およびゲッターによって私サーブレットからそれを得るが、再びヌル

私はEJBの依存性注入のための設定を忘れてしまったが、だと思います私の中でサーブレット私はもはや少ないです。サーブレット

import java.io.IOException; 
import java.io.UnsupportedEncodingException; 
import java.security.InvalidKeyException; 
import java.security.NoSuchAlgorithmException; 
import java.util.Arrays; 

import javax.crypto.BadPaddingException; 
import javax.crypto.Cipher; 
import javax.crypto.IllegalBlockSizeException; 
import javax.crypto.NoSuchPaddingException; 
import javax.crypto.SecretKey; 
import javax.crypto.spec.SecretKeySpec; 
import javax.ejb.EJB; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import com.supinfo.interfaces.InterfacesDao; 

インタフェースDAOウェブ側とEJB側

package com.supinfo.interfaces; 

import java.util.List; 

import javax.ejb.Remote; 

import com.supinfo.entity.User; 

@Remote 
public interface InterfacesDao { 

    public boolean login(String login, String mdp); 
    public boolean signin(String login, String mdp); 
    public List<User> getUsers(); 

} 

実装のための

import javax.ejb.EJB; 
import javax.ejb.Stateless; 
import javax.jws.WebService; 
import javax.servlet.annotation.WebServlet; 
import javax.ws.rs.FormParam; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 

import com.supinfo.interfaces.InterfacesDao; 
import com.supinfo.servlet.Index; 

インポートWebサービスのための

インポート

import java.util.List; 

import javax.ejb.Stateless; 
import javax.persistence.EntityManager; 
import javax.persistence.Query; 
import javax.persistence.criteria.CriteriaBuilder; 
import javax.persistence.criteria.CriteriaQuery; 
import javax.persistence.criteria.Root; 

import com.supinfo.database.PersistenceManager; 
import com.supinfo.entity.User; 
import com.supinfo.interfaces.InterfacesDao; 

@Stateless 
public class InterfaceDaoImpl implements InterfacesDao{ 

    @Override 
    public List<User> getUsers() { 

     EntityManager em = PersistenceManager.getEntityManager(); 
     Query query = (Query) em.createQuery("Select u FROM User u "); 
     List<User> persons = query.getResultList(); 
     return persons; 
    } 


    @Override 
    public boolean login(String login, String mdp) { 

     EntityManager em = PersistenceManager.getEntityManager(); 

     CriteriaBuilder cb = em.getCriteriaBuilder(); 
     CriteriaQuery<User> query = cb.createQuery(User.class); 
     Root<User> person = query.from(User.class); 
     query.where(cb.equal(person.get("login"), login)).where(cb.equal(person.get("mdp"), mdp)); 

     List<User> persons = em.createQuery(query).getResultList(); 
     //Boolean isEmpty = persons.isEmpty(); 
     //return !(isEmpty == null ? false : isEmpty); 
     return !persons.isEmpty(); 

    } 

ありがとうございます

答えて

0

サンプルコードにインポートステートメントは含まれていませんが、WebServiceではなくJAX-RSを使用しようとしていると仮定します。この場合、@WebServiceアノテーションを削除する必要があります。

使用しているサーバー(およびバージョン)によっては、daoの注入はすぐに@EJBを注釈として使用することはできません。ただし、JAX-RSエンドポイントを@Stateless beanに変換することができます。これは、注入の問題を処理する必要があります。短期使用では

 
@Stateless 
@Path("/users") 
public class UserService { 

    @EJB // @Inject is also an option 
    InterfacesDao dao; 

あなたはまた、代わりに@EJBの新しい@Injectアノテーションを使用することをお勧めします。

+0

ありがとうございます。しかし、それは同じではありませんnullPointeur:StandardWrapperValve [Jersey Web Application]:サーブレットジャージーWebアプリケーションの例外を割り当てます。 java.lang.NullPointerException –

+0

コードをimport文で更新し、InterfacesDaoクラスの定義を含めてください? – Dainesch

+0

ok、ありがとうございました –

関連する問題