0

私はコンテナアイテムパターンを使用しています。

ユーザーを格納するコンテナ:

@Path("/user")
@Stateless
public class UsersResource {

@Context
private UriInfo context;
@EJB
private UserBeanLocal userBean;

public UsersResource() {
}

@GET
@Produces("application/json")
public String getJson(@HeaderParam("authorization") String authorization) {
   return userBean.sampleJSON();
}

@Path("{id}")
public UserResource getUserResource(@PathParam("id") String id) {
    return UserResource.getInstance(id);
}
}

1 人のユーザーを表すアイテム:

@Stateless
public class UserResource {
@EJB
private UserBeanLocal userBean;

private String id;

public UserResource() {
}

private UserResource(String id) {
    this.id = id;
}

public static UserResource getInstance(String id) {
    return new UserResource(id);
}

@GET
@Produces("application/json")
public String getJson() {
    //TODO return proper representation object
    return userBean.sampleJSON();
}
}

そして豆。メソッドは 1 つだけです。

@Local
public interface UserBeanLocal {

String sampleJSON();

}

@Stateless
public class UserBean implements UserBeanLocal {

@Override
public String sampleJSON() {
    return "{\"Name\": \"Jan\", \"Lastname\": \"Węglarz\", \"PESEL\": \"47092412341\"}";
} 
}

コンテナ内の EJB は正常に動作しますが、アイテム内では null を返します。なんで?

getJson() で id などの何かを返そうとしましたが、問題はありませんでした。すべてがうまくいきました。しかし、EJB を使用して何かを返すと、null 例外が発生します。

アプリは問題なく jboss 7 にデプロイされます。

4

2 に答える 2

1

これは、自分で UserResource のインスタンスを作成しているためです。

return UserResource.getInstance(id);

JNDI ルックアップまたはインジェクションを介してコンテナーによって作成されないため、コンテナー管理ではありません。依存関係の挿入は、コンテナーで管理されたコンポーネントでのみ実行できます。

于 2012-07-10T16:54:07.053 に答える
0

私はUsersResourceに追加しました:

@EJB
private UserResource userResource;

そして変更:

@Path("{id}")
public UserResource getUserResource(@PathParam("id") String id) {
    return userResource;
}

そして今、それは機能します。ありがとう :)

于 2012-07-11T08:48:00.433 に答える