GAEを使用するのはこれが初めてで、CDIを機能させようとしています。簡単@Inject
に言うと、サーブレットのフィールドが挿入されていません(常に挿入されていますnull
)。
私はEclipseで作業しており、GAE SDK(Eclipseによっても起動されます)に含まれているローカルテストサーバーでアプリケーションをデバッグしています。でサーブレットにアクセスするとlocalhost
、のnullポインタ例外が発生しsomeService
ます。また、の値を出力して、someService
それが実際null
にそうであることを確認しました。
編集:インジェクションポイントに修飾子を追加したとき@Named("skldjfx")
、Weldは依存関係が(検証フェーズで)満たされていないことを訴えたので、それは良い兆候です。ただし、フィールドは常にnull
です。
サーブレット:
public class BlogServlet extends HttpServlet {
@Inject private SomeService someService;
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
resp.setContentType("text/plain");
resp.getWriter().println("Hello. " + someService.getSomeValue());
// \
// always null
}
}
SomeService
クラス:
@ApplicationScoped
public class SomeService {
private String someValue = "some value";
public String getSomeValue() {
return someValue;
}
}
私は溶接を構成Listener
しましたweb.xml
:
<listener>
<listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>
リスナーは、初期化メッセージをログに記録するため、適切にロードされますorg.jboss.weld.environment.servlet.Listener contextInitialized
。
beans.xml
との両方war/WEB-INF
に(空の)を含めましたwar/META-INF
。私もなしで試してみましたMETA-INF
。多分beans.xml
処理されていませんか?フォルダ内の他のコンテンツWEB-INF
(などweb.xml
)は適切に処理されます。
beans.xml
処理されているか、修正SomeService
が注入されていないかを確認するにはどうすればよいですか?