diff --git a/assembly/assembly-wsmaster-war/pom.xml b/assembly/assembly-wsmaster-war/pom.xml
index bc8144103b1..0c4065554f9 100644
--- a/assembly/assembly-wsmaster-war/pom.xml
+++ b/assembly/assembly-wsmaster-war/pom.xml
@@ -324,6 +324,10 @@
org.eclipse.persistence
org.eclipse.persistence.core
+
+ org.eclipse.persistence
+ org.eclipse.persistence.extension
+
org.eclipse.persistence
org.eclipse.persistence.jpa
@@ -340,6 +344,14 @@
org.flywaydb
flyway-core
+
+ org.jgroups
+ jgroups
+
+
+ org.jgroups.kubernetes
+ kubernetes
+
org.postgresql
postgresql
diff --git a/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/WsMasterModule.java b/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/WsMasterModule.java
index 6ba97761e0e..8fc1cf0909c 100644
--- a/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/WsMasterModule.java
+++ b/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/WsMasterModule.java
@@ -83,6 +83,7 @@
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesInfrastructure;
import org.eclipse.che.workspace.infrastructure.openshift.OpenShiftInfraModule;
import org.eclipse.che.workspace.infrastructure.openshift.OpenShiftInfrastructure;
+import org.eclipse.persistence.config.CacheCoordinationProtocol;
import org.eclipse.persistence.config.PersistenceUnitProperties;
import org.flywaydb.core.internal.util.PlaceholderReplacer;
@@ -214,15 +215,23 @@ protected void configure() {
persistenceProperties.put(PersistenceUnitProperties.LOGGING_LEVEL, "SEVERE");
persistenceProperties.put(
PersistenceUnitProperties.NON_JTA_DATASOURCE, "java:/comp/env/jdbc/che");
-
bindConstant().annotatedWith(Names.named("jndi.datasource.name")).to("java:/comp/env/jdbc/che");
+ String infrastructure = System.getenv("CHE_INFRASTRUCTURE_ACTIVE");
if (Boolean.valueOf(System.getenv("CHE_MULTIUSER"))) {
persistenceProperties.put(
PersistenceUnitProperties.EXCEPTION_HANDLER_CLASS,
"org.eclipse.che.core.db.postgresql.jpa.eclipselink.PostgreSqlExceptionHandler");
- configureMultiUserMode();
+ if (OpenShiftInfrastructure.NAME.equals(infrastructure)
+ || KubernetesInfrastructure.NAME.equals(infrastructure)) {
+ persistenceProperties.put(
+ PersistenceUnitProperties.COORDINATION_PROTOCOL, CacheCoordinationProtocol.JGROUPS);
+ persistenceProperties.put(
+ PersistenceUnitProperties.COORDINATION_JGROUPS_CONFIG, "jgroups/che-tcp.xml");
+ }
+
+ configureMultiUserMode(persistenceProperties, infrastructure);
} else {
persistenceProperties.put(
PersistenceUnitProperties.EXCEPTION_HANDLER_CLASS,
@@ -234,7 +243,6 @@ protected void configure() {
new com.google.inject.persist.jpa.JpaPersistModule("main")
.properties(persistenceProperties));
- String infrastructure = System.getenv("CHE_INFRASTRUCTURE_ACTIVE");
if (OpenShiftInfrastructure.NAME.equals(infrastructure)) {
install(new OpenShiftInfraModule());
} else if (KubernetesInfrastructure.NAME.equals(infrastructure)) {
@@ -267,7 +275,8 @@ private void configureSingleUserMode() {
bind(org.eclipse.che.security.oauth.OAuthAuthenticationService.class);
}
- private void configureMultiUserMode() {
+ private void configureMultiUserMode(
+ Map persistenceProperties, String infrastructure) {
bind(TemplateProcessor.class).to(STTemplateProcessorImpl.class);
bind(DataSource.class).toProvider(org.eclipse.che.core.db.JndiDataSourceProvider.class);
diff --git a/assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/jgroups/che-tcp.xml b/assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/jgroups/che-tcp.xml
new file mode 100644
index 00000000000..6102277fb81
--- /dev/null
+++ b/assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/jgroups/che-tcp.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/deploy/kubernetes/helm/che/templates/deployment.yaml b/deploy/kubernetes/helm/che/templates/deployment.yaml
index 581a7e45d85..a76b89a977d 100644
--- a/deploy/kubernetes/helm/che/templates/deployment.yaml
+++ b/deploy/kubernetes/helm/che/templates/deployment.yaml
@@ -218,6 +218,10 @@ spec:
configMapKeyRef:
key: CHE_INFRA_KUBERNETES_INGRESS_ANNOTATIONS__JSON
name: che
+ - name: OPENSHIFT_KUBE_PING_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
- name: CHE_INFRA_KUBERNETES_SERVER__STRATEGY
valueFrom:
configMapKeyRef:
@@ -243,6 +247,8 @@ spec:
name: http
- containerPort: 8000
name: http-debug
+ - containerPort: 8888
+ name: jgroups-ping
readinessProbe:
httpGet:
path: /api/system/state
diff --git a/deploy/kubernetes/kubectl/che-kubernetes.yaml b/deploy/kubernetes/kubectl/che-kubernetes.yaml
index 72099f3439f..2aed3932dc7 100644
--- a/deploy/kubernetes/kubectl/che-kubernetes.yaml
+++ b/deploy/kubernetes/kubectl/che-kubernetes.yaml
@@ -249,6 +249,10 @@ items:
configMapKeyRef:
key: CHE_INFRA_KUBERNETES_INGRESS_ANNOTATIONS__JSON
name: che
+ - name: OPENSHIFT_KUBE_PING_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
- name: CHE_LOGS_APPENDERS_IMPL
valueFrom:
configMapKeyRef:
@@ -269,6 +273,8 @@ items:
name: http
- containerPort: 8000
name: http-debug
+ - containerPort: 8888
+ name: jgroups-ping
readinessProbe:
httpGet:
path: /api/system/state
diff --git a/deploy/openshift/che-openshift.yml b/deploy/openshift/che-openshift.yml
index a44aa1e58f2..92aec5e6987 100644
--- a/deploy/openshift/che-openshift.yml
+++ b/deploy/openshift/che-openshift.yml
@@ -37,6 +37,10 @@ items:
spec:
containers:
- env:
+ - name: OPENSHIFT_KUBE_PING_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
#CHE_MASTER_CONFIG
image: registry.devshift.net/che/che:291ebd9-fabric8-e470151
imagePullPolicy: IfNotPresent
@@ -53,6 +57,8 @@ items:
name: http
- containerPort: 8000
name: http-debug
+ - containerPort: 8888
+ name: jgroups-ping
readinessProbe:
httpGet:
path: /api/system/state