2

私はJavaEEを初めて使用するので、私の質問は非常に基本的なものかもしれません。ステートレスセッションBean(単純化)を使用して次のRESTWebサービスを構築しました。

@Path("/list/")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Stateless
public class ListResource {

    @PersistenceContext(unitName = "unitName")
    private EntityManager em;

    @GET
    @Path("/")
    public List<Compound> getCompounds() {

    List<Compound> list = tq.getResultList();

    if (list.isEmpty()) {
        throw new WebApplicationException(Response.status(404).entity("There are no compounds in database.").build());
    }

    return list;
    }
}

それは魅力のように機能します。URL経由でアクセスでき、JSONを返します。問題は、すべてのコンパウンドを取得するためのある種のモデルとしてこのSession Beanを使用する必要がある、プレーンJavaで記述されたプログラムの別の部分があることです。

問題は、このSession Beanを永続コンテキストの外にある場所で初期化すると、データベースにアクセスするためのEntityManagerを認識しないことです。私は信じている。

どうしたらいいのかわからない。コードの離れた部分でクラスListResourceを初期化し、EntityManagerの依存性注入を機能させることはできますか?または、どういうわけか永続コンテキストを取得してから、このセッションBeanを初期化しますか?

私はそれが理にかなっていることを願っています。私が説明するのは複雑な問題です。

4

1 に答える 1

0

同じBeanを呼び出すWebサービスとスタンドアロンアプリがある場合は、機能を別のステートレスBeanに移動し、それにリモートインターフェイスとローカルインターフェイスを作成することをお勧めします。このようにして、ローカルBeanをWebサービスBeanに注入し、jndiを使用してリモートBeanを呼び出すことができます。

Java EE Beanへのアクセスについて詳しくは、こちらをご覧ください。

または、クライアントのJavaコードでWebサービスを呼び出して、すべてのデータを取得することもできます。RESTfulサービスに接続する方法については、この質問を参照してください。

于 2012-11-13T07:10:40.203 に答える