2016-08-18 9 views
0

私はWARで使用する必要があるEJB 3.1でJARを持っています。 JARとWARの両方が同じJBoss(AS 7.1)上に別々に配備されています。 @Injectは、EJBを見ていないが、私はWARから手動JNDIルックアップを(使用している場合、ビューの私の現在の視点からWELD-001408:EJBをJARからWARに@

16:45:19,003 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC00001: Failed to start service jboss.deployment.unit."TEST_WEB.war".WeldService: org.jboss.msc.service.StartException in service jboss.deployment.unit."TEST_WEB.war".WeldService: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [TestSessionEJBLocal] with qualifiers [@Default] at injection point [[field] @Inject cz.pfreiberg.test.view.portlet.ViewPortlet.testBean] 
    at org.jboss.as.weld.services.WeldService.start(WeldService.java:83) 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_79] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_79] 
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_79] 
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [TestSessionEJBLocal] with qualifiers [@Default] at injection point [[field] @Inject cz.pfreiberg.test.view.portlet.ViewPortlet.testBean] 
     at  org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:275) 
     at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:244) 
     at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:107) 
     at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:127) 
     at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:346) 
     at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:331) 
     at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:366) 
     at org.jboss.as.weld.WeldContainer.start(WeldContainer.java:83) 
     at org.jboss.as.weld.services.WeldService.start(WeldService.java:76) 

:私はWARでCDI豆の一つでEJBを注入すると、私はこのエラーを得ました)私はこのBeanのインスタンスを取得することが可能です。 @Injectアノテーションを持つ別のJARからEJBを注入することは可能ですか?

WARのクラス(CDIビーン)@Inject EJB JARから:

@Model 
public class ViewPortlet implements Serializable { 
    @Inject 
    TestSessionEJBLocal testBean; 
} 

私はローカルおよびリモートインターフェイスに@InjectしようとしているJAR内のEJBクラス:

@Stateless 
public class TestSessionEJBBean implements TestSessionEJB, TestSessionEJBLocal 

任意のアイデアをありがとう。

+0

JARとWARの両方にbeans.xmlがありますか? – jpkrohling

+0

はい、私は(1つはJARのMETA-INFに、もう1つはWARのWEB-INFにあります)。本明細書によれば、それはオプションでさえある。 –

答えて

0

多くの研究の後で、CDP @Producesアノテーションを使用してJNDIルックアップを非表示にする別のクラス(EJBProducer)を使用することが唯一の実行可能なソリューションになるでしょう。次に、アプリケーションの中で@Injectを使用することができます。唯一の問題は、各BeanごとにJNDIを個別に記述しなければならないことです。ここに例を示します。 http://pastebin.com/3V3kKgD9

この解決策には、Martin Polak氏に感謝します。

1

短い答え:なし

JNDIルックアップはここに行く-に& &正しい方法ではありません。

あなたのWARはJARファイルに依存しないため、JARファイルから何も見ることはできません。他のクラスローダーでロードされる可能性が最も高いでしょう。依存関係としてJARを追加した場合、JARが機能する可能性があります。しかし、そのJARに応じて他のデプロイメントを行っているので、やりたくないと思います。

+0

ありがとうございます。私はWARのWEB-INFにある "jboss-deployment-structure.xml"でJARに依存しています。これで足りないの?それとも、私が設定できる別のタイプの依存関係がありますか? –

+0

私はあなたのWARにMaven ''(あなたが使っているものと仮定して)を単に追加することを意味しました。さらに、両方のアーカイブに 'beans.xml'があるはずです - 理論的にはそれは必要ありませんが、クラスが豆としてピックアップされることを確認する最も簡単な方法です。 'jboss-deployment-structure'については、私がここで助けてくれるとは思えませんが、もう一度、この機能をほとんど使用しませんでした。 – Siliarus

関連する問題