2012-10-31 15 views
6

私は単純な仕事だと思ったことをまとめるのに少し苦労しています。 私はステートレスシングルトンビーンを持っています。これは私のアプリケーションの「ローダー」として使うつもりです。 BeanはJAR(loader.jar)ファイルに含まれ、EARのlibフォルダにあります。CDIを使用してEjbにロガーを注入する

EARのルートには、アプリケーションで使用されるステートレスセッションBeanの実装を含む別のjarがあります。

その後、私は実際にlog4jをラップ小さなロガークラス、作成しました:



    import javax.annotation.PostConstruct; 
    import javax.annotation.PreDestroy; 
    import javax.enterprise.context.RequestScoped; 
    import javax.enterprise.inject.Produces; 
    import javax.enterprise.inject.spi.InjectionPoint; 
    import javax.inject.Named; 

    import org.apache.log4j.Logger; 

    public class LoggerFactory { 
     private Logger logger; 

     public LoggerFactory(){ 
      logger = Logger.getLogger(this.getClass().getName()); 
     } 

     @Produces Logger getLogger(InjectionPoint caller){ 
      return Logger.getLogger(caller.getMember().getDeclaringClass().getName()); 
     } 
    } 

をそれから私は私がutils.jarとして指名したので、瓶の内側にこれを配置しました。このjarファイルでは、CDI仕様に従って、META-INFフォルダ内に空のbeans.xmlファイルを作成しました。 utils.jarは、自分のEARのlibフォルダにあります。さて、ステートレスシングルトンビーンで、私は、私はちょうどこの



    import javax.annotation.PostConstruct; 
    import javax.ejb.Singleton; 
    import javax.ejb.Startup; 
    import javax.inject.Inject; 

    import org.apache.log4j.Logger; 

    @Startup 
    @Singleton 
    public class Core { 
     @Inject 
     private Logger logger; 

     @PostConstruct 
     void init(){ 
      logger.info("Core started"); 
     } 
    } 

私はGlassFishの3.1.2に私のアプリを展開するときに私が手を書いてきました(ローダー)

前に言及した

私のローダーBeanの最初の起動時にプレーンなNPE。これはCDI呼び出しがまったく起こっていないと私に思い出させますが、私は間違いをしていることを誠実に理解できません。これまでのところ、次のように私の耳の構造がある

:あなたの助けを



     EAR 
     | 
     +---lib 
     |  +--loader.jar 
     |  +--utils.jar 
     |  +--log4j.xx.jar 
     | 
     +--MyStatelessSessionBean.jar 

どうもありがとう

答えて

0

あなたのテキストとあなたのEARの構造の間にいくつかの矛盾がありますが、あなたはutils.jarについて話すすなわちあなたのEAR構造図にそのような.jarはありません。

@EJBは、loader.jarの中にパッケージされていますが、これはあなたのEARの/libフォルダにあります。 loader.jarejb-jarなので、/libになりませんが、EARの最上位にあるはずです。 application.xml

<?xml version="1.0" encoding="UTF-8"?> 
<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6"> 
    <module> 
     <ejb>loader.jar</ejb> 
    </module> 
    ... 
    <library-directory>lib</library-directory> 
</application> 

がうまくいけば、これはあなたの問題を解決します。

+0

ありがとうございます、すぐに質問を更新しました。実際には、ステートレスセッションBean(MyStatelessSessionBean.jar)とシングルトークンステートレスBean(loader.jar)の2つのEJBを使用します。私はこの設定を試して、ここにできるだけ早くポストバックしようとします。あなたの助けをありがとう! – fabpicca

+0

実際にこの問題を解決したのは、ローダーを動的Webアプリケーションにパッケージングして(EARルートレベルで移動する)、utils.jarのlibをEAR/libフォルダに残していたことです。実際、application.xmlはオプションであり、現時点では単純化のために残しておきたいと思います。 jar-packagedローダーを作成しようとしますが、現時点ではwar-packagedローダーを作成します。ご協力ありがとうございました! – fabpicca

+0

アーカイブの種類はどちらもうまくいくはずです。あなたは 'application.xml'はオプションです。それが助けてくれてうれしい。 – rdcrng

関連する問題