私は単純な仕事だと思ったことをまとめるのに少し苦労しています。 私はステートレスシングルトンビーンを持っています。これは私のアプリケーションの「ローダー」として使うつもりです。 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
どうもありがとう
ありがとうございます、すぐに質問を更新しました。実際には、ステートレスセッションBean(MyStatelessSessionBean.jar)とシングルトークンステートレスBean(loader.jar)の2つのEJBを使用します。私はこの設定を試して、ここにできるだけ早くポストバックしようとします。あなたの助けをありがとう! – fabpicca
実際にこの問題を解決したのは、ローダーを動的Webアプリケーションにパッケージングして(EARルートレベルで移動する)、utils.jarのlibをEAR/libフォルダに残していたことです。実際、application.xmlはオプションであり、現時点では単純化のために残しておきたいと思います。 jar-packagedローダーを作成しようとしますが、現時点ではwar-packagedローダーを作成します。ご協力ありがとうございました! – fabpicca
アーカイブの種類はどちらもうまくいくはずです。あなたは 'application.xml'はオプションです。それが助けてくれてうれしい。 – rdcrng