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が注入されていないかを確認するにはどうすればよいですか?