質問

をしたいと思っていプロデューサーへの注入は、java.util.ResourceBundleの他のクラスを得るために局所的な文字列です。私のResourceBundleプロデューサーのようになります。

public class ResourceBundleProducer {
  @Inject       
  public Locale locale;

  @Inject       
  public FacesContext facesContext;

  @Produces
  public ResourceBundle getResourceBundle() {
    return ResourceBundle.getBundle("/messages", locale )
  }
}

のロケールとFacesContext作に対応する生産者からの縫い目3アルファ。ものの、残念ながらResourceBundleが直列化可能でないとできない制作しました。もしかしたら以下のエラーから溶接しようとした場合にアクセス情ページを呼びかけは、beanを使用する私のResourceBundle:

Caused by: org.jboss.weld.IllegalProductException: WELD-000054 Producers cannot produce non-serializable instances for injection into non-transient fields of passivating beans\\n\\nProducer\: org.jboss.weld.bean-/D:/Program Files (x86)/GlassFish-Tools-Bundle-For-Eclipse-1.2/glassfishv3/glassfish/domains/teachernews/applications/teachernews/-ProducerMethod-services.producers.ResourceBundleProducer.getResourceBundle()\\nInjection Point\: field web.PersonHome.bundle

ているResourceBundleResolverす。又はその他の機構に類似の機能性?感謝。

編集:

大丈夫、あのほとんど得したポイント) も受け入れの良い対処すのです!

私は別の例の場をプロデューサーな作品:a FlashProducer.A FacesContext-フラッシュもできない生産量Flashな直列化可能です。

役に立ちましたか?

解決

ものすべてのResourceBundle は直列化可能でない.見 こちらの.のメッセージが明確な

を出せない 非直列化可能 インスタンスへの注射 非transient 分野を不動態特性を有する不動態豆

を不動態特性を有する不動態豆 ???と思い ます。PersonHome いかのどちらかにステートフルセッション豆や@ConversationScoped。ょうか???その場合すべき お客様のバンドルの財産としての過渡

private transient @Inject ResourceBundle bundle;

他のヒント

としてのコメントのスレッドの受け答えのアーサー.しましたが、 このブログ など この を不動態化/活性化の実験です。の実験とMrDのコメントの一過性のある手開きのドアを入るとNULLを受与することが知られている。このように対応するため、非直列化可能でない会員の特性に不動態化処理できる豆類sessionscoped,conversationscoped、ステートセッション豆)から以下のソリューション:

private ResourceBundle bundle;

@PostConstruct
@PostActivate
public void getResourceBundle() {
    bundle = ResourceBundle.getBundle("/messages", locale );
}

このソリューションはさらに非直列化可能性員は、再度初期化時に出入りするの。

最終課題

最終課題では、噴射のSLF4jロガーた非直列化可能でない前slf4j1.5.3、 し見積もり:

としてのSLF4J版1.5.3,loggerインスタンス生直列化します。このように、直列化は、ホストクラスなが特 行動でも、ロガーはとして宣言されたインスタンス変数.

このようにしておslf4j依存関係が1.5.3以降のできる安全に注入するSLF4jロガーとして

@Produces
@LogbackLogger
public Logger produceLogger(InjectionPoint injectionPoint){
    return LoggerFactory.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
}

とい宣言され、予選:

@Qualifier
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER, TYPE})
public @interface LogbackLogger {
}

そして不動態化処理が可能なコーヒーを注入して

@Inject
@LogbackLogger
private Logger logger;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top