2016-08-09 14 views
1

インタフェースを使用したクラスでEJBを使用しないことができると私は、メソッドを実装するためのインタフェースを使用しますが、私はEJBを使用する場合、それは私のEJBが
Interface.java nullであることを言いますは、私が<code>JavaEE</code>プロジェクトで働いています

public interface Interface { public void methodTest(); } 

SubInterface.java

public class SubInterface implements Interface { 
@EJB 
private myEJB myejb 
@Override 
public void methodTest(){ 
if(myejb == null){ 
System.out.println("He is null"); 
} 
} 
} 

myEJB.java

@Stateless 
public class myEJB extends SomeAbstractFacade { 
@PersistanceContext 
private EntityManager em ; 

.... 

} 

私たちは、彼がnullの出力で読むことができますmethodTest実行UserController.java

@ManagedBean 
@ViewScoped 
public class UserController extends SomeAbstractController implements   Seializable{ 
private interface myInterface ; 

public void method(){ 
myInterface = new SubInterface(); 
myInterface.methodTest(); 

} 

} 


ありがとう

+0

myejbフィールドを持つクラスをどのようにインスタンス化しますか? EEプロバイダの依存性注入フレームワークによってインスタンス化する必要があります。それ以外の場合、EJBはインジェクトされません。 また、大文字(CamelCase)でClassNamesを起動してみてください。 Javaコミュニティの残りの部分はそれを感謝します。 –

+0

myEJBクラスを追加するために私の質問が更新されます –

+0

SubIntefaceクラスをインスタンス化する方法を表示できますか? –

答えて

-1

依存性の注入は、このようなSession BeansInterceptorsとしてではなく、通常のPOJOにマネージクラスでのみサポートされています。したがって、ヘルパークラスでインジェクションを使用することはできません。私たちは簡単な例を作ることができますはレベルに分類され、EJBは、彼らが容易にコミュニケーションできないことを意味する上位レベルに分類されます。解決策は、自分自身のパスでEJBを検索することを意味するルックアップを使用することです。

+0

_ "私たちは簡単な例を作ることができますJavaクラスはレベルに分類されており、EJBは上位レベルに分類されています。つまり、簡単に通信できないということです。解決策は、EJB _これは私には完全にはっきりしておらず、なぜあなたがこの答えを受け入れたのか(下降詞で)、私は3回upvotedではないことが分かりません。 – Kukeltje

+0

あなたがそれをアップアップした解決策はあなたが解決策を考えているものとはまったく離れているので、すべての問題は人のための新しい問題であり、それを求める人は3人アップアップしても、質問をしても、私は正解として作ったとしても、それについての報酬(評判)がないと思うのです。 –

+0

注目すべきは、複数の人が質問とupvoted答えがあると思いますマッチ(はい、私を含む)。あなたが提案したように長いショットではない場合、間違ったことが1つしかないことがあります。あなたが掲示した質問はあなたの実際の問題/質問が何であったかではなく、あなたはまったく異なる方法で実際の問題を解決しました。あなたの答えのほとんどはアップアップされた答えと同じことであるので(それ以外の方法で)、それだけでも目覚ましいでしょう。あなたが解決した方法についてコードを投稿しなかったので、このQ/Aの組み合わせ(あなたのA)は他の人に全く役に立たない。 – Kukeltje

3

インターフェイスインスタンスを挿入する必要があります。依存関係マネージャーがそのインスタンスの作成を知らないので、 'new'を使用すると、すべてのアノテーション(@EJBなど)は無視されます。

管理されたBeanアノテーションでは、プライベートインタフェースフィールドとejbが注入されます。

@ManagedBean 
@ViewScoped 
public class UserController extends SomeAbstractController implements   Seializable{ 

    @Inject 
    private interface myInterface ; 

    public void method(){ 
     myInterface.methodTest(); 

    } 

} 
+0

は動作しません、なぜSubInterfaceに問題があるのか​​分かりません。JavaクラスでEJBを使用できるのであれば、非常に奇妙です。 –

+2

問題はあなたが 'new'を使用していることです。 'new'キーワードを使用すると、EJBは作成されません。 –

+0

最初に呼び出す必要がある場合は、新しいSubInterfaceを使用するのはなぜですか? –

関連する問題