0

私は、アクションクラスとファサードを含む war ファイルと、ejb コンポーネント (ステートレス Bean、エンティティのカップル、および persistence.xml) を含む jar ファイルを glassfish3 にデプロイしました。私の問題は、ファサードからステートレス Bean へのリモート インターフェイスが見つからないことです。

私のビーンとインターフェースは次のようになります:

@Remote
public interface RecordService {...


@Stateless(name="RecordServiceBean", mappedName="ejb/RecordServiceJNDI")
public class RecordServiceImpl implements RecordService {

 @PersistenceContext(unitName="record_persistence_ctx")
 private EntityManager em;...

server.log を見ると、移植可能な jndi は次のようになります。

Portable JNDI names for EJB RecordServiceBean : [java:global/recordEjb/RecordServiceBean, java:global/recordEjb/RecordServiceBean!domain.service.RecordService]|#]

そして私のファサード:

...InitialContext ctx= new InitialContext();
    try{
       recordService = (RecordService) ctx.lookup("java:global/recordEjb/RecordServiceBean!domain.service.RecordService");
      }
      catch(Throwable t){
       System.out.println("ooops");
       try{
        recordService = (RecordService)ctx.lookup("java:global/recordEjb/RecordServiceImpl");
       }
       catch(Throwable t2){
        System.out.println("noooo!");
       }...



  }

ファサードが最初の呼び出しを行うと、この例外が発生します。

javax.naming.NamingException: Lookup failed for 'java:global/recordEjb/RecordServiceBean!domain.service.RecordService' in SerialContext  [Root exception is javax.naming.NamingException: ejb ref resolution error for remote business interfacedomain.service.RecordService [Root exception is java.lang.ClassNotFoundException: domain.service.RecordService]]

そして2番目の呼び出し:

javax.naming.NamingException: Lookup failed for 'java:global/recordEjb/RecordServiceBean' in SerialContext  [Root exception is javax.naming.NamingException: ejb ref resolution error for remote business interfacedomain.service.RecordService [Root exception is java.lang.ClassNotFoundException: domain.service.RecordService]]

@EJB アノテーションを使用して Bean を注入するテストも行いました。

@EJB(name="RecordServiceBean")
 private RecordService recordService;

しかし、それもうまくいきません。私は何を逃したのですか?ejb-jar.xml を試してみましたが、それは必須ではありません。この問題を解決する方法を教えてくれる人はいますか?

4

3 に答える 3

2

私はこの問題の解決策を見つけました。インターフェイスファイルをjarファイルにパックし、そのjarをwarfileのWEB-INF / libにドロップすると、問題は解決します。

于 2010-05-21T11:58:37.500 に答える
0

xml ファイルのすべての ejb 関連セクションをコメントアウトしてから、

@Stateless
public class RecordServiceImpl implements RecordService {

and then 

@EJB
private RecordService recordService;

彼らは、EJB 3.1 でプロセスをかなり脳死にしようとしました。また、JNDI ブラウジングは gf 3.0 にはなりませんでしたが、情報を掘り下げることができます

asadmin list-jndi-entries --context java:global/yourAppName
于 2010-09-29T18:30:03.627 に答える
0

サーバーが起動すると、インターフェイスのグローバル jndi 名がコンソールに表示されます。明示的に名前を付けて呼び出すのではなく、それらを使用してインターフェイスを検索します。

于 2010-06-15T12:27:32.487 に答える