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>
