OEPE で次のプロジェクトを作成しました。
- weld001408 (Java EE - エンタープライズ アプリケーション プロジェクト)
- weld001408utility (Java EE - Uitility Project)、耳のweld001408に属します
- weld001408web (Web - 動的 Web プロジェクト)、耳のweld001408 に属します。
プロジェクトを作成したとき、デフォルト (耳のメンバーシップのみ) を変更せず、ターゲット ランタイムは Oracle WebLogic Server 12.1.1 です。そして、ウィザードで作成されたクリーン ドメインがワークスペースに追加されます。
コードは次のとおりです。
ユーティリティ プロジェクト
クラス 'weld001408utility/ValueProducer.java'
package weld001408utility;
import javax.enterprise.inject.Produces;
public class ValueProducer {
@Produces
public String stringValue() {
return "someStringValue";
}
}
META-INF/beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>
ウェブプロジェクト
weld001408web/ValueConsumerServlet.java
package weld001408web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ValueConsumerServlet
*/
@WebServlet("/ValueConsumerServlet")
public class ValueConsumerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Inject
private String injectedValue;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter pw = response.getWriter();
pw.write("injectedValue: " + injectedValue);
pw.flush();
}
}
WEB-INF/beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>
問題
アプリケーションを Eclipse にデプロイしようとすると、常に WELD-001408 エラーが発生します。
<01.03.2013 10:07 Uhr MEZ> <Warning> <Deployer> <BEA-149078> <Stack trace for message 149004
weblogic.management.DeploymentException:
at weblogic.application.internal.BaseDeployment.throwAppException(BaseDeployment.java:123)
at weblogic.application.internal.BaseDeployment.prepare(BaseDeployment.java:239)
at weblogic.application.internal.EarDeployment.prepare(EarDeployment.java:61)
at weblogic.application.internal.DeploymentStateChecker.prepare(DeploymentStateChecker.java:158)
at weblogic.deploy.internal.targetserver.AppContainerInvoker.prepare(AppContainerInvoker.java:60)
Truncated. see log file for complete stacktrace
Caused By: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [String] with qualifiers [@Default] at injection point [[field] @Inject private weld001408web.ValueConsumerServlet.injectedValue]
at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:258)
at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:105)
at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:125)
at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:324)
at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:309)
Truncated. see log file for complete stacktrace
>
しかし、Eclipse から ear をエクスポートし、そのファイルを weblogic 管理コンソールにデプロイすると、すべてが正常に機能し、値がサーブレットに正しく挿入されます。展開に問題はありません。
weblogic にはいくつかのパッチがあり、最新のものをインストールしています (私の問題に関連する可能性のある多くのバグをチェックしましたが、それらはすべて 12.1.1.0.2 に含まれているはずです):
WebLogic Server 12.1.1.0.2 PSU Patch for BUG14331523 Thu Oct 11 15:08:09 IST 2012
WebLogic Server 12.1.1.0 Wed Dec 7 08:40:57 PST 2011 1445491 >
Windows Vista と、最新の OEPE バージョン (オールインワン パッケージ) を備えた Linux ベースのシステムで同じアプリケーションを試しましたが、成功しませんでした...
質問
誰かがまったく同じ問題を抱えていますか? 誰かが問題を再現することは可能ですか? そうでない場合、どの構成でどのパッチが機能していますか?
それが Eclipse 用の Oracle Enterprise Pack なのか、WebLogic の問題なのかはわかりません。
助けてくれてありがとう!