1

私は、netbeans 7.2.1 と glassfish 3.1 を使用して Maven Ear プロジェクトを開発しています。ステートレス EJB Facade を JSF Managed Controller に使用したいのですが、EJB インジェクションが機能しなかったため、JNDI ルックアップを実行しようとしています。そこで、glassfish ロギングによって出力された次の移植可能な JNDI 名をコピーしました。

情報: EJB5181: EJB AirportFacade の移植可能な JNDI 名: [java:global/com.procc_FLAMS-ear_ear_1.0-SNAPSHOT/FLAMS-web-1.0-SNAPSHOT/AirportFacade, java:global/com.procc_FLAMS-ear_ear_1.0-SNAPSHOT/ FLAMS-web-1.0-SNAPSHOT/AirportFacade!com.procc.dao.AirportFacadeLocal]

プロジェクトを実行すると、ルックアップに失敗したと表示されます。

エラーメッセージ:

SEVERE: javax.naming.NamingException: Lookup failed for 'java:global/FLAMS-ear-1.0-SNAPSHOT/FLAMS-ejb-1.0-SNAPSHOT/AirportFacade!com.procc.dao.AirportFacadeLocal' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: FLAMS-ear-1.0-SNAPSHOT]

どうしてか分かりません ?

以下は pom ヘッダーです。

EAR モジュール:

<modelVersion>4.0.0</modelVersion>   <parent>
    <artifactId>FLAMS</artifactId>
    <groupId>com.procc</groupId>
    <version>1.0-SNAPSHOT</version>   </parent>

  <groupId>com.procc</groupId>   <artifactId>FLAMS-ear</artifactId>   <version>1.0-SNAPSHOT</version>   <packaging>ear</packaging>

  <name>FLAMS-ear</name>

EJB モジュール:

<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>FLAMS</artifactId>
<groupId>com.procc</groupId>
<version>1.0-SNAPSHOT</version>   </parent>

<groupId>com.procc</groupId>
<artifactId>FLAMS-ejb</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>ejb</packaging>

<name>FLAMS-ejb</name>

最後にステートレス EJB:

@Stateless public class AirportFacade extends AbstractFacade implements AirportFacadeLocal { @PersistenceContext(unitName = "flams_pu") private EntityManager em;

@Override
protected EntityManager getEntityManager() {
    return em;
}

public AirportFacade() {
    super(Airport.class);
} }

JSF Bean での JNDI ルックアップ:

@ManagedBean(name="airportController") @ViewScoped public class AirportController extends AbstractController implement Serializable {

private transient AirportFacade ejbFacade;

public AirportController() {
    super(Airport.class);
}

@PostConstruct public void init() {

    super.setFacade(ejbFacade);
    if(ejbFacade==null){
        try {
            Context ctx = new InitialContext();
            ejbFacade = (AirportFacade)ctx.lookup("java:global/com.procc_FLAMS-ear_ear_1.0-SNAPSHOT/FLAMS-web-1.0-SNAPSHOT/AirportFacade!com.procc.dao.AirportFacadeLocal");
        } catch (NamingException ex) {
            Logger.getLogger(AirportController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
4

0 に答える 0