

JavaEE 7 + Wildfly 10 でウェブアプリケーションを作っています。  
ビルドにはgradleを使っています。

互いに独立したgradleプロジェクトとして、2つのウェブアプリケーションがあり、それぞれwarファイルとしてビルドしています。  
この2つのwarファイルは、単一のWildfly上にデプロイします。

現在、この2つのアプリケーション間で、セッションが共有できていません。  
少なくとも、Cookieの`JSESSIONID`には異なる値が提供されています。  
ゴールは、`@SessionScoped`をつけたCDI Beanのインスタンスが共有できることです。  
※2つのアプリケーションは独立してビルドされますが、同じjarを参照しています。そこに共通で使う`@RequestScoped`のクラスがあります。

ただ、制限事項があります。  
このWildflyサーバ上には、別のアプリケーションも乗っています。  
これに対しては、セッションは共有したくありません。

何か良い方法は無いでしょうか？


CC BY-SA 3.0
2017-08-10T06:42:28.553
37090
2019-06-05T08:03:30.487
8078
question
java gradle java-ee
2つのwarファイルによるアプリケーション間でセッションを共有したい


Wildfly
10であれば、[このページ](https://developer.jboss.org/thread/248749)の2番目にコメントされてる方法で実現できるかもしれません。

大変かもしれませんが...1つのwarに統合してしまうという選択肢もあります。


CC BY-SA 3.0
2017-08-10T07:36:57.173
37095
2017-08-10T07:36:57.173
21092
37090
answer


2つの独立したWARはServletContextが異なるのでオブジェクトを共有することはできません。

[JSR-000369 Java Servlet 4.0
Specification](https://download.oracle.com/otndocs/jcp/servlet-4-final-eval-
spec/index.html):

> 7.3 Session Scope  
>  HttpSession objects must be scoped at the application (or servlet context)
> level. The underlying mechanism, such as the cookie used to establish the
> session, can be the same for different contexts, but the object referenced,
> including the attributes in that object, must never be shared between
> contexts by the container.

[ServletContext](https://docs.oracle.com/javaee/7/api/javax/servlet/ServletContext.html)
API doc:

> There is one context per "web application" per Java Virtual Machine. (A "web
> application" is a collection of servlets and content installed under a
> specific subset of the server's URL namespace such as /catalog and possibly
> installed via a .war file.)

* * *

1つめの対応として考えられるのは、それらのWARを1つのEARにまとめることです。  
1つのEAR、つまり1つのweb applicationとすれば共有可能にできます。  
WildFlyにおける実現方法は [別の回答](https://ja.stackoverflow.com/a/37095/2808)で言及されている
`shared-session-config` になろうかと思います。

2つめの対応として考えられるのは、(コンテナが管理してくれないのなら)自分で管理しよう、という方策です。  
JBoss EAPのドキュメントで次のようなものがありましたので参考になるかもしれません:  
[Externalize HTTP Session Data to the JBoss Data
Grid](http://planet.jboss.org/post/externalize_http_session_data_to_the_jboss_data_grid):

>   3. Session Data Sharing. If you have a requirement for multiple
> applications to be able to share session data, this solution might be able
> to solve that use case as well.
>

JBoss Data Grid (JDG) は、WildFlyでは Infinispan に代替されるかと思います。


CC BY-SA 4.0
2019-04-26T21:11:24.997
54507
2019-04-26T21:11:24.997
2808
37090
answer