1

私のJersey 1.19.1 Webサービスにはシングルトンオブジェクトが必要です。これは私の現在の実装である:Java Jersey REST Webservice:すべてのクラスタノードでシングルトンBeanを作成することはできません

@Singleton 
@ApplicationScoped 
@Stateless 
public class ValueObject { 

    public long downloads = 0; 

} 

@Path("downloads") 
public class Downloads { 

    @InjectParam 
    private ValueObject singleton; 

} 

ファイルがダウンロードされたときにカウンタが増加しています。 ファイルをダウンロードし、downloadCounter 1と0を要求した後、要求を処理した2つのGlassfishノードのいずれかによって、0が返されます。

私の目標は常に1になることです。私はそれをどのように達成できますか?

@ApplicationScopedを使用しないか、@Statelessの代わりに@Statefulを使用すると、同じ結果が得られます。

よろしく

ジョン

答えて

0

これは、GlassFishのでは不可能です。 in this StackOverflow answerに論じたように、EJB @Singleton注釈は、EJB 3.1仕様に従って、JVMごとに1つのインスタンスを有することになる。

AシングルトンセッションBeanは、一度アプリケーションごとにインスタンス化されたセッションBeanコンポーネントです。コンテナが多数の仮想マシンに分散されている場合、各アプリケーションは各JVMのシングルトンのBeanインスタンスを1つずつ持ちます。

また、WildFly 10にはこれをサポートするメカニズムがありますが、これは独自仕様ですソリューションであり、GlassFishで見つかったものではありません。

まだ実装されていませんが、Payara Serverの解決策が現在調査中です。

関連する問題