私の問題に対する答えを見つけるために Stackoverflow を検索しましたが、非常によく似た問題がいくつか見つかりましたが、答えはありませんでした。
私がやろうとしていること: Glassfish 4.1 組み込みコンテナーが開始される簡単な junit テストを作成し、EJB の簡単な操作をテストします。
サンプル EJB:
@Stateless
@LocalBean
public class ExampleBean {
public int meaningOfLife() {
return 42;
}
}
ものすごく単純。これが私の単体テストです:
public class BasicTest {
@EJB
private ExampleBean examplebean;
private static Context context;
private static EJBContainer container;
@BeforeClass
public static void init() {
Map<String,Object> props = new HashMap<String,Object>();
//props.put(EJBContainer.MODULES, new File("target/classes"));
props.put(EJBContainer.MODULES, new File("D:\\Development\\IDE\\workspace-templates\\jee7-template\\template-service\\target"));
try {
container = EJBContainer.createEJBContainer(props);//.getContext().bind("inject", this);
context = container.getContext();
} catch (Exception e) {
e.printStackTrace();
}
}
}
私の pom.xml 依存関係:
<dependency>
<groupId>org.glassfish.main.extras</groupId>
<artifactId>glassfish-embedded-static-shell</artifactId>
<version>4.1</version>
<scope>system</scope>
<systemPath>D:\\Development\\Servers\\glassfish4.1-activiti\\glassfish\\lib\\embedded\\glassfish-embedded-static-shell.jar</systemPath>
</dependency>
また、次の依存関係を追加してみました。
<dependency>
<groupId>org.glassfish.main.ejb</groupId>
<artifactId>ejb-container</artifactId>
<version>4.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.ejb</groupId>
<artifactId>javax.ejb-api</artifactId>
<version>3.2</version>
<scope>test</scope>
</dependency>
結果: 埋め込まれた GF 4.1 コンテナーは、その単純な EJB をロードできませんでした (maven コンパイル後に target/classes フォルダーにあります)。
さまざまなコード変更 (プロパティを使用してコンテナーに渡すかどうかなど) に基づいて、次のエラーが発生します。
GF 4.1 組み込みの UnsatisfiedDependencyException
GF 4.1 Embedded で EJB クラスをデプロイできない
貼り付けたコードは、リンクされた最後のエラー メッセージを表示しています。
そして、私は理解していません。私が情報を探すところはどこでも、これはうまくいくはずだと言っています。
また、これを OpenEJB コンテナー (残念ながら jee6 のみ) で試してみると、正常に動作します。
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
<version>4.7.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0-6</version>
<scope>test</scope>
</dependency>
助けてくれてありがとう!