1

同様の問題に関する多くの質問があることは知っていますが、問題の解決策を抽出することができませんでした。

JPA (EclipseLink 2.4) を使用して提供され、Glassfish 3.1.2.2 で実行される、データを提供する RESTful Web アプリケーションを構築しようとしています。

テストのために、mysql でゲストブック データベースをセットアップし、このオールインワン ソリューションを作成しました。

// imports etc...
// Guestbook class has @Entity

@Stateless
@Path("guestbook")
public class GuestService {

    @PersistenceContext
    private EntityManager em;

    @GET
    public Response entry() {
        Guestbook entry = em.find(Guestbook.class, someid);
        return Response.ok(entry.getMsg()).build();
    }
}

これは完全にうまく機能しますが、次のようにいくつかのレイヤーに分割したいと思います: REST -> DAO -> Entity これは次のように変換されます:

@Stateless
@Path("guestbook")
public class GuestService {

    private DAO dao;

    @GET
    public Response entry() {
        Guestbook entry = dao.getEntry(someid);
        return Response.ok(entry.getMsg()).build();
    }
}

// ...

public class DAO {
    @PersistenceContext
    private EntityManager em;

    public Guestbook getEntry(int someid) {
        return em.find(Guestbook.class, someid);
    }
}

したがって、これはgetEntry() でemにアクセスするとnullであるため、nullpointer 例外が発生します。私のpersistence.xmlは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="..." xmlns:xsi="..." xsi:schemaLocation="...">
    <persistence-unit name="guestbook" transaction-type="JTA">
        <jta-data-source>jdbc/mysqldatasource</jta-data-source>
        <class>model.Guestbook</class>
    </persistence-unit>
</persistence>

事前に感謝します。あなたの提案を楽しみにしています!

4

1 に答える 1

0

DAOfromをうまく抽象化しましたが、EJB を作成してusingアノテーションに挿入GuestServiceするのを忘れていたようです。DAO@StatelessGuestService@EJB

@Stateless 
public class DAO {

   @PersistenceContext
   private EntityManager em;
   ...   
}

@Stateless
@Path("guestbook")
public class GuestService {

    @EJB
    private DAO dao;
    ...
}

それが役立つことを願っています!

于 2013-02-13T10:16:37.593 に答える