Repository: openmeetings
Updated Branches:
  refs/heads/3.3.x 831a84e30 -> cd13398cd


[OPENMEETINGS-1677] initial work on OpenJPA cluster automation


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/cd13398c
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/cd13398c
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/cd13398c

Branch: refs/heads/3.3.x
Commit: cd13398cdf07d671a8e5e2683d319258c03cd8fe
Parents: 831a84e
Author: Maxim Solodovnik <[email protected]>
Authored: Mon Jul 31 17:15:31 2017 +0700
Committer: Maxim Solodovnik <[email protected]>
Committed: Mon Jul 31 17:15:31 2017 +0700

----------------------------------------------------------------------
 .../core/remote/ScopeApplicationAdapter.java    |  1 +
 .../org/apache/openmeetings/IApplication.java   |  4 +++
 .../db/dao/basic/ConfigurationDao.java          | 14 +++++++++++
 .../openmeetings/web/app/Application.java       | 26 +++++++++++++++++++-
 .../classes/META-INF/db2_persistence.xml        |  1 +
 .../classes/META-INF/mssql_persistence.xml      |  1 +
 .../classes/META-INF/mysql_persistence.xml      |  1 +
 .../classes/META-INF/oracle_persistence.xml     |  1 +
 .../classes/META-INF/postgresql_persistence.xml |  1 +
 9 files changed, 49 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/cd13398c/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
index 9298545..47cc25e 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
@@ -165,6 +165,7 @@ public class ScopeApplicationAdapter extends 
MultiThreadedApplicationAdapter imp
                        IApplication iapp = 
(IApplication)Application.get(wicketApplicationName);
                        
iapp.setXFrameOptions(cfgDao.getConfValue(CONFIG_HEADER_XFRAME, String.class, 
HEADER_XFRAME_SAMEORIGIN));
                        
iapp.setContentSecurityPolicy(cfgDao.getConfValue(CONFIG_HEADER_CSP, 
String.class, HEADER_CSP_SELF));
+                       iapp.updateJpaAddresses(cfgDao);
                        EXT_PROCESS_TTL = 
cfgDao.getConfValue(CONFIG_EXT_PROCESS_TTL, Integer.class, "" + 
EXT_PROCESS_TTL);
                        Version.logOMStarted();
                        recordingDao.resetProcessingStatus(); //we are starting 
so all processing recordings are now errors

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/cd13398c/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java 
b/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java
index b8f5bc0..caf3dd3 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java
@@ -26,6 +26,7 @@ import java.util.function.Supplier;
 
 import javax.servlet.ServletContext;
 
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.room.Invitation;
 import org.apache.openmeetings.db.entity.room.StreamClient;
@@ -60,4 +61,7 @@ public interface IApplication {
        Map<String, StreamClient> getStreamClients();
        StreamClient update(StreamClient c);
        Set<Long> getActiveRoomIds();
+
+       //JPA
+       void updateJpaAddresses(ConfigurationDao dao);
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/cd13398c/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
index 85c7ed4..c35bdc9 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
@@ -37,6 +37,7 @@ import static 
org.apache.openmeetings.util.OpenmeetingsVariables.whiteboardDrawS
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.wicketApplicationName;
 
 import java.lang.reflect.Constructor;
+import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
@@ -46,6 +47,11 @@ import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
 import javax.persistence.TypedQuery;
 
+import org.apache.openjpa.conf.OpenJPAConfiguration;
+import org.apache.openjpa.event.RemoteCommitProvider;
+import org.apache.openjpa.event.TCPRemoteCommitProvider;
+import org.apache.openjpa.persistence.OpenJPAEntityManagerSPI;
+import org.apache.openjpa.persistence.OpenJPAPersistence;
 import org.apache.openmeetings.IApplication;
 import org.apache.openmeetings.db.dao.IDataProviderDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
@@ -80,6 +86,14 @@ public class ConfigurationDao implements 
IDataProviderDao<Configuration> {
        @Autowired
        private UserDao userDao;
 
+       public void updateClusterAddresses(String addresses) throws 
UnknownHostException {
+               OpenJPAConfiguration cfg = 
((OpenJPAEntityManagerSPI)OpenJPAPersistence.cast(em)).getConfiguration();
+               RemoteCommitProvider prov = 
cfg.getRemoteCommitEventManager().getRemoteCommitProvider();
+               if (prov instanceof TCPRemoteCommitProvider) {
+                       ((TCPRemoteCommitProvider)prov).setAddresses(addresses);
+               }
+       }
+
        /**
         * Retrieves Configuration regardless of its deleted status
         *

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/cd13398c/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
index 54f6f15..25a5516 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
@@ -32,6 +32,7 @@ import static 
org.apache.wicket.resource.JQueryResourceReference.getV3;
 import static org.red5.logging.Red5LoggerFactory.getLogger;
 import static 
org.springframework.web.context.support.WebApplicationContextUtils.getWebApplicationContext;
 
+import java.net.UnknownHostException;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -93,6 +94,7 @@ import org.apache.wicket.RestartResponseException;
 import org.apache.wicket.RuntimeConfigurationType;
 import org.apache.wicket.Session;
 import org.apache.wicket.ThreadContext;
+import org.apache.wicket.WicketRuntimeException;
 import 
org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession;
 import org.apache.wicket.authroles.authentication.AuthenticatedWebApplication;
 import 
org.apache.wicket.core.request.handler.BookmarkableListenerRequestHandler;
@@ -160,11 +162,14 @@ public class Application extends 
AuthenticatedWebApplication implements IApplica
                hazelcast.getCluster().addMembershipListener(new 
MembershipListener() {
                        @Override
                        public void memberRemoved(MembershipEvent 
membershipEvent) {
-                               //server down, need to remove all online clients
+                               //server down, need to remove all online 
clients, process persistent addresses
+                               
updateJpaAddresses(_getBean(ConfigurationDao.class));
                        }
 
                        @Override
                        public void memberAdded(MembershipEvent 
membershipEvent) {
+                               //server added, need to process persistent 
addresses
+                               
updateJpaAddresses(_getBean(ConfigurationDao.class));
                        }
                });
                setPageManagerProvider(new DefaultPageManagerProvider(this) {
@@ -781,4 +786,23 @@ public class Application extends 
AuthenticatedWebApplication implements IApplica
        public List<Member> getServers() {
                return new ArrayList<>(hazelcast.getCluster().getMembers());
        }
+
+       @Override
+       public void updateJpaAddresses(ConfigurationDao dao) {
+               StringBuilder sb = new StringBuilder();
+               String delim = "";
+               for (Member m : hazelcast.getCluster().getMembers()) {
+                       
sb.append(delim).append(m.getInetSocketAddress().getAddress().getHostAddress());
+                       delim = ";";
+               }
+               if (Strings.isEmpty(delim)) {
+                       sb.append("localhost");
+               }
+               try {
+                       dao.updateClusterAddresses(sb.toString());
+               } catch (UnknownHostException e) {
+                       log.error("Uexpected exception while updating JPA 
addresses", e);
+                       throw new WicketRuntimeException(e);
+               }
+       }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/cd13398c/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
index 9d68e0d..6500518 100644
--- 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
+++ 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
@@ -80,6 +80,7 @@
                        <property name="openjpa.QueryCache" value="true" />
                        <property name="openjpa.jdbc.DBDictionary" 
value="batchLimit=100" />
                        <property name="openjpa.jdbc.QuerySQLCache" 
value="false" />
+                       <property name="openjpa.RemoteCommitProvider" 
value="tcp(Addresses=127.0.0.1)" />
                </properties>
        </persistence-unit>
 </persistence>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/cd13398c/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
index 1d1fce9..a41e133 100644
--- 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
+++ 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
@@ -76,6 +76,7 @@
                        <property name="openjpa.QueryCache" value="true" />
                        <property name="openjpa.jdbc.DBDictionary" 
value="sqlserver(batchLimit=100,charTypeName=nchar,varcharTypeName=nvarchar,longVarcharTypeName=ntext)"
 />
                        <property name="openjpa.jdbc.QuerySQLCache" 
value="false" />
+                       <property name="openjpa.RemoteCommitProvider" 
value="tcp(Addresses=127.0.0.1)" />
                </properties>
        </persistence-unit>
 </persistence>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/cd13398c/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
index 34128ef..356503a 100644
--- 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
+++ 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
@@ -80,6 +80,7 @@
                        <property name="openjpa.QueryCache" value="true" />
                        <property name="openjpa.jdbc.DBDictionary" 
value="batchLimit=100" />
                        <property name="openjpa.jdbc.QuerySQLCache" 
value="false" />
+                       <property name="openjpa.RemoteCommitProvider" 
value="tcp(Addresses=127.0.0.1)" />
                </properties>
        </persistence-unit>
 </persistence>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/cd13398c/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
index 0105a43..6ddf090 100644
--- 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
+++ 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
@@ -80,6 +80,7 @@
                        <property name="openjpa.QueryCache" value="true" />
                        <property name="openjpa.jdbc.DBDictionary" 
value="oracle(UseTriggersForAutoAssign=true, MaxAutoAssignNameLength=28, 
BatchLimit=100)" />
                        <property name="openjpa.jdbc.QuerySQLCache" 
value="false" />
+                       <property name="openjpa.RemoteCommitProvider" 
value="tcp(Addresses=127.0.0.1)" />
                </properties>
        </persistence-unit>
 </persistence>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/cd13398c/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
index 2cab5de..cd233ce 100644
--- 
a/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
+++ 
b/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
@@ -79,6 +79,7 @@
                        <property name="openjpa.DataCache" value="true" />
                        <property name="openjpa.QueryCache" value="true" />
                        <property name="openjpa.jdbc.QuerySQLCache" 
value="false" />
+                       <property name="openjpa.RemoteCommitProvider" 
value="tcp(Addresses=127.0.0.1)" />
                </properties>
        </persistence-unit>
 </persistence>

Reply via email to