0

スケーラブルな JSF アプリケーションを作成しようとしています。ビュー ステートをクライアント側に保存したいのですが、CDI 注入属性を持つ ViewScoped ManagedBean に問題があります。

SomeService.java :

@Singleton
public class SomeService {
    // ...
}

SomeBean.java

@ManagedBean
@ViewScoped
public class SomeBean implements Serializable {

            @Inject
            private SomeService someService;
}

残念ながら、グラスフィッシュはシリアライズに失敗しますが、シリアライズsomeServiceしたくないのですが、再注入します。

someService逆シリアル化後にアクセスすると NullPointerException になる一時的なものにしようとしました。

何をすればよいでしょうか?

Seam Faces または CODI で CDI ViewScoped を使用できることは承知していますが、ほとんどの依存関係を最小限に抑えたいと考えています。

CDI に @ViewScoped を提供する JEE7 を待つこともできますが、数か月前に JEE7 を使用することはありません。

更新:
私は、それ自体が私の戦争にリンクされているjarにバンドルされた組み込みEJBを使用していたことを追加したかっただけです。NotSerializableException のスタック トレースには、次のメッセージがあります。 com.company.core.service.__EJB31_Generated__SomeService__Intf____Bean__

4

1 に答える 1

0

私は自分の質問に自己回答するのは好きではありませんが、さらに調査した結果、これは Mojarra 2.1.6 (私は Glassfish 3.1.2.2 を使用しています) のバグであり、現在 Mojarra 2.1.20 で解決されていることがわかりました。

Mojarra を更新するには、新しいバージョンをダウンロードするだけです (例: https://maven.java.net/content/repositories/releases/org/glassfish/javax.faces/2.1.20/javax.faces-2.1.20. jar ) を $GLASSFISH/modules ディレクトリに javax.faces.jar として配置します。

于 2013-03-25T16:59:31.510 に答える