2016-10-07 15 views
0

私は別のパッケージにいくつかのEJBを持つWebプロジェクトを持っています。しかし、私はEJBを捜す問題があります。EJBルックアップの問題

私のディレクトリ構造:2つのパッケージindex.jobおよびindex.ejb

- パッケージindex.jobはPOJOのindex.javaを有する

- @Stateless(名= "indexEJB" にmappedName = "indexEJB")によって定義されたEJBを有するindex.ejbパッケージ@LocalBean

- も@Local

私の地元の豆

012定義されたローカルEJBインタフェースを持っているindex.ejbパッケージ
package index.ejb; 

import java.util.ArrayList; 
import javax.ejb.Local; 

@Local 
public interface IndexEJBLocal { 
    public ArrayList getLatestVersions(String year, int start, int end); 
} 

マイEJB

package index.ejb; 

import javax.ejb.Stateless; 
import javax.annotation.Resource; 
import javax.ejb.LocalBean; 

@Stateless(name = "indexEJB", mappedName = "indexEJB") 
@LocalBean 
public class IndexEJB implements IndexEJBLocal { 

    @Resource(lookup = "jdbc/cap") 
    private DataSource ds; 

    @Override 
    public ArrayList getLatestVersions(String year, int start, int end) { 
     return null; 
    } 
} 

マイPOJO

//ADDED @ManagedBean ANNOTATION SO SERVER IDENTIFIES THIS OBJ AS A RESOURCE 
//Also cannot use @PostConstruct as the execute method is overridden from quartz job interface 

package index.job; 

import javax.annotation.ManagedBean; 
import javax.ejb.EJB; 
import javax.inject.Inject; 

@ManagedBean 
public class IndexJob implements Job { 

    @EJB 
    IndexEJB billIndexEJB1; 

    @EJB 
    IndexEJBLocal billIndexEJB2; 

    @Inject 
    IndexEJB billIndexEJB3; 

    @Inject 
    IndexEJBLocal billIndexEJB4; 

    @Override 
    public void execute(JobExecutionContext context) throws JobExecutionException { 

     System.out.println("1::"+billIndexEJB1); //ALWAYS NULL 
     System.out.println("2::"+billIndexEJB2); //ALWAYS NULL 
     System.out.println("3::"+billIndexEJB3); //ALWAYS NULL 
     System.out.println("4::"+billIndexEJB4); //ALWAYS NULL 


     try { 
      Context ctx = new InitialContext(); 
      IndexEJBLocal billIndex = (IndexEJBLocal) 
       ctx.lookup("java:global.MY-PROJECT-NAME.IndexEJB!index.ejb.IndexEJBLocal"); 

      //ABOVE LOOKUP ALWAYS FAILS WITH NameNotFoundException 

      System.out.println("billIndex::" + billIndex); 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
    } 
} 

これを解決することができる方法上の任意のヒントは非常にいただければ幸いです。

プロジェクトが実行されている場所:NetBeans 8.2; JDK 1.8b45; Java EE 7 Web WebLogic 12.2.1.1

+1

あなたはどんな問題がありますか?コンテキストルックアップエラー?はいの場合は、起動ログを表示してください。正しく配置されていれば、WebロジックがEJBを呼び出すことができるJNDI名について通知する必要があります。 – Leonardo

+0

ありがとう!私は起動ログを調べ、それが助けになりました。ルックアップパスをjava:module/IndexEJB!index.ejb.IndexEJBに更新してインタフェースを削除しなければならなかった。 –

答えて

2

@LocalBeanとしてBeanに注釈を付けると、Beanにインターフェイスなしのビューが公開されるたびに、参照によって返された参照は、インターフェイスではなくEJBクラスへの参照になります。 @LocalBeanアノテーションは、インタフェースで定義されたメソッドだけでなく、EJB実装内のすべてのメソッドを公開します。

例外として、IndexEJBLocalビューを持つBeanがないことがわかります。

あなたの最も簡単な解決策は、私が信じている@LocalBean注釈を削除することです。

+0

ありがとう!私はインタフェースを削除し、ルックアップを使用してEJBを直接初期化しました。しかし、私は参照パスをjava:module/IndexEJB!index.ejb.IndexEJBに更新しなければならなかった –

関連する問題