私は、アクションクラスとファサードを含む 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 を試してみましたが、それは必須ではありません。この問題を解決する方法を教えてくれる人はいますか?