You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by sa...@apache.org on 2015/11/06 11:50:56 UTC

[01/30] ode git commit: initial commit

Repository: ode
Updated Branches:
  refs/heads/ODE-563 [created] 26dacc201


initial commit


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

Branch: refs/heads/ODE-563
Commit: 50c4dfe022c664e50519c0f048795cf787383b7f
Parents: 482c873
Author: suba <su...@cse.mrt.ac.lk>
Authored: Sun Jun 7 16:13:27 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Sun Jun 7 16:13:27 2015 +0530

----------------------------------------------------------------------
 Rakefile                                        |  18 ++-
 .../java/org/apache/ode/axis2/ODEServer.java    |  50 +++++++
 .../apache/ode/bpel/hzapi/HazelcastCluster.java |  56 ++++++++
 .../apache/ode/bpel/engine/BpelServerImpl.java  |   5 +
 .../org/apache/ode/bpel/engine/Contexts.java    |   3 +
 clustering/pom.xml                              |  30 ++++
 .../java/org/apache/ode/clustering/Test.java    |   4 +
 .../hazelcast/HazelcastClusterImpl.java         | 140 +++++++++++++++++++
 .../hazelcast/HazelcastConstants.java           |  29 ++++
 .../hazelcast/HazelcastInstanceConfig.java      |  56 ++++++++
 dependencies.rb                                 |   1 +
 pom.xml                                         |   1 +
 12 files changed, 387 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/Rakefile
----------------------------------------------------------------------
diff --git a/Rakefile b/Rakefile
index 2a23e7b..1320043 100644
--- a/Rakefile
+++ b/Rakefile
@@ -83,10 +83,10 @@ define "ode" do
   desc "ODE Axis Integration Layer"
   define "axis2" do
     compile.with projects("bpel-api", "bpel-connector", "bpel-dao", "bpel-epr", "bpel-runtime",
-      "scheduler-simple", "bpel-schemas", "bpel-store", "utils", "agents"),
+      "scheduler-simple", "bpel-schemas", "bpel-store", "utils", "agents", "clustering"),
       AXIOM, AXIS2_ALL, COMMONS.lang, COMMONS.collections, COMMONS.httpclient, COMMONS.lang,
       DERBY, GERONIMO.kernel, GERONIMO.transaction, JAVAX.activation, JAVAX.servlet, JAVAX.stream,
-      JAVAX.transaction, JENCKS, WSDL4J, WS_COMMONS, XMLBEANS, AXIS2_MODULES.libs, SLF4J, LOG4J
+      JAVAX.transaction, JENCKS, WSDL4J, WS_COMMONS, XMLBEANS, AXIS2_MODULES.libs, SLF4J, LOG4J, HAZELCAST
 
     test.exclude 'org.apache.ode.axis2.management.*'
     test.with project("tools"), AXIOM, JAVAX.javamail, COMMONS.codec, COMMONS.httpclient, XERCES, WOODSTOX
@@ -99,12 +99,12 @@ define "ode" do
     libs = projects("axis2", "bpel-api", "bpel-compiler", "bpel-connector", "bpel-dao",
       "bpel-epr", "bpel-obj", "bpel-ql", "bpel-runtime", "scheduler-simple",
       "bpel-schemas", "bpel-store", "dao-hibernate", "jca-ra", "jca-server",
-      "utils", "dao-jpa", "agents"),
+      "utils", "dao-jpa", "agents", "clustering"),
       AXIS2_ALL, ANNONGEN, BACKPORT, COMMONS.codec, COMMONS.collections, COMMONS.fileupload, COMMONS.io, COMMONS.httpclient, COMMONS.beanutils,
       COMMONS.lang, COMMONS.pool, DERBY, DERBY_TOOLS, JACOB, JAXEN, JAVAX.activation, JAVAX.ejb, JAVAX.javamail,
       JAVAX.connector, JAVAX.jms, JAVAX.persistence, JAVAX.transaction, JAVAX.stream,  JIBX,
       GERONIMO.connector, GERONIMO.kernel, GERONIMO.transaction, LOG4J, OPENJPA, SAXON, TRANQL,
-      WOODSTOX, WSDL4J, WS_COMMONS, XALAN, XERCES, XMLBEANS, SPRING, AXIS2_MODULES.libs, SLF4J, LOG4J
+      WOODSTOX, WSDL4J, WS_COMMONS, XALAN, XERCES, XMLBEANS, SPRING, AXIS2_MODULES.libs, SLF4J, LOG4J, HAZELCAST
 
     package(:war).with(:libs=>libs).path("WEB-INF").tap do |web_inf|
       web_inf.merge project("dao-jpa-ojpa-derby").package(:zip)
@@ -166,7 +166,7 @@ define "ode" do
 
   desc "ODE APIs"
   define "bpel-api" do
-    compile.with projects("utils", "bpel-obj", "bpel-schemas"), WSDL4J, XERCES, SLF4J, LOG4J
+    compile.with projects("utils", "bpel-obj", "bpel-schemas"), WSDL4J, XERCES, SLF4J, LOG4J, HAZELCAST
     package :jar
   end
 
@@ -206,6 +206,12 @@ define "ode" do
     package :jar
   end
 
+  desc "ODE Clustering"
+   define "clustering" do
+     compile.with projects("bpel-api"),HAZELCAST, COMMONS.logging
+     package :jar
+   end
+
   desc "ODE BPEL Object Model"
   define "bpel-obj" do
     compile.with project("utils"), SAXON, WSDL4J, COMMONS.collections
@@ -225,7 +231,7 @@ define "ode" do
   desc "ODE Runtime Engine"
   define "bpel-runtime" do
     compile.with projects("bpel-api", "bpel-compiler", "bpel-dao", "bpel-epr", "bpel-obj", "bpel-schemas",
-      "bpel-store", "utils", "agents"),
+      "bpel-store", "utils", "agents","clustering"),
       COMMONS.collections, COMMONS.httpclient, JACOB, JAVAX.persistence, JAVAX.stream, JAXEN, SAXON, WSDL4J, XMLBEANS, SPRING, SLF4J, LOG4J
 
 

http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index 7cbf142..1547042 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -82,6 +82,9 @@ import org.apache.ode.store.ProcessStoreImpl;
 import org.apache.ode.utils.GUID;
 import org.apache.ode.utils.fs.TempFileManager;
 
+import org.apache.ode.clustering.hazelcast.*;
+import com.hazelcast.core.*;
+
 /**
  * Server class called by our Axis hooks to handle all ODE lifecycle management.
  *
@@ -133,6 +136,14 @@ public class ODEServer {
     
     public Runnable txMgrCreatedCallback;
 
+    private HazelcastInstanceConfig hazelcastInstanceConfig;
+
+    private HazelcastClusterImpl hazelcastClusterImpl;
+
+    private String clusteringState = "";
+
+    private boolean isClusteringEnabled;
+
     public void init(ServletConfig config, ConfigurationContext configContext) throws ServletException {
         init(config.getServletContext().getRealPath("/WEB-INF"), configContext);
     }
@@ -184,6 +195,11 @@ public class ODEServer {
         if (txMgrCreatedCallback != null) {
             txMgrCreatedCallback.run();
         }
+
+        clusteringState = _odeConfig.getClusteringState();
+        if (isClusteringEnabled()) initClustering();
+        else __log.info("Clustering has not been initialized");
+
         __log.debug("Creating data source.");
         initDataSource();
         __log.debug("Starting DAO.");
@@ -455,6 +471,39 @@ public class ODEServer {
         }
     }
 
+    public boolean isClusteringEnabled() {
+        boolean state;
+        if (clusteringState.equals("true")) state = true;
+        else state = false;
+        setClustering(state);
+        return state;
+    }
+
+    public void  setClustering (boolean state) {
+        isClusteringEnabled = state;
+    }
+
+    public boolean getClusteringState() {
+        return isClusteringEnabled;
+    }
+
+    /**
+     * Initialize the clustering if it is enabled
+     */
+    private void initClustering() {
+        String hzConfig = System.getProperty("hazelcast.config");
+        if (hzConfig != null) hazelcastInstanceConfig = new HazelcastInstanceConfig();
+        else {
+            File hzXml = new File(_configRoot, "hazelcast.xml");
+            if (!hzXml.isFile())
+                __log.error("hazelcast.xml does not exist or is not a file");
+            else hazelcastInstanceConfig = new HazelcastInstanceConfig(hzXml);
+        }
+        if (hazelcastInstanceConfig != null) {
+            hazelcastClusterImpl = new HazelcastClusterImpl(hazelcastInstanceConfig.getHazelcastInstance());
+        }
+    }
+
     /**
      * Initialize the DAO.
      *
@@ -533,6 +582,7 @@ public class ODEServer {
         _bpelServer.setCronScheduler(_cronScheduler);
 
         _bpelServer.setDaoConnectionFactory(_daoCF);
+        _bpelServer.setHazelcastCluster(hazelcastClusterImpl);
         _bpelServer.setInMemDaoConnectionFactory(new BpelDAOConnectionFactoryImpl(_scheduler, _odeConfig.getInMemMexTtl()));
         _bpelServer.setEndpointReferenceContext(eprContext);
         _bpelServer.setMessageExchangeContext(new MessageExchangeContextImpl(this));

http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java b/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
new file mode 100644
index 0000000..4e03c7d
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ode.bpel.hzapi;
+
+import com.hazelcast.core.Member;
+
+import java.util.List;
+
+public interface HazelcastCluster {
+
+    /**
+     * Initialization of the cluster
+     */
+    void init();
+
+    /**
+     * Get hostName + port nu of Member
+     * @param member
+     * @return
+     */
+    String getHazelCastNodeID(Member member);
+
+    /**
+     * Check whether current node is the leader or not.
+     */
+    void isLeader();
+
+    /**
+     * returns Current Nodes in the cluster.
+     * @return
+     */
+    List<String> getKnownNodes();
+
+    /**
+     * Return isMaster
+     * @return
+     */
+    boolean getIsMaster();
+
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
index 666ed65..92e9784 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
@@ -59,6 +59,7 @@ import org.apache.ode.bpel.iapi.Scheduler.MapSerializableRunnable;
 import org.apache.ode.bpel.iapi.Scheduler.Synchronizer;
 import org.apache.ode.bpel.intercept.MessageExchangeInterceptor;
 import org.apache.ode.bpel.o.OProcess;
+import org.apache.ode.clustering.hazelcast.HazelcastClusterImpl;
 import org.apache.ode.utils.msg.MessageBundle;
 import org.apache.ode.utils.stl.CollectionsX;
 import org.apache.ode.utils.stl.MemberOfFunction;
@@ -534,6 +535,10 @@ public class BpelServerImpl implements BpelServer, Scheduler.JobProcessor {
         _contexts.bindingContext = bc;
     }
 
+    public void setHazelcastCluster(HazelcastClusterImpl hzCImpl) {
+        _contexts.hazelcastClusterImpl = hzCImpl;
+    }
+
     public DebuggerContext getDebugger(QName pid) throws BpelEngineException {
         return _engine._activeProcesses.get(pid)._debugger;
     }

http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
index 9fa3258..115f4f7 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
@@ -28,6 +28,7 @@ import org.apache.ode.bpel.iapi.Scheduler;
 import org.apache.ode.bpel.intercept.MessageExchangeInterceptor;
 import org.apache.ode.bpel.engine.cron.CronScheduler;
 import org.apache.ode.bpel.evar.ExternalVariableModule;
+import org.apache.ode.clustering.hazelcast.HazelcastClusterImpl;
 
 import java.util.HashMap;
 import java.util.List;
@@ -46,6 +47,8 @@ public class Contexts {
 
     public CronScheduler cronScheduler;
 
+    public  HazelcastClusterImpl hazelcastClusterImpl;
+
     EndpointReferenceContext eprContext;
 
     BindingContext bindingContext;

http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/clustering/pom.xml
----------------------------------------------------------------------
diff --git a/clustering/pom.xml b/clustering/pom.xml
new file mode 100644
index 0000000..d0e4b7c
--- /dev/null
+++ b/clustering/pom.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<!--
+~ Licensed to the Apache Software Foundation (ASF) under one
+~ or more contributor license agreements. See the NOTICE file
+~ distributed with this work for additional information
+~ regarding copyright ownership. The ASF licenses this file
+~ to you under the Apache License, Version 2.0 (the
+~ "License"); you may not use this file except in compliance
+~ with the License. You may obtain a copy of the License at
+~
+~ http://www.apache.org/licenses/LICENSE-2.0
+~
+~ Unless required by applicable law or agreed to in writing,
+~ software distributed under the License is distributed on an
+~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~ KIND, either express or implied. See the License for the
+~ specific language governing permissions and limitations
+~ under the License.
+-->
+<project>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.apache.ode</groupId>
+    <artifactId>ode-clustering</artifactId>
+    <name>ODE :: Clustering</name>
+    <parent>
+        <groupId>org.apache.ode</groupId>
+        <artifactId>ode</artifactId>
+        <version>1.4-SNAPSHOT</version>
+    </parent>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/clustering/src/main/java/org/apache/ode/clustering/Test.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/Test.java b/clustering/src/main/java/org/apache/ode/clustering/Test.java
new file mode 100644
index 0000000..0e25733
--- /dev/null
+++ b/clustering/src/main/java/org/apache/ode/clustering/Test.java
@@ -0,0 +1,4 @@
+package org.apache.ode.clustering;
+
+public class Test {
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
new file mode 100644
index 0000000..afe0e95
--- /dev/null
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -0,0 +1,140 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ode.clustering.hazelcast;
+
+import com.hazelcast.core.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.apache.ode.bpel.hzapi.HazelcastCluster;
+
+/**
+ * This class implements necessary methods to build the cluster using hazelcast
+ */
+public class HazelcastClusterImpl implements HazelcastCluster{
+    private static final Log __log = LogFactory.getLog(HazelcastClusterImpl.class);
+
+    private HazelcastInstance _hazelcastInstance;
+    private boolean isMaster = false;
+    private String message = "";
+    private Member leader;
+
+    public HazelcastClusterImpl(HazelcastInstance hazelcastInstance) {
+        _hazelcastInstance = hazelcastInstance;
+        init();
+    }
+
+    public void init() {
+        // Registering this node in the cluster.
+        _hazelcastInstance.getCluster().addMembershipListener(new ClusterMemberShipListener());
+
+        // Register for listening to message listener
+        ITopic<String> clusterMessageTopic = _hazelcastInstance.getTopic("clusterMsg");
+        clusterMessageTopic.addMessageListener(new ClusterMessageListener());
+
+        Member localMember = _hazelcastInstance.getCluster().getLocalMember();
+        String localMemberID = getHazelCastNodeID(localMember);
+        __log.info("Registering HZ localMember ID " + localMemberID);
+        _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP)
+                .put(localMemberID, isMaster);
+    }
+
+    public String getHazelCastNodeID(Member member) {
+        String hostName = member.getSocketAddress().getHostName();
+        int port = member.getSocketAddress().getPort();
+        return hostName + ":" + port;
+    }
+
+    class ClusterManager {
+        IMap<String, String> lock_map;
+
+        ClusterManager() {
+            lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_LOCK_MAP);
+        }
+
+        void lock(String key) {
+            lock_map.lock(key);
+        }
+
+        void unlock(String key) {
+            lock_map.unlock(key);
+        }
+    }
+
+    class ClusterMemberShipListener implements MembershipListener {
+
+        @Override
+        public void memberAdded(MembershipEvent membershipEvent) {
+            // Noting to do here.
+        }
+
+        @Override
+        public void memberRemoved(MembershipEvent membershipEvent) {
+            isLeader();
+            // Allow Leader to update distributed map.
+            if (isMaster) {
+                String leftMemberID = getHazelCastNodeID(membershipEvent.getMember());
+                _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).remove(leftMemberID);
+                _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).replace(getHazelCastNodeID(leader), isMaster);
+            }
+        }
+
+        @Override
+        public void memberAttributeChanged(MemberAttributeEvent memberAttributeEvent) {
+            // Noting to do here.
+        }
+    }
+
+    class ClusterMessageListener implements MessageListener<String> {
+        @Override
+        public void onMessage(Message<String> msg) {
+            message = msg.getMessageObject();
+        }
+    }
+
+
+    public void isLeader() {
+        leader = _hazelcastInstance.getCluster().getMembers().iterator().next();
+        if (leader.localMember()) {
+            isMaster = true;
+        }
+        __log.info(isMaster);
+    }
+
+    public List<String> getKnownNodes() {
+        List<String> nodeList = new ArrayList<String>();
+        for (Object s : _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).keySet()) {
+            nodeList.add((String) _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).get(s));
+        }
+        return nodeList;
+    }
+
+    public boolean getIsMaster() {
+        return isMaster;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
new file mode 100644
index 0000000..e201b70
--- /dev/null
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2005-2011, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+*
+* WSO2 Inc. licenses this file to you under the Apache License,
+* Version 2.0 (the "License"); you may not use this file except
+* in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+package org.apache.ode.clustering.hazelcast;
+
+/**
+ * Constants used in Hazelcast based clustering implementation
+ */
+public final class HazelcastConstants {
+    public static final String ODE_CLUSTER_NODE_MAP = "ODE_NODE_ID_MAP";
+    public static final String ODE_CLUSTER_LOCK_MAP = "ODE_LOCK_MAP";
+
+    private HazelcastConstants() {
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceConfig.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceConfig.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceConfig.java
new file mode 100644
index 0000000..9e8c59b
--- /dev/null
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceConfig.java
@@ -0,0 +1,56 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+package org.apache.ode.clustering.hazelcast;
+
+import com.hazelcast.config.Config;
+import com.hazelcast.config.FileSystemXmlConfig;
+import com.hazelcast.core.*;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+/**
+ * This is to create hazelcast instance.
+ * It sets the config object using hazelcast.xml file.First, it looks for the hazelcast.config system property. If it is set, its value is used as the path.
+ * Else it will load the hazelcast.xml file using FileSystemXmlConfig()
+ */
+public class HazelcastInstanceConfig {
+    private HazelcastInstance hazelcastInstance;
+
+    public HazelcastInstanceConfig() {
+        hazelcastInstance = Hazelcast.newHazelcastInstance();
+    }
+
+    /**
+     *
+     * @param hzXml
+     */
+    public HazelcastInstanceConfig(File hzXml) {
+        try {
+            Config config = new FileSystemXmlConfig(hzXml);
+            hazelcastInstance = Hazelcast.newHazelcastInstance(config);
+        } catch (FileNotFoundException fnf) {
+        }
+    }
+
+    public HazelcastInstance getHazelcastInstance() {
+        return hazelcastInstance;
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/dependencies.rb
----------------------------------------------------------------------
diff --git a/dependencies.rb b/dependencies.rb
index 9a69f1a..33da5e4 100644
--- a/dependencies.rb
+++ b/dependencies.rb
@@ -75,6 +75,7 @@ GERONIMO            = struct(
   :transaction      =>"org.apache.geronimo.components:geronimo-transaction:jar:2.0.1",
   :connector        =>"org.apache.geronimo.components:geronimo-connector:jar:2.0.1"
 )
+HAZELCAST           ="com.hazelcast:hazelcast:jar:3.4.2"
 HIBERNATE           = [ "org.hibernate:hibernate-core:jar:3.3.2.GA", "javassist:javassist:jar:3.9.0.GA", "antlr:antlr:jar:2.7.6",
                         "asm:asm:jar:3.3.1", "cglib:cglib:jar:2.2", "net.sf.ehcache:ehcache:jar:1.2.3" ]
 HSQLDB              = "hsqldb:hsqldb:jar:1.8.0.7"

http://git-wip-us.apache.org/repos/asf/ode/blob/50c4dfe0/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index c43c2d0..f36373c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -165,6 +165,7 @@
         <module>jbi-karaf-pmapi-httpbinding</module>
         <module>axis2-war</module>
         <module>bpel-itest</module>
+        <module>clustering</module>
     </modules>
 
     <build>


[29/30] ode git commit: appended the Apache Licence in new files

Posted by sa...@apache.org.
appended the Apache Licence in new files


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

Branch: refs/heads/ODE-563
Commit: 6c92a254a2a0d90540cd36f2b23fe9ba6d7effa5
Parents: 8fe5546
Author: suba <su...@cse.mrt.ac.lk>
Authored: Fri Sep 18 13:56:20 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Fri Sep 18 13:56:20 2015 +0530

----------------------------------------------------------------------
 .../ode/bpel/clapi/ClusterProcessStore.java     | 18 +++++++++++
 .../hazelcast/HazelcastConstants.java           | 33 ++++++++++----------
 2 files changed, 35 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/6c92a254/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterProcessStore.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterProcessStore.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterProcessStore.java
index 45ff33c..ca792bc 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterProcessStore.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterProcessStore.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.ode.bpel.clapi;
 
 import java.util.Collection;

http://git-wip-us.apache.org/repos/asf/ode/blob/6c92a254/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
index aa787e9..8f204ff 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
@@ -1,20 +1,21 @@
 /*
-* Copyright (c) 2005-2011, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
-*
-* WSO2 Inc. licenses this file to you under the Apache License,
-* Version 2.0 (the "License"); you may not use this file except
-* in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.ode.clustering.hazelcast;
 
 /**


[27/30] ode git commit: Done cleanup within cluster implementation

Posted by sa...@apache.org.
Done cleanup within cluster implementation


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

Branch: refs/heads/ODE-563
Commit: 348ae9deb804ac5e9a9f1bafd1ebdbf53b490e1a
Parents: 43a8df8
Author: suba <su...@cse.mrt.ac.lk>
Authored: Sun Jul 26 15:55:32 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Sun Jul 26 15:55:32 2015 +0530

----------------------------------------------------------------------
 .../java/org/apache/ode/axis2/ODEServer.java    |  37 ++---
 .../ode/axis2/deploy/DeploymentPoller.java      |   3 +-
 .../ode/axis2/service/DeploymentWebService.java |  40 ++---
 .../apache/ode/bpel/clapi/ClusterManager.java   |   7 +-
 .../bpel/clapi/ProcessStoreClusterEvent.java    |  11 +-
 .../bpel/clapi/ProcessStoreClusterListener.java |  24 +++
 .../ode/il/config/OdeConfigProperties.java      |  12 +-
 .../ode/store/ClusterProcessStoreImpl.java      |   5 +-
 .../hazelcast/HazelcastClusterImpl.java         | 152 ++++++++++++++-----
 .../hazelcast/HazelcastConstants.java           |   6 +-
 repositories.rb                                 |   2 +-
 .../ode/scheduler/simple/SimpleScheduler.java   |  16 +-
 12 files changed, 192 insertions(+), 123 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index b3f5d2f..4860150 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -32,6 +32,7 @@ import org.apache.ode.axis2.service.ManagementService;
 import org.apache.ode.axis2.util.ClusterUrlTransformer;
 import org.apache.ode.bpel.clapi.ClusterManager;
 import org.apache.ode.bpel.clapi.ClusterMemberListener;
+import org.apache.ode.bpel.clapi.ClusterProcessStore;
 import org.apache.ode.bpel.connector.BpelServerConnector;
 import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
 import org.apache.ode.bpel.engine.BpelServerImpl;
@@ -119,7 +120,7 @@ public class ODEServer {
     
     public Runnable txMgrCreatedCallback;
 
-    private boolean isClusteringEnabled = false;
+    private boolean clusteringEnabled = false;
 
     public void init(ServletConfig config, ConfigurationContext configContext) throws ServletException {
         init(config.getServletContext().getRealPath("/WEB-INF"), configContext);
@@ -173,8 +174,8 @@ public class ODEServer {
             txMgrCreatedCallback.run();
         }
 
-        String clusteringState = _odeConfig.getClusteringState();
-        if (clusteringState != null && isClusteringEnabled(clusteringState)) {
+        clusteringEnabled = _odeConfig.isClusteringEnabled();
+        if (clusteringEnabled) {
             initClustering();
         } else __log.info(__msgs.msgOdeClusteringNotInitialized());
 
@@ -197,10 +198,9 @@ public class ODEServer {
 
         _store.loadAll();
         if (_clusterManager != null) {
-            _clusterManager.registerClusterProcessStoreMessageListener();
-            if (_scheduler instanceof SimpleScheduler) {
-                _clusterManager.registerClusterMemberListener((ClusterMemberListener) _scheduler);
-            }
+            _clusterManager.registerClusterMemberListener((ClusterMemberListener) _scheduler);
+            _clusterManager.setClusterProcessStore((ClusterProcessStore) _store);
+            _clusterManager.init(_configRoot);
         }
 
         try {
@@ -466,20 +466,8 @@ public class ODEServer {
         }
     }
 
-    private boolean isClusteringEnabled(String clusteringState) {
-        boolean state;
-        if (clusteringState.equals("true")) state = true;
-        else state = false;
-        setClustering(state);
-        return state;
-    }
-
-    private void  setClustering (boolean state) {
-        isClusteringEnabled = state;
-    }
-
-    public boolean getIsCluteringEnabled() {
-        return isClusteringEnabled;
+    public boolean isClusteringEnabled() {
+        return clusteringEnabled;
     }
 
     /**
@@ -493,7 +481,6 @@ public class ODEServer {
         } catch (Exception ex) {
             __log.error("Error while loading class : " + clusterImplName, ex);
         }
-        _clusterManager.init(_configRoot);
     }
 
     /**
@@ -524,15 +511,15 @@ public class ODEServer {
     }
 
     protected ProcessStoreImpl createProcessStore(EndpointReferenceContext eprContext, DataSource ds) {
-        if (isClusteringEnabled)
+        if (clusteringEnabled)
             return new ClusterProcessStoreImpl(eprContext, ds, _odeConfig.getDAOConnectionFactory(), _odeConfig, false, _clusterManager);
         else return new ProcessStoreImpl(eprContext, ds, _odeConfig.getDAOConnectionFactory(), _odeConfig, false);
     }
 
     protected Scheduler createScheduler() {
         SimpleScheduler scheduler;
-        if (isClusteringEnabled) {
-            scheduler = new SimpleScheduler(_clusterManager.getUuid(), new JdbcDelegate(_db.getDataSource()), _odeConfig.getProperties(), isClusteringEnabled);
+        if (clusteringEnabled) {
+            scheduler = new SimpleScheduler(_clusterManager.getNodeID(), new JdbcDelegate(_db.getDataSource()), _odeConfig.getProperties(), clusteringEnabled);
             scheduler.setClusterManager(_clusterManager);
         } else
             scheduler = new SimpleScheduler(new GUID().toString(), new JdbcDelegate(_db.getDataSource()), _odeConfig.getProperties());

http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index baa790b..169ca4f 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -49,7 +49,6 @@ import org.apache.ode.utils.WatchDog;
 import javax.xml.namespace.QName;
 import java.io.File;
 import java.io.FileFilter;
-import java.io.FilenameFilter;
 import java.io.IOException;
 import java.util.Collection;
 import java.util.HashMap;
@@ -99,7 +98,7 @@ public class DeploymentPoller {
     public DeploymentPoller(File deployDir, final ODEServer odeServer) {
         _odeServer = odeServer;
         _deployDir = deployDir;
-        clusterEnabled = _odeServer.getIsCluteringEnabled();
+        clusterEnabled = _odeServer.isClusteringEnabled();
         if (!_deployDir.exists()) {
             boolean isDeployDirCreated = _deployDir.mkdir();
             if (!isDeployDirCreated) {

http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
index 61bf00d..01e003b 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
@@ -20,24 +20,6 @@
 package org.apache.ode.axis2.service;
 
 
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Collection;
-import java.util.List;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-
-import javax.activation.DataHandler;
-import javax.wsdl.Definition;
-import javax.wsdl.WSDLException;
-import javax.wsdl.factory.WSDLFactory;
-import javax.wsdl.xml.WSDLReader;
-import javax.xml.namespace.QName;
-
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMNamespace;
@@ -45,27 +27,37 @@ import org.apache.axiom.om.OMText;
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axis2.AxisFault;
-import org.apache.ode.bpel.clapi.ClusterLock;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.description.AxisService;
-import org.apache.axis2.description.AxisOperation;
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.engine.AxisEngine;
 import org.apache.axis2.receivers.AbstractMessageReceiver;
 import org.apache.axis2.util.Utils;
+import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.commons.lang.StringUtils;
 import org.apache.ode.axis2.ODEServer;
 import org.apache.ode.axis2.OdeFault;
 import org.apache.ode.axis2.deploy.DeploymentPoller;
 import org.apache.ode.axis2.hooks.ODEAxisService;
-import org.apache.ode.bpel.iapi.BpelServer;
+import org.apache.ode.bpel.clapi.ClusterLock;
 import org.apache.ode.bpel.iapi.ProcessConf;
 import org.apache.ode.bpel.iapi.ProcessStore;
 import org.apache.ode.il.OMUtils;
-import org.apache.ode.utils.fs.FileUtils;
 import org.apache.ode.utils.Namespaces;
+import org.apache.ode.utils.fs.FileUtils;
+
+import javax.activation.DataHandler;
+import javax.wsdl.Definition;
+import javax.wsdl.WSDLException;
+import javax.wsdl.factory.WSDLFactory;
+import javax.wsdl.xml.WSDLReader;
+import javax.xml.namespace.QName;
+import java.io.*;
+import java.util.Collection;
+import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
 
 /**
  * Axis wrapper for process deployment.
@@ -95,7 +87,7 @@ public class DeploymentWebService {
         _store = store;
         _poller = poller;
         _odeServer = odeServer;
-        clusterEnabled = _odeServer.getIsCluteringEnabled();
+        clusterEnabled = _odeServer.isClusteringEnabled();
 
         Definition def;
         WSDLReader wsdlReader = WSDLFactory.newInstance().newWSDLReader();

http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
index 07d3d8d..5a2e0f9 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
@@ -38,7 +38,7 @@ public interface ClusterManager {
      * Return whether the local member is Master or not
      * @return
      */
-    boolean getIsMaster();
+    boolean isMaster();
 
     /**
      * Set the Process Store object which uses for clustering
@@ -55,8 +55,7 @@ public interface ClusterManager {
     /**
      * Register the cluster for message listener
      */
-    void registerClusterProcessStoreMessageListener();
-
+    void registerClusterProcessStoreMessageListener(ProcessStoreClusterListener listener);
     /**
      * Register Scheduler as ClusterMemberListener
      * @param listener
@@ -81,5 +80,5 @@ public interface ClusterManager {
     /**
      * Return local member's uuid in the cluster
      */
-    String getUuid();
+    String getNodeID();
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterEvent.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterEvent.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterEvent.java
index a396f6f..79d9a78 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterEvent.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterEvent.java
@@ -27,7 +27,8 @@ public abstract class ProcessStoreClusterEvent implements Serializable {
 
     protected String info ;
 
-    private String uuid;
+    /** Unique ID of the Node in the Cluster generating the Event */
+    private String eventGeneratingNode;
 
     public ProcessStoreClusterEvent(String deploymentUnit) {
         this.deploymentUnit = deploymentUnit;
@@ -38,12 +39,12 @@ public abstract class ProcessStoreClusterEvent implements Serializable {
         return "{ProcessStoreClusterEvent#" + deploymentUnit +"}";
     }
 
-    public void setUuid(String uuid) {
-        this.uuid = uuid;
+    public void setEventGeneratingNode(String uuid) {
+        this.eventGeneratingNode = uuid;
     }
 
-    public String getUuid() {
-        return uuid;
+    public String getEventGeneratingNode() {
+        return eventGeneratingNode;
     }
 
     public String getDuName() {

http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterListener.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterListener.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterListener.java
new file mode 100644
index 0000000..26f42cf
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterListener.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ode.bpel.clapi;
+
+public interface ProcessStoreClusterListener {
+    public void onProcessStoreClusterEvent(ProcessStoreClusterEvent message);
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
----------------------------------------------------------------------
diff --git a/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java b/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
index 5c0ed13..5697422 100644
--- a/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
+++ b/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
@@ -19,6 +19,10 @@
 
 package org.apache.ode.il.config;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ode.utils.SystemUtils;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -26,10 +30,6 @@ import java.io.IOException;
 import java.util.Map;
 import java.util.Properties;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.ode.utils.SystemUtils;
-
 /**
  * Configuration object used for configuring the intergration layer. The propereties are those likely to be common to all layers.
  *
@@ -295,8 +295,8 @@ public class OdeConfigProperties {
         return getProperty(OdeConfigProperties.PROP_DEPLOY_DIR);
     }
 
-    public String getClusteringState() {
-        return getProperty(OdeConfigProperties.PROP_CLUSTERING_ENABLED);
+    public boolean isClusteringEnabled() {
+        return Boolean.valueOf(getProperty(OdeConfigProperties.PROP_CLUSTERING_ENABLED, "false"));
     }
 
     public String getClusteringImplClass() {

http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index 51fea5a..d701e23 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -47,7 +47,6 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl implements Cluster
     public ClusterProcessStoreImpl(EndpointReferenceContext eprContext, DataSource ds, String persistenceType, OdeConfigProperties props, boolean createDatamodel, ClusterManager clusterManager) {
         super(eprContext,ds,persistenceType,props,createDatamodel);
         _clusterManager = clusterManager;
-        _clusterManager.setClusterProcessStore(this);
     }
 
     public Collection<QName> deploy(final File deploymentUnitDirectory) {
@@ -59,7 +58,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl implements Cluster
     private void publishProcessStoreDeployedEvent(String duName){
         deployedEvent = new ProcessStoreDeployedEvent(duName);
         _clusterManager.publishProcessStoreClusterEvent(deployedEvent);
-        __log.info("Completed actual deployment for " +duName +" by " +deployedEvent.getUuid());
+        __log.info("Completed actual deployment for " +duName +" by " +deployedEvent.getEventGeneratingNode());
     }
 
     public void deployProcesses(final String duName) {
@@ -121,7 +120,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl implements Cluster
     private void publishProcessStoreUndeployedEvent(String duName){
         undeployedEvent = new ProcessStoreUndeployedEvent(duName);
         _clusterManager.publishProcessStoreClusterEvent(undeployedEvent);
-        __log.info("Completed actual undeployment for " +duName +" by " +undeployedEvent.getUuid());
+        __log.info("Completed actual undeployment for " +duName +" by " +undeployedEvent.getEventGeneratingNode());
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index f68068a..9d2a554 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -18,8 +18,20 @@
  */
 package org.apache.ode.clustering.hazelcast;
 
-import com.hazelcast.core.*;
+import com.hazelcast.config.Config;
 import com.hazelcast.config.FileSystemXmlConfig;
+import com.hazelcast.config.ListenerConfig;
+import com.hazelcast.config.TopicConfig;
+import com.hazelcast.core.Hazelcast;
+import com.hazelcast.core.HazelcastInstance;
+import com.hazelcast.core.IMap;
+import com.hazelcast.core.ITopic;
+import com.hazelcast.core.Member;
+import com.hazelcast.core.MemberAttributeEvent;
+import com.hazelcast.core.MembershipEvent;
+import com.hazelcast.core.MembershipListener;
+import com.hazelcast.core.Message;
+import com.hazelcast.core.MessageListener;
 
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -34,21 +46,28 @@ import org.apache.ode.bpel.clapi.*;
 /**
  * This class implements necessary methods to build the cluster using hazelcast
  */
-public class HazelcastClusterImpl implements ClusterManager {
+public class HazelcastClusterImpl implements ClusterManager, ProcessStoreClusterListener {
     private static final Log __log = LogFactory.getLog(HazelcastClusterImpl.class);
 
     private HazelcastInstance _hazelcastInstance;
     private boolean isMaster = false;
+    private String nodeHostName;
     private String nodeID;
-    private String uuid;
-    private Member leader;
     private IMap<String, String> deployment_lock_map;
     private IMap<Long, Long> instance_lock_map;
-    private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
+    private ITopic<ProcessStoreClusterEvent> clusterDeploymentMessageTopic;
     private ClusterProcessStore _clusterProcessStore;
-    private ClusterMemberListener _listener;
     private ClusterLock<String> _hazelcastDeploymentLock;
     private ClusterLock<Long> _hazelcastInstanceLock;
+    private ClusterDeploymentMessageListener clusterDeploymentMessageListener;
+    private ClusterMemberShipListener clusterMemberShipListener;
+    private List<ClusterMemberListener> clusterMemberListenerList = null;
+
+    public HazelcastClusterImpl() {
+        clusterMemberShipListener = new ClusterMemberShipListener();
+        clusterDeploymentMessageListener = new ClusterDeploymentMessageListener();
+        clusterDeploymentMessageListener.registerClusterProcessStoreListener((ProcessStoreClusterListener)this);
+    }
 
     public void init(File configRoot) {
 
@@ -63,7 +82,8 @@ public class HazelcastClusterImpl implements ClusterManager {
                 __log.error("hazelcast.xml does not exist or is not a file");
             else
                 try {
-                    _hazelcastInstance = Hazelcast.newHazelcastInstance(new FileSystemXmlConfig(hzXml));
+                    Config config = loadConfig(hzXml);
+                    _hazelcastInstance = Hazelcast.newHazelcastInstance(config);
                 } catch (FileNotFoundException fnf) {
                     __log.error(fnf);
                 }
@@ -71,37 +91,71 @@ public class HazelcastClusterImpl implements ClusterManager {
 
         if (_hazelcastInstance != null) {
             // Registering this node in the cluster.
-            _hazelcastInstance.getCluster().addMembershipListener(new ClusterMemberShipListener());
+            //_hazelcastInstance.getCluster().addMembershipListener(new ClusterMemberShipListener());
             Member localMember = _hazelcastInstance.getCluster().getLocalMember();
-            nodeID = localMember.getInetSocketAddress().getHostName() +":" +localMember.getInetSocketAddress().getPort();
-            uuid = localMember.getUuid();
-            __log.info("Registering HZ localMember ID " + nodeID);
-
-            markAsMaster();
+            nodeHostName = localMember.getSocketAddress().getHostName() + ":" + localMember.getSocketAddress().getPort();
+            nodeID = localMember.getUuid();
+            __log.info("Registering HZ localMember:" + nodeHostName);
 
             deployment_lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_LOCK);
             instance_lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_PROCESS_INSTANCE_LOCK);
-            clusterMessageTopic = _hazelcastInstance.getTopic(HazelcastConstants.ODE_CLUSTER_MSG);
+            clusterDeploymentMessageTopic = _hazelcastInstance.getTopic(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_TOPIC);
 
             _hazelcastDeploymentLock = (ClusterLock) new HazelcastDeploymentLock(deployment_lock_map);
             _hazelcastInstanceLock = (ClusterLock) new HazelcastInstanceLock(instance_lock_map);
+
+            markAsMaster();
         }
     }
 
+    protected Config loadConfig(File hazelcastConfigFile) throws FileNotFoundException {
+        Config config = new FileSystemXmlConfig(hazelcastConfigFile);
+
+        //add Cluster membership listener
+        ListenerConfig clusterMemberShipListenerConfig = new ListenerConfig();
+        clusterMemberShipListenerConfig.setImplementation(clusterMemberShipListener);
+        config.addListenerConfig(clusterMemberShipListenerConfig);
+
+        //set topic message listener
+        ListenerConfig topicListenerConfig = new ListenerConfig();
+        topicListenerConfig.setImplementation(clusterDeploymentMessageListener);
+        TopicConfig topicConfig = config.getTopicConfig(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_TOPIC);
+        topicConfig.addMessageListenerConfig(topicListenerConfig);
+
+        return config;
+    }
+
     class ClusterMemberShipListener implements MembershipListener {
+
+        public ClusterMemberShipListener() {
+            clusterMemberListenerList = new ArrayList<ClusterMemberListener>();
+        }
+
+        public void registerClusterMemberListener(ClusterMemberListener listener) {
+            clusterMemberListenerList.add(listener);
+        }
+
         @Override
         public void memberAdded(MembershipEvent membershipEvent) {
-            String nodeId =  membershipEvent.getMember().getUuid();
-            __log.info("Member Added " +nodeId);
-            if(isMaster && _listener != null) _listener.memberAdded(nodeId);
+            String eventNodeID = membershipEvent.getMember().getUuid();
+            __log.info("Member Added " + eventNodeID);
+            if (isMaster) {
+                for (ClusterMemberListener listener : clusterMemberListenerList) {
+                    listener.memberAdded(eventNodeID);
+                }
+            }
         }
 
         @Override
         public void memberRemoved(MembershipEvent membershipEvent) {
-            String nodeId = membershipEvent.getMember().getUuid();
-            __log.info("Member Removed " + nodeId);
+            String eventNodeID = membershipEvent.getMember().getUuid();
+            __log.info("Member Removed " + eventNodeID);
             markAsMaster();
-            if(isMaster && _listener != null) _listener.memberRemoved(nodeId);
+            if (isMaster) {
+                for (ClusterMemberListener listener : clusterMemberListenerList) {
+                    listener.memberRemoved(eventNodeID);
+                }
+            }
         }
 
         @Override
@@ -111,36 +165,48 @@ public class HazelcastClusterImpl implements ClusterManager {
     }
 
     public void publishProcessStoreClusterEvent(ProcessStoreClusterEvent clusterEvent) {
-        clusterEvent.setUuid(uuid);
-        __log.info("Send " +clusterEvent.getInfo() +" Cluster Message " +"for " +clusterEvent.getDuName() +" [" +nodeID +"]");
-        clusterMessageTopic.publish(clusterEvent);
+        clusterEvent.setEventGeneratingNode(nodeID);
+        __log.info("Send " + clusterEvent.getInfo() + " Cluster Message " + "for " + clusterEvent.getDuName() + " [" + nodeHostName + "]");
+        clusterDeploymentMessageTopic.publish(clusterEvent);
     }
 
 
-    class ClusterMessageListener implements MessageListener<ProcessStoreClusterEvent> {
+    class ClusterDeploymentMessageListener implements MessageListener<ProcessStoreClusterEvent> {
+        List<ProcessStoreClusterListener> clusterProcessStoreListenerList = null;
+
+        public ClusterDeploymentMessageListener() {
+            clusterProcessStoreListenerList = new ArrayList<ProcessStoreClusterListener>();
+        }
+
+        public void registerClusterProcessStoreListener(ProcessStoreClusterListener listener) {
+            clusterProcessStoreListenerList.add(listener);
+        }
+
         @Override
         public void onMessage(Message<ProcessStoreClusterEvent> msg) {
-            handleEvent(msg.getMessageObject());
+            for (ProcessStoreClusterListener listener : clusterProcessStoreListenerList) {
+                listener.onProcessStoreClusterEvent(msg.getMessageObject());
+            }
         }
     }
 
-    private void handleEvent(ProcessStoreClusterEvent message) {
+    public void onProcessStoreClusterEvent(ProcessStoreClusterEvent message) {
         if (message instanceof ProcessStoreDeployedEvent) {
             ProcessStoreDeployedEvent event = (ProcessStoreDeployedEvent) message;
-            String eventUuid =  event.getUuid();
-            if (!uuid.equals(eventUuid)) {
+            String eventUuid = event.getEventGeneratingNode();
+            if (!nodeID.equals(eventUuid)) {
                 String duName = event.getDuName();
-                __log.info("Receive " +event.getInfo() +" Cluster Message " +"for " +event.getDuName() +" [" +nodeID +"]");
+                __log.info("Receive " + event.getInfo() + " Cluster Message " + "for " + event.getDuName() + " [" + nodeHostName + "]");
                 _clusterProcessStore.deployProcesses(duName);
             }
         }
 
         else if (message instanceof ProcessStoreUndeployedEvent) {
             ProcessStoreUndeployedEvent event = (ProcessStoreUndeployedEvent) message;
-            String eventUuid =  event.getUuid();
-            if (!uuid.equals(eventUuid)) {
+            String eventUuid = event.getEventGeneratingNode();
+            if (!nodeID.equals(eventUuid)) {
                 String duName = event.getDuName();
-                __log.info("Receive " +event.getInfo() +"  Cluster Message " +"for " +event.getDuName() +" [" +nodeID +"]");
+                __log.info("Receive " + event.getInfo() + "  Cluster Message " + "for " + event.getDuName() + " [" + nodeHostName + "]");
                 _clusterProcessStore.undeployProcesses(duName);
             }
         }
@@ -148,36 +214,38 @@ public class HazelcastClusterImpl implements ClusterManager {
     }
 
     private void markAsMaster() {
-        leader = _hazelcastInstance.getCluster().getMembers().iterator().next();
-        if (leader.localMember() && isMaster == false) {
+        Member member = _hazelcastInstance.getCluster().getMembers().iterator().next();
+        if (member.localMember() && isMaster == false) {
             isMaster = true;
-            if(_listener != null) _listener.memberElectedAsMaster(uuid);
+            for (ClusterMemberListener listener : clusterMemberListenerList) {
+                listener.memberElectedAsMaster(nodeID);
+            }
         }
         __log.info(isMaster);
     }
 
-    public boolean getIsMaster() {
+    public boolean isMaster() {
         return isMaster;
     }
 
-    public String getUuid() {
-        return uuid;
+    public String getNodeID() {
+        return nodeID;
     }
 
     public void setClusterProcessStore(ClusterProcessStore store) {
         _clusterProcessStore = store;
     }
 
-    public void registerClusterProcessStoreMessageListener() {
-        clusterMessageTopic.addMessageListener(new ClusterMessageListener());
+    public void registerClusterProcessStoreMessageListener(ProcessStoreClusterListener listener) {
+        clusterDeploymentMessageListener.registerClusterProcessStoreListener(listener);
     }
 
     public void registerClusterMemberListener(ClusterMemberListener listener) {
-        _listener = listener;
+        clusterMemberShipListener.registerClusterMemberListener(listener);
     }
 
     public void shutdown() {
-        if(_hazelcastInstance != null) _hazelcastInstance.getLifecycleService().shutdown();
+        if (_hazelcastInstance != null) _hazelcastInstance.shutdown();
     }
 
     public ClusterLock<String> getDeploymentLock(){

http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
index 76e7341..aa787e9 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
@@ -21,9 +21,9 @@ package org.apache.ode.clustering.hazelcast;
  * Constants used in Hazelcast based clustering implementation
  */
 public final class HazelcastConstants {
-    public static final String ODE_CLUSTER_DEPLOYMENT_LOCK = "DEPLOYMENT_LOCK";
-    public static final String ODE_CLUSTER_PROCESS_INSTANCE_LOCK  = "PROCESS_INSTANCE_LOCK ";
-    public static final String ODE_CLUSTER_MSG = "CLUSTER_MSG";
+    public static final String ODE_CLUSTER_DEPLOYMENT_LOCK = "ODE_DEPLOYMENT_LOCK";
+    public static final String ODE_CLUSTER_PROCESS_INSTANCE_LOCK  = "ODE_PROCESS_INSTANCE_LOCK ";
+    public static final String ODE_CLUSTER_DEPLOYMENT_TOPIC = "ODE_DEPLOYMENT_TOPIC";
 
     private HazelcastConstants() {
     }

http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/repositories.rb
----------------------------------------------------------------------
diff --git a/repositories.rb b/repositories.rb
index f6a40fa..e23cde1 100644
--- a/repositories.rb
+++ b/repositories.rb
@@ -15,5 +15,5 @@
 
 repositories.remote << "http://repo1.maven.org/maven2"
 repositories.remote << "http://people.apache.org/~vanto/m2/"
-repositories.remote << "https://repository.apache.org/content/groups/snapshots"
+repositories.remote << "http://repository.apache.org/content/groups/snapshots"
 repositories.release_to[:url] ||= "sftp://guest@localhost/home/guest"

http://git-wip-us.apache.org/repos/asf/ode/blob/348ae9de/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
index df33ae0..1da5571 100644
--- a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
+++ b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
@@ -482,7 +482,7 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
         if(!_isClusterEnabled) enqueueTasksReadnodeIds();
 
         else {
-            if (_clusterManager.getIsMaster()) enqueueTasksReadnodeIds();
+            if (_clusterManager.isMaster()) enqueueTasksReadnodeIds();
         }
 
         _todo.start();
@@ -725,16 +725,16 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
         }
     }
 
-    /*public void updateHeartBeat(String nodeId) {
+    public void updateHeartBeat(String nodeId) {
         if (nodeId == null)
             return;
 
-        if (_nodeId.equals(nodeId))
-            return;
+        /*if (_nodeId.equals(nodeId))
+            return;*/
 
-        _lastHeartBeat.put(nodeId, System.currentTimeMillis());
+        //_lastHeartBeat.put(nodeId, System.currentTimeMillis());
         _knownNodes.add(nodeId);
-    }*/
+    }
 
     boolean doLoadImmediate() {
         __log.debug("LOAD IMMEDIATE started");
@@ -815,7 +815,7 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
         final ArrayList<String> activeNodes;
 
         // for cluster mode
-        if (_isClusterEnabled && _clusterManager.getIsMaster()) {
+        if (_isClusterEnabled && _clusterManager.isMaster()) {
             activeNodes = (ArrayList) _clusterManager.getActiveNodes();
         }
         //for standalone ODE deployments
@@ -984,7 +984,7 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
             ArrayList<String> knownNodes = new ArrayList<String>(_knownNodes);
 
             // for cluster mode
-            if (_isClusterEnabled && _clusterManager.getIsMaster()) {
+            if (_isClusterEnabled && _clusterManager.isMaster()) {
                 ArrayList<String> memberList = (ArrayList) _clusterManager.getActiveNodes();
 
                 //find stale nodes


[22/30] ode git commit: removed additional imports

Posted by sa...@apache.org.
removed additional imports


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

Branch: refs/heads/ODE-563
Commit: 9a0b7428b3bd92ffe2a7d44c08efa67c8a93ccc3
Parents: dfb500c
Author: suba <su...@cse.mrt.ac.lk>
Authored: Sun Jul 12 20:54:47 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Sun Jul 12 20:54:47 2015 +0530

----------------------------------------------------------------------
 .../apache/ode/bpel/engine/BpelEngineImpl.java  | 19 +++++++++--
 .../ode/scheduler/simple/SimpleScheduler.java   | 33 ++++++++++++++------
 2 files changed, 41 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/9a0b7428/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
index feb4cd1..db2febb 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
@@ -26,7 +26,17 @@ import org.apache.ode.bpel.dao.MessageExchangeDAO;
 import org.apache.ode.bpel.dao.ProcessDAO;
 import org.apache.ode.bpel.dao.ProcessInstanceDAO;
 import org.apache.ode.bpel.evt.BpelEvent;
-import org.apache.ode.bpel.iapi.*;
+import org.apache.ode.bpel.iapi.BpelEngine;
+import org.apache.ode.bpel.iapi.BpelEngineException;
+import org.apache.ode.bpel.iapi.ContextException;
+import org.apache.ode.bpel.iapi.Endpoint;
+import org.apache.ode.bpel.iapi.Message;
+import org.apache.ode.bpel.iapi.MessageExchange;
+import org.apache.ode.bpel.iapi.OdeGlobalConfig;
+import org.apache.ode.bpel.iapi.MyRoleMessageExchange;
+import org.apache.ode.bpel.iapi.PartnerRoleMessageExchange;
+import org.apache.ode.bpel.iapi.ProcessState;
+import org.apache.ode.bpel.iapi.Scheduler;
 import org.apache.ode.bpel.iapi.MessageExchange.FailureType;
 import org.apache.ode.bpel.iapi.MessageExchange.MessageExchangePattern;
 import org.apache.ode.bpel.iapi.MessageExchange.Status;
@@ -50,7 +60,12 @@ import org.w3c.dom.Element;
 import javax.wsdl.Operation;
 import javax.wsdl.PortType;
 import javax.xml.namespace.QName;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
 import java.util.concurrent.TimeUnit;
 
 /**

http://git-wip-us.apache.org/repos/asf/ode/blob/9a0b7428/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
index a0d67ce..a56b86e 100644
--- a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
+++ b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
@@ -19,18 +19,33 @@
 
 package org.apache.ode.scheduler.simple;
 
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
+import java.util.Random;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.atomic.AtomicLong;
+
+import javax.transaction.Status;
+import javax.transaction.Synchronization;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+import javax.transaction.TransactionManager;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.ode.bpel.iapi.ContextException;
 import org.apache.ode.bpel.iapi.Scheduler;
 
-import javax.transaction.*;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.concurrent.*;
-import java.util.concurrent.atomic.AtomicLong;
-
 /**
  * A reliable and relatively simple scheduler that uses a database to persist information about
  * scheduled tasks.
@@ -493,9 +508,9 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
             return;
 
         _todo.stop();
-        _todo.clearTasks(UpgradeJobsTask.class);  //check   gsoc
+        _todo.clearTasks(UpgradeJobsTask.class);
         _todo.clearTasks(LoadImmediateTask.class);
-        _todo.clearTasks(CheckStaleNodes.class);  //check   gsoc
+        _todo.clearTasks(CheckStaleNodes.class);
         _processedSinceLastLoadTask.clear();
         _outstandingJobs.clear();
 


[25/30] ode git commit: Cluster Enabled Simple Scheduler-2

Posted by sa...@apache.org.
Cluster Enabled Simple Scheduler-2


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

Branch: refs/heads/ODE-563
Commit: 3f5ef53ab9f248d3f443196bd96de6507ad94148
Parents: 15f1883
Author: suba <su...@cse.mrt.ac.lk>
Authored: Tue Jul 21 00:21:05 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Tue Jul 21 00:21:05 2015 +0530

----------------------------------------------------------------------
 Rakefile                                        |   2 +-
 .../java/org/apache/ode/axis2/ODEServer.java    |   5 +-
 .../apache/ode/bpel/clapi/ClusterManager.java   |  17 ++
 .../ode/bpel/clapi/ClusterMemberListener.java   |  29 +++
 .../hazelcast/HazelcastClusterImpl.java         |  36 ++--
 .../ode/scheduler/simple/SchedulerListener.java |  27 ---
 .../ode/scheduler/simple/SimpleScheduler.java   | 185 +++++++++----------
 7 files changed, 157 insertions(+), 144 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/3f5ef53a/Rakefile
----------------------------------------------------------------------
diff --git a/Rakefile b/Rakefile
index 7c0fa67..5475227 100644
--- a/Rakefile
+++ b/Rakefile
@@ -208,7 +208,7 @@ define "ode" do
 
   desc "ODE Clustering"
    define "clustering" do
-     compile.with projects("bpel-api","bpel-store"),HAZELCAST, COMMONS.logging
+     compile.with projects("bpel-api","bpel-store","scheduler-simple"),HAZELCAST, COMMONS.logging
      package :jar
    end
 

http://git-wip-us.apache.org/repos/asf/ode/blob/3f5ef53a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index 6803350..222fedd 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -50,7 +50,6 @@ import org.apache.ode.store.ClusterProcessStoreImpl;
 import org.apache.ode.store.ProcessStoreImpl;
 import org.apache.ode.utils.GUID;
 import org.apache.ode.utils.fs.TempFileManager;
-import org.omg.CORBA.StringHolder;
 
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
@@ -198,7 +197,7 @@ public class ODEServer {
         _store.loadAll();
         if (_clusterManager != null) {
             _clusterManager.registerClusterProcessStoreMessageListener();
-            _clusterManager.setScheduler(_scheduler);
+            _clusterManager.registerClusterMemberListener(_scheduler);
         }
 
         try {
@@ -489,7 +488,7 @@ public class ODEServer {
             Class<?> clusterImplClass = this.getClass().getClassLoader().loadClass(clusterImplName);
             _clusterManager = (ClusterManager) clusterImplClass.newInstance();
         } catch (Exception ex) {
-            __log.error("Error while loading class : " +clusterImplName ,ex);
+            __log.error("Error while loading class : " + clusterImplName, ex);
         }
         _clusterManager.init(_configRoot);
     }

http://git-wip-us.apache.org/repos/asf/ode/blob/3f5ef53a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
index 70d7c03..a00959a 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
@@ -19,6 +19,7 @@
 package org.apache.ode.bpel.clapi;
 
 import java.io.File;
+import java.util.List;
 
 public interface ClusterManager {
 
@@ -57,6 +58,12 @@ public interface ClusterManager {
     void registerClusterProcessStoreMessageListener();
 
     /**
+     * Register Scheduler as ClusterMemberListener
+     * @param scheduler
+     */
+    void registerClusterMemberListener(Object scheduler);
+
+    /**
      * Return deployment lock for cluster
      */
     ClusterLock getDeploymentLock();
@@ -65,4 +72,14 @@ public interface ClusterManager {
      * Return instance lock for cluster
      */
     ClusterLock getInstanceLock();
+
+    /**
+     * Return active node list in the cluster
+     */
+    List<String> getActiveNodes();
+
+    /**
+     * Return local member's uuid in the cluster
+     */
+    String getUuid();
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/3f5ef53a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterMemberListener.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterMemberListener.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterMemberListener.java
new file mode 100644
index 0000000..4225f7d
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterMemberListener.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ode.bpel.clapi;
+
+public interface ClusterMemberListener {
+
+    void memberAdded(String nodeId);
+
+    void memberRemoved(String nodeId);
+
+    void memberElectedAsMaster();
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ode/blob/3f5ef53a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index 63a889a..971df3e 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -30,7 +30,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import org.apache.ode.bpel.clapi.*;
-import org.apache.ode.bpel.iapi.Scheduler;
+import org.apache.ode.scheduler.simple.SimpleScheduler;
 
 /**
  * This class implements necessary methods to build the cluster using hazelcast
@@ -47,7 +47,7 @@ public class HazelcastClusterImpl implements ClusterManager {
     private IMap<Long, Long> instance_lock_map;
     private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
     private ClusterProcessStore _clusterProcessStore;
-    private Scheduler _scheduler;
+    private SimpleScheduler _scheduler;
     private ClusterLock<String> _hazelcastDeploymentLock;
     private ClusterLock<Long> _hazelcastInstanceLock;
 
@@ -77,7 +77,6 @@ public class HazelcastClusterImpl implements ClusterManager {
             nodeID = localMember.getInetSocketAddress().getHostName() +":" +localMember.getInetSocketAddress().getPort();
             uuid = localMember.getUuid();
             __log.info("Registering HZ localMember ID " + nodeID);
-            markAsMaster();
 
             deployment_lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_LOCK);
             instance_lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_PROCESS_INSTANCE_LOCK);
@@ -93,15 +92,15 @@ public class HazelcastClusterImpl implements ClusterManager {
         public void memberAdded(MembershipEvent membershipEvent) {
             String nodeId =  membershipEvent.getMember().getUuid();
             __log.info("Member Added " +nodeId);
-            if(isMaster) _simpleScheduler.memberAdded(nodeId);
+            _scheduler.memberAdded(nodeId);
         }
 
         @Override
         public void memberRemoved(MembershipEvent membershipEvent) {
-            String nodeId =  membershipEvent.getMember().getUuid();
-            __log.info("Member Removed " +nodeId);
+            String nodeId = membershipEvent.getMember().getUuid();
+            __log.info("Member Removed " + nodeId);
             markAsMaster();
-            if(isMaster) _simpleScheduler.memberRemoved(nodeId, uuid);
+            _scheduler.memberRemoved(nodeId);
         }
 
         @Override
@@ -149,9 +148,9 @@ public class HazelcastClusterImpl implements ClusterManager {
 
     private void markAsMaster() {
         leader = _hazelcastInstance.getCluster().getMembers().iterator().next();
-        if (leader.localMember()) {
+        if (leader.localMember() && isMaster == false) {
             isMaster = true;
-            _simpleScheduler.setIsMasterNode(true);
+            _scheduler.memberElectedAsMaster();
         }
         __log.info(isMaster);
     }
@@ -168,15 +167,16 @@ public class HazelcastClusterImpl implements ClusterManager {
         _clusterProcessStore = store;
     }
 
-    public void setScheduler(Scheduler scheduler) {
-        _scheduler = scheduler;
-        _scheduler.setClusterManager(this);
-    }
-
     public void registerClusterProcessStoreMessageListener() {
         clusterMessageTopic.addMessageListener(new ClusterMessageListener());
     }
 
+    public void registerClusterMemberListener(Object scheduler) {
+        _scheduler = (SimpleScheduler) scheduler;
+        markAsMaster();
+        _scheduler.setClusterManager(this);
+    }
+
     public void shutdown() {
         if(_hazelcastInstance != null) _hazelcastInstance.getLifecycleService().shutdown();
     }
@@ -189,11 +189,11 @@ public class HazelcastClusterImpl implements ClusterManager {
         return _hazelcastInstanceLock;
     }
 
-    public List<String> getKnownNodes() {
-        List<String> nodesList = new ArrayList<String>();
+    public List<String> getActiveNodes() {
+        List<String> nodeList = new ArrayList<String>();
         for(Member m : _hazelcastInstance.getCluster().getMembers())
-          nodesList.add(m.getUuid()) ;
-        return nodesList;
+          nodeList.add(m.getUuid()) ;
+        return nodeList;
     }
 }
 

http://git-wip-us.apache.org/repos/asf/ode/blob/3f5ef53a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerListener.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerListener.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerListener.java
deleted file mode 100644
index 3786912..0000000
--- a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerListener.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ode.scheduler.simple;
-
-public interface SchedulerListener {
-
-    void memberAdded(String nodeId);
-
-    void memberRemoved(String nodeId,String masterId);
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ode/blob/3f5ef53a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
index 3b6ec4d..a0dbf5a 100644
--- a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
+++ b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
@@ -22,6 +22,7 @@ package org.apache.ode.scheduler.simple;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.ode.bpel.clapi.ClusterManager;
+import org.apache.ode.bpel.clapi.ClusterMemberListener;
 import org.apache.ode.bpel.iapi.ContextException;
 import org.apache.ode.bpel.iapi.Scheduler;
 
@@ -52,7 +53,7 @@ import java.util.concurrent.atomic.AtomicLong;
  * @author Maciej Szefler ( m s z e f l e r @ g m a i l . c o m )
  *
  */
-public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener {
+public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberListener {
     private static final Log __log = LogFactory.getLog(SimpleScheduler.class);
 
     private static final int DEFAULT_TRANSACTION_TIMEOUT = 60 * 1000;
@@ -102,13 +103,21 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
 
     private boolean _isClusterEnabled;
 
+    private String _masterId;
+
     private ClusterManager _clusterManager;
 
-    /** All the nodes we know about */
-    private CopyOnWriteArraySet<String> _knownNodes = new CopyOnWriteArraySet<String>();
+    /** All the nodes which are taken from the database*/
+    private CopyOnWriteArraySet<String> _dbNodes = new CopyOnWriteArraySet<String>();
+
+    /** All the stale nodes */
+    private CopyOnWriteArraySet<String> _staleNodes = new CopyOnWriteArraySet<String>();
+
+    /** All the nodes when members are added to the cluster*/
+    private CopyOnWriteArraySet<String> _clusterNodes = new CopyOnWriteArraySet<String>();
 
     /** When we last heard from our nodes. */
-    private ConcurrentHashMap<String, Long> _lastHeartBeat = new ConcurrentHashMap<String, Long>();
+    //private ConcurrentHashMap<String, Long> _lastHeartBeat = new ConcurrentHashMap<String, Long>();
 
     /** Set of outstanding jobs, i.e., jobs that have been enqueued but not dequeued or dispatched yet.
         Used to avoid cases where a job would be dispatched twice if the server is under high load and
@@ -460,13 +469,15 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
         _processedSinceLastLoadTask.clear();
         _outstandingJobs.clear();
 
-        _knownNodes.clear();
+        _dbNodes.clear();
+        _clusterNodes.clear();
+        _staleNodes.clear();
 
         try {
             execTransaction(new Callable<Void>() {
 
                 public Void call() throws Exception {
-                    _knownNodes.addAll(_db.getNodeIds());
+                    _dbNodes.addAll(_db.getNodeIds());
                     return null;
                 }
 
@@ -475,21 +486,21 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
             __log.error("Error retrieving node list.", ex);
             throw new ContextException("Error retrieving node list.", ex);
         }
+        _clusterNodes.add(_nodeId);
 
         long now = System.currentTimeMillis();
 
         // Pretend we got a heartbeat...
-        for (String s : _knownNodes) _lastHeartBeat.put(s, now);
+        //for (String s : _knownNodes) _lastHeartBeat.put(s, now);
 
         // schedule immediate job loading for now!
         _todo.enqueue(new LoadImmediateTask(now));
 
         // schedule check for stale nodes, make it random so that the nodes don't overlap.
-        if (!_isClusterEnabled)
-            _todo.enqueue(new CheckStaleNodes(now + randomMean(_staleInterval)));
+        _todo.enqueue(new CheckStaleNodes(now + randomMean(_staleInterval)));
 
         // do the upgrade sometime (random) in the immediate interval.
-        enqueUpgradeJobsTask(now);
+        _todo.enqueue(new UpgradeJobsTask(now + randomMean(_immediateInterval)));
 
         _todo.start();
         _running = true;
@@ -517,16 +528,33 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
         _running = false;
     }
 
-    public void memberAdded(final String nodeId) {
-        _todo.enqueue(new UpgradeJobsTask(System.currentTimeMillis()+ randomMean(_immediateInterval)));
+    public void memberAdded(String nodeId) {
+        _clusterNodes.add(nodeId);
     }
 
-    public void memberRemoved(final String nodeId, final String masterId) {
-        recoverClusterStaleNodes(nodeId, masterId);
+    public void memberRemoved(String nodeId) {
+        _staleNodes.add(nodeId);
     }
 
-    public void enqueUpgradeJobsTask(long now) {
-        _todo.enqueue(new UpgradeJobsTask(now + randomMean(_immediateInterval)));
+    // Do enqueue CheckStaleNodes and UpgradeJobsTask after a new master is identified.
+    public void memberElectedAsMaster() {
+        _masterId = _nodeId;
+        _todo.enqueue(new CheckStaleNodes(System.currentTimeMillis() + randomMean(_staleInterval)));
+        _todo.enqueue(new UpgradeJobsTask(System.currentTimeMillis() + randomMean(_immediateInterval)));
+        _dbNodes.clear();
+        try {
+            execTransaction(new Callable<Void>() {
+
+                public Void call() throws Exception {
+                    _dbNodes.addAll(_db.getNodeIds());
+                    return null;
+                }
+
+            });
+        } catch (Exception ex) {
+            __log.error("Error retrieving node list.", ex);
+            throw new ContextException("Error retrieving node list.", ex);
+        }
     }
 
     class RunJob implements Callable<Void> {
@@ -701,7 +729,7 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
         }
     }
 
-    public void updateHeartBeat(String nodeId) {
+    /*public void updateHeartBeat(String nodeId) {
         if (nodeId == null)
             return;
 
@@ -710,7 +738,7 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
 
         _lastHeartBeat.put(nodeId, System.currentTimeMillis());
         _knownNodes.add(nodeId);
-    }
+    }*/
 
     boolean doLoadImmediate() {
         __log.debug("LOAD IMMEDIATE started");
@@ -788,10 +816,19 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
 
     boolean doUpgrade() {
         __log.debug("UPGRADE started");
-        final ArrayList<String> knownNodes = new ArrayList<String>(_knownNodes);
-        // Don't forget about self.
-        knownNodes.add(_nodeId);
-        Collections.sort(knownNodes);
+        final ArrayList<String> activeNodes;
+
+        // for cluster mode
+        if (_isClusterEnabled && _clusterManager.getIsMaster()) {
+            activeNodes = (ArrayList) _clusterManager.getActiveNodes();
+        }
+        //for standalone ODE deployments
+        else {
+            activeNodes = new ArrayList<String>();
+            activeNodes.add(_nodeId);
+        }
+
+        Collections.sort(activeNodes);
 
         // We're going to try to upgrade near future jobs using the db only.
         // We assume that the distribution of the trailing digits in the
@@ -803,9 +840,9 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
             return execTransaction(new Callable<Boolean>() {
 
                 public Boolean call() throws Exception {
-                    int numNodes = knownNodes.size();
+                    int numNodes = activeNodes.size();
                     for (int i = 0; i < numNodes; ++i) {
-                        String node = knownNodes.get(i);
+                        String node = activeNodes.get(i);
                         _db.updateAssignToNode(node, i, numNodes, maxtime);
                     }
                     return true;
@@ -822,41 +859,6 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
 
     }
 
-    boolean doClusterJobsUpgrade() {
-            __log.debug("UPGRADE started for Cluster Mode");
-            final ArrayList<String> knownNodes = _clusterManager.getKnownNodes();
-            Collections.sort(knownNodes);
-
-            // We're going to try to upgrade near future jobs using the db only.
-            // We assume that the distribution of the trailing digits in the
-            // scheduled time are uniformly distributed, and use modular division
-            // of the time by the number of nodes to create the node assignment.
-            // This can be done in a single update statement.
-            final long maxtime = System.currentTimeMillis() + _nearFutureInterval;
-            try {
-                return execTransaction(new Callable<Boolean>() {
-
-                    public Boolean call() throws Exception {
-                        int numNodes = knownNodes.size();
-                        for (int i = 0; i < numNodes; ++i) {
-                            String node = knownNodes.get(i);
-                            _db.updateAssignToNode(node, i, numNodes, maxtime);
-                        }
-                        return true;
-                    }
-
-                });
-
-            } catch (Exception ex) {
-                __log.error("Database error upgrading jobs.", ex);
-                return false;
-            } finally {
-                __log.debug("UPGRADE complete");
-            }
-
-        }
-
-
     /**
      * Re-assign stale node's jobs to self.
      * @param nodeId
@@ -876,10 +878,11 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
                 __log.debug("reassigned " + numrows + " jobs to self. ");
             }
 
-            // We can now forget about this node, if we see it again, it will be
-            // "new to us"
-            _knownNodes.remove(nodeId);
-            _lastHeartBeat.remove(nodeId);
+            if(_isClusterEnabled) _staleNodes.remove(nodeId);
+
+            // If the stale node id is in _clusterNodes or _dbNodes, remove it.
+            _clusterNodes.remove(nodeId);
+            _dbNodes.remove(nodeId);
 
             // Force a load-immediate to catch anything new from the recovered node.
             doLoadImmediate();
@@ -900,31 +903,6 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
 //        return delay;
 //    }
 
-    void recoverClusterStaleNodes(final String nodeId, final String masterId) {
-        if (__log.isDebugEnabled()) {
-            __log.debug("recovering stale nodes for Cluster Mode " + nodeId);
-        }
-        try {
-            int numrows = execTransaction(new Callable<Integer>() {
-                public Integer call() throws Exception {
-                    return _db.updateReassign(nodeId, masterId);
-                }
-            });
-
-            if (__log.isDebugEnabled()) {
-                __log.debug("reassigned " + numrows + " jobs to master node. ");
-            }
-
-            // Force a load-immediate to catch anything new from the recovered node.
-            doLoadImmediate();
-
-        } catch (Exception ex) {
-            __log.error("Database error reassigning node.", ex);
-        } finally {
-            __log.debug("node recovery complete");
-        }
-    }
-
     private abstract class SchedulerTask extends Task implements Runnable {
         SchedulerTask(long schedDate) {
             super(schedDate);
@@ -979,8 +957,7 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
 
             boolean success = false;
             try {
-               if (_isClusterEnabled && _clusterManager.getIsMaster()) success = doClusterJobsUpgrade();
-                else success = doUpgrade();
+              success = doUpgrade();
             } finally {
                 long future = System.currentTimeMillis() + (success ? (long) (_nearFutureInterval * .50) : 1000);
                 _nextUpgrade.set(future);
@@ -1003,14 +980,32 @@ public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener
         public void run() {
             _todo.enqueue(new CheckStaleNodes(System.currentTimeMillis() + _staleInterval));
             __log.debug("CHECK STALE NODES started");
-            for (String nodeId : _knownNodes) {
-                Long lastSeen = _lastHeartBeat.get(nodeId);
-                if ((lastSeen == null || (System.currentTimeMillis() - lastSeen) > _staleInterval)
-                    && !_nodeId.equals(nodeId))
-                {
+
+            ArrayList<String> knownNodes = new ArrayList<String>();
+            knownNodes.addAll(_dbNodes);
+            knownNodes.addAll(_clusterNodes);
+
+            // for cluster mode
+            if (_isClusterEnabled && _clusterManager.getIsMaster()) {
+                ArrayList<String> memberList = (ArrayList) _clusterManager.getActiveNodes();
+
+                //find stale nodes
+                knownNodes.removeAll(memberList);
+                if (knownNodes.size() != 0) {
+                    for (String nodeId : knownNodes) {
+                        _staleNodes.add(nodeId);
+                    }
+                }
+                for (String nodeId : _staleNodes)  {
                     recoverStaleNode(nodeId);
                 }
             }
+            // for standalone ode node
+            else {
+                for (String nodeId : knownNodes) {
+                    if (!nodeId.equals(_nodeId)) recoverStaleNode(nodeId);
+                }
+            }
         }
     }
 


[08/30] ode git commit: redesigning phase 2

Posted by sa...@apache.org.
redesigning phase 2


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

Branch: refs/heads/ODE-563
Commit: 521d640d672133d3864a61c54ba2b59e70e35a4b
Parents: afa36ee
Author: suba <su...@cse.mrt.ac.lk>
Authored: Tue Jun 16 17:20:04 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Tue Jun 16 17:20:04 2015 +0530

----------------------------------------------------------------------
 Rakefile                                        | 10 +--
 .../java/org/apache/ode/axis2/ODEServer.java    |  6 +-
 .../ode/axis2/deploy/DeploymentPoller.java      | 29 ++++----
 .../ode/axis2/service/DeploymentWebService.java | 25 +++++--
 .../apache/ode/bpel/clapi/ClusterManager.java   | 22 +++++++
 .../bpel/clapi/ProcessStoreDeployedEvent.java   | 40 ++++++++++++
 .../ode/store/ClusterProcessStoreImpl.java      | 43 +++---------
 .../hazelcast/HazelcastClusterImpl.java         | 69 ++++++++++++++++----
 .../hazelcast/HazelcastConstants.java           |  1 -
 .../hazelcast/HazelcastInstanceConfig.java      | 56 ----------------
 10 files changed, 175 insertions(+), 126 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/Rakefile
----------------------------------------------------------------------
diff --git a/Rakefile b/Rakefile
index 06dcbd5..7c0fa67 100644
--- a/Rakefile
+++ b/Rakefile
@@ -86,7 +86,7 @@ define "ode" do
       "scheduler-simple", "bpel-schemas", "bpel-store", "utils", "agents", "clustering"),
       AXIOM, AXIS2_ALL, COMMONS.lang, COMMONS.collections, COMMONS.httpclient, COMMONS.lang,
       DERBY, GERONIMO.kernel, GERONIMO.transaction, JAVAX.activation, JAVAX.servlet, JAVAX.stream,
-      JAVAX.transaction, JENCKS, WSDL4J, WS_COMMONS, XMLBEANS, AXIS2_MODULES.libs, SLF4J, LOG4J, HAZELCAST
+      JAVAX.transaction, JENCKS, WSDL4J, WS_COMMONS, XMLBEANS, AXIS2_MODULES.libs, SLF4J, LOG4J
 
     test.exclude 'org.apache.ode.axis2.management.*'
     test.with project("tools"), AXIOM, JAVAX.javamail, COMMONS.codec, COMMONS.httpclient, XERCES, WOODSTOX
@@ -166,7 +166,7 @@ define "ode" do
 
   desc "ODE APIs"
   define "bpel-api" do
-    compile.with projects("utils", "bpel-obj", "bpel-schemas"), WSDL4J, XERCES, SLF4J, LOG4J, HAZELCAST
+    compile.with projects("utils", "bpel-obj", "bpel-schemas"), WSDL4J, XERCES, SLF4J, LOG4J
     package :jar
   end
 
@@ -208,7 +208,7 @@ define "ode" do
 
   desc "ODE Clustering"
    define "clustering" do
-     compile.with projects("bpel-api"),HAZELCAST, COMMONS.logging
+     compile.with projects("bpel-api","bpel-store"),HAZELCAST, COMMONS.logging
      package :jar
    end
 
@@ -270,8 +270,8 @@ define "ode" do
   desc "ODE Process Store"
   define "bpel-store" do
     compile.with projects("bpel-api", "bpel-compiler", "bpel-dao", "bpel-obj", "bpel-schemas", "bpel-epr",
-      "dao-hibernate", "dao-jpa", "clustering", "utils"),
-      JAVAX.persistence, JAVAX.stream, JAVAX.transaction, HIBERNATE, HSQLDB, XMLBEANS, XERCES, WSDL4J, OPENJPA, SPRING, SLF4J, LOG4J,HAZELCAST
+      "dao-hibernate", "dao-jpa", "utils"),
+      JAVAX.persistence, JAVAX.stream, JAVAX.transaction, HIBERNATE, HSQLDB, XMLBEANS, XERCES, WSDL4J, OPENJPA, SPRING, SLF4J, LOG4J
     compile { open_jpa_enhance }
     resources hibernate_doclet(:package=>"org.apache.ode.store.hib", :excludedtags=>"@version,@author,@todo")
 

http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index 26489d2..f0ad470 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -234,7 +234,7 @@ public class ODEServer {
 
         try {
             __log.debug("Initializing Deployment Web Service");
-            new DeploymentWebService().enableService(_configContext.getAxisConfiguration(), _store, _poller, _appRoot.getAbsolutePath(), _workRoot.getAbsolutePath());
+            new DeploymentWebService().enableService(_configContext.getAxisConfiguration(), _store, _poller, _appRoot.getAbsolutePath(), _workRoot.getAbsolutePath(),this);
         } catch (Exception e) {
             throw new ServletException(e);
         }
@@ -490,8 +490,8 @@ public class ODEServer {
     private void initClustering() {
         String clusterImplName = _odeConfig.getClusteringImplClass();
         try {
-            Class<?> clustering_class = this.getClass().getClassLoader().loadClass(clusterImplName);
-            _clusterManager = (ClusterManager) clustering_class.newInstance();
+            Class<?> clusterImplClass = this.getClass().getClassLoader().loadClass(clusterImplName);
+            _clusterManager = (ClusterManager) clusterImplClass.newInstance();
         } catch (Exception ex) {
             __log.error(ex);
         }

http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index 66890ba..ccb029b 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -54,7 +54,7 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
-import  org.apache.ode.clustering.hazelcast.HazelcastClusterImpl;
+import org.apache.ode.bpel.clapi.ClusterManager;
 
 /**
  * Polls a directory for the deployment of a new deployment unit.
@@ -100,7 +100,7 @@ public class DeploymentPoller {
     public DeploymentPoller(File deployDir, final ODEServer odeServer) {
         _odeServer = odeServer;
         _deployDir = deployDir;
-        clusterEnabled = _odeServer.getClusteringState();
+        clusterEnabled = _odeServer.getIsCluteringEnabled();
         if (!_deployDir.exists()) {
             boolean isDeployDirCreated = _deployDir.mkdir();
             if (!isDeployDirCreated) {
@@ -140,10 +140,13 @@ public class DeploymentPoller {
         // Checking for new deployment directories
         if (isDeploymentFromODEFileSystemAllowed() && files != null) {
             for (File file : files) {
-                __log.info("Trying to access the lock for " +file.getName());
-                duLocked = lock(file.getName());
-                try {
-                    if (duLocked) {
+                String test = file.getName();
+                __log.info("Trying to access the lock for " + test);
+                __log.info("Test null key value " +test);
+                duLocked = pollerTryLock(test);
+
+                if (duLocked) {
+                    try {
                         File deployXml = new File(file, "deploy.xml");
                         File deployedMarker = new File(_deployDir, file.getName() + ".deployed");
 
@@ -185,10 +188,10 @@ public class DeploymentPoller {
                         } catch (Exception e) {
                             __log.error("Deployment of " + file.getName() + " failed, aborting for now.", e);
                         }
+                    } finally {
+                        __log.info("Trying to release the lock for " + file.getName());
+                        unlock(file.getName());
                     }
-                } finally {
-                    __log.info("Trying to release the lock for " + file.getName());
-                    unlock(file.getName());
                 }
             }
         }
@@ -341,16 +344,16 @@ public class DeploymentPoller {
     }
 
     //Implementation of IMap key Lock
-    public boolean lock(String key) {
+    private boolean pollerTryLock(String key) {
         if(clusterEnabled) {
-            return _odeServer.getBpelServer().getContexts().hazelcastClusterImpl.lock(key);
+            return _odeServer.getBpelServer().getContexts().clusterManager.tryLock(key);
         }
         else return true;
     }
 
-    public boolean unlock(String key) {
+    private boolean unlock(String key) {
         if(clusterEnabled) {
-            return _odeServer.getBpelServer().getContexts().hazelcastClusterImpl.unlock(key);
+            return _odeServer.getBpelServer().getContexts().clusterManager.unlock(key);
         }
         else return true;
     }

http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
index bd35167..1951cf5 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
@@ -55,6 +55,7 @@ import org.apache.axis2.util.Utils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.lang.StringUtils;
+import org.apache.ode.axis2.ODEServer;
 import org.apache.ode.axis2.OdeFault;
 import org.apache.ode.axis2.deploy.DeploymentPoller;
 import org.apache.ode.axis2.hooks.ODEAxisService;
@@ -76,9 +77,11 @@ public class DeploymentWebService {
     private final OMNamespace _deployapi;
 
     private File _deployPath;
+    private  ODEServer _odeServer;
     private DeploymentPoller _poller;
     private ProcessStore _store;
 
+    private boolean clusterEnabled;
 
     public DeploymentWebService() {
         _pmapi = OMAbstractFactory.getOMFactory().createOMNamespace("http://www.apache.org/ode/pmapi","pmapi");
@@ -86,10 +89,12 @@ public class DeploymentWebService {
     }
 
     public void enableService(AxisConfiguration axisConfig, ProcessStore store,
-                              DeploymentPoller poller, String rootpath, String workPath) throws AxisFault, WSDLException {
+                              DeploymentPoller poller, String rootpath, String workPath, ODEServer odeServer) throws AxisFault, WSDLException {
         _deployPath = new File(workPath, "processes");
         _store = store;
         _poller = poller;
+        _odeServer = odeServer;
+        clusterEnabled = _odeServer.getIsCluteringEnabled();
 
         Definition def;
         WSDLReader wsdlReader = WSDLFactory.newInstance().newWSDLReader();
@@ -170,7 +175,7 @@ public class DeploymentWebService {
                         __log.info("Trying to access the lock for " + dest.getName());
 
                         //lock on deployment unit directory name
-                        duLocked = _poller.lock(dest.getName());
+                        duLocked = lock(dest.getName());
 
                         if (duLocked) {
                             boolean createDir = dest.mkdir();
@@ -214,7 +219,7 @@ public class DeploymentWebService {
                                 sendResponse(factory, messageContext, "deployResponse", response);
                             } finally {
                                 __log.info("Trying to release the lock for " + dest.getName());
-                                _poller.unlock(dest.getName());
+                                unlock(dest.getName());
                             }
                         }
                     } finally {
@@ -366,6 +371,18 @@ public class DeploymentWebService {
         out.close();
     }
 
+    //Implementation of IMap key Lock
+    private boolean lock(String key) {
+        if(clusterEnabled) {
+            return _odeServer.getBpelServer().getContexts().clusterManager.lock(key);
+        }
+        else return true;
+    }
 
-
+    private boolean unlock(String key) {
+        if(clusterEnabled) {
+            return _odeServer.getBpelServer().getContexts().clusterManager.unlock(key);
+        }
+        else return true;
+    }
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
index 4a0aded..a1fe194 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
@@ -54,6 +54,28 @@ public interface ClusterManager {
      */
     boolean unlock(String key);
 
+    /**
+     * Tries to acquire the lock for the specified key.
+     * @param key
+     * @return
+     */
+    boolean tryLock(String key);
 
+    /**
+     * Set the Process Store object which uses for clustering
+     * @param ps
+     */
+    void setClusterProcessStore(Object ps);
 
+    /**
+     * Publish Deploy event to the cluster by deploy initiator
+     * @param event
+     */
+    void publishProcessStoreEvent(Object event);
+
+    /**
+     * Handle event according to received event
+     * @param message
+     */
+    void handleEvent(Object message);
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreDeployedEvent.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreDeployedEvent.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreDeployedEvent.java
new file mode 100644
index 0000000..a623d47
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreDeployedEvent.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ode.bpel.clapi;
+
+import java.io.Serializable;
+
+public class ProcessStoreDeployedEvent implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    public final String deploymentUnit;
+
+    public final String info;
+
+    public ProcessStoreDeployedEvent(String deploymentUnit) {
+        this.info = "Deployment Event";
+        this.deploymentUnit = deploymentUnit;
+    }
+
+    @Override
+    public String toString() {
+        return "{ProcessStoreDeployedEvent#" + deploymentUnit +"}";
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index 22ba2cd..6f35110 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -20,9 +20,9 @@ package org.apache.ode.store;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.ode.bpel.iapi.ProcessConf;
+import org.apache.ode.bpel.clapi.ClusterManager;
+import org.apache.ode.bpel.clapi.ProcessStoreDeployedEvent;
 import org.apache.ode.bpel.iapi.ProcessState;
-import org.apache.ode.clustering.hazelcast.HazelcastClusterImpl;
 import org.apache.ode.bpel.iapi.EndpointReferenceContext;
 import org.apache.ode.il.config.OdeConfigProperties;
 
@@ -33,24 +33,17 @@ import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import com.hazelcast.core.*;
-
 public class ClusterProcessStoreImpl extends ProcessStoreImpl{
     private static final Log __log = LogFactory.getLog(ClusterProcessStoreImpl.class);
 
-    private HazelcastInstance _hazelcastInstance;
-    private Member deployInitiator;
-    private ITopic<String> clusterMessageTopic;
     private final ArrayList<ProcessConfImpl> loaded = new ArrayList<ProcessConfImpl>();
+    private ClusterManager _clusterManager;
+    private  ProcessStoreDeployedEvent deployedEvent;
 
-
-    public ClusterProcessStoreImpl(EndpointReferenceContext eprContext, DataSource ds, String persistenceType, OdeConfigProperties props, boolean createDatamodel, HazelcastClusterImpl hazelcastClusterImpl) {
+    public ClusterProcessStoreImpl(EndpointReferenceContext eprContext, DataSource ds, String persistenceType, OdeConfigProperties props, boolean createDatamodel, ClusterManager clusterManager) {
         super(eprContext,ds,persistenceType,props,createDatamodel);
-        _hazelcastInstance = hazelcastClusterImpl.getHazelcastInstance();
-
-        // Register for listening to message listener
-        clusterMessageTopic = _hazelcastInstance.getTopic("deployedMsg");
-        clusterMessageTopic.addMessageListener(new ClusterMessageListener());
+        _clusterManager = clusterManager;
+        _clusterManager.setClusterProcessStore(this);
     }
 
     public Collection<QName> deploy(final File deploymentUnitDirectory) {
@@ -63,9 +56,9 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
         return deployed;
     }
 
-    public void publishProcessStoreDeployedEvent(String duName){
-        deployInitiator = _hazelcastInstance.getCluster().getLocalMember();
-        clusterMessageTopic.publish("Deployed " +duName);
+    private void publishProcessStoreDeployedEvent(String duName){
+        deployedEvent = new ProcessStoreDeployedEvent(duName);
+        _clusterManager.publishProcessStoreEvent(deployedEvent);
     }
 
     public void publishService(final String duName) {
@@ -110,22 +103,6 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
         //loadAll();
     }
 
-    class ClusterMessageListener implements MessageListener<String> {
-        @Override
-        public void onMessage(Message<String> msg) {
-            String message = msg.getMessageObject();
-            String arr[] = message.split(" ", 2);
-            String duName = arr[1];
-            if(message.contains("Deployed ")) {
-                if(_hazelcastInstance.getCluster().getLocalMember() != deployInitiator) {
-                    __log.info("Receive deployment msg to " +_hazelcastInstance.getCluster().getLocalMember() +" for " +duName);
-                    publishService(duName);
-                }
-                else deployInitiator = null;
-            }
-        }
-    }
-
     private Pattern getPreviousPackageVersionPattern(String duName) {
         String[] nameParts = duName.split("/");
         /* Replace the version number (if any) with regexp to match any version number */

http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index 6ae701b..2e6868f 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -19,38 +19,49 @@
 package org.apache.ode.clustering.hazelcast;
 
 import com.hazelcast.core.*;
+import com.hazelcast.config.FileSystemXmlConfig;
 
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import org.apache.ode.store.ClusterProcessStoreImpl;
 import org.apache.ode.bpel.clapi.ClusterManager;
+import org.apache.ode.bpel.clapi.ProcessStoreDeployedEvent;
 
 /**
  * This class implements necessary methods to build the cluster using hazelcast
  */
-public class HazelcastClusterImpl implements ClusterManager{
+public class HazelcastClusterImpl implements ClusterManager {
     private static final Log __log = LogFactory.getLog(HazelcastClusterImpl.class);
 
     private HazelcastInstance _hazelcastInstance;
     private boolean isMaster = false;
     private Member leader;
-
+    private Member deployInitiator;
     private IMap<String, String> lock_map;
+    private ITopic<Object> clusterMessageTopic;
+    private ClusterProcessStoreImpl _clusterProcessStore;
 
     public void init(File configRoot) {
-        //First,looks for the hazelcast.config system property. If it is set, its value is used as the path.
-        //Else it will load the hazelcast.xml file using FileSystemXmlConfig()
+        /*First,looks for the hazelcast.config system property. If it is set, its value is used as the path.
+        Else it will load the hazelcast.xml file using FileSystemXmlConfig()*/
         String hzConfig = System.getProperty("hazelcast.config");
         if (hzConfig != null) _hazelcastInstance = Hazelcast.newHazelcastInstance();
         else {
             File hzXml = new File(configRoot, "hazelcast.xml");
             if (!hzXml.isFile())
                 __log.error("hazelcast.xml does not exist or is not a file");
-            else _hazelcastInstance = Hazelcast.newHazelcastInstance(new FileSystemXmlConfig(hzXml));
+            else
+                try {
+                    _hazelcastInstance = Hazelcast.newHazelcastInstance(new FileSystemXmlConfig(hzXml));
+                } catch (FileNotFoundException fnf) {
+                    __log.error(fnf);
+                }
         }
 
         if (_hazelcastInstance != null) {
@@ -60,10 +71,15 @@ public class HazelcastClusterImpl implements ClusterManager{
             __log.info("Registering HZ localMember ID " + localMember);
             markAsMaster();
             lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_LOCK_MAP);
+
+            // Register for listening to message listener
+            clusterMessageTopic = _hazelcastInstance.getTopic("deployedMsg");
+            clusterMessageTopic.addMessageListener(new ClusterMessageListener());
         }
     }
 
     public boolean lock(String key) {
+        lock_map.putIfAbsent(key,key);
         lock_map.lock(key);
         boolean state = lock_map.isLocked(key);
         __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
@@ -81,6 +97,13 @@ public class HazelcastClusterImpl implements ClusterManager{
         return state;
     }
 
+    public boolean tryLock(String key) {
+        lock_map.putIfAbsent(key,key);
+        boolean state = lock_map.tryLock(key);
+        __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state );
+        return state;
+    }
+
     class ClusterMemberShipListener implements MembershipListener {
         @Override
         public void memberAdded(MembershipEvent membershipEvent) {
@@ -90,10 +113,6 @@ public class HazelcastClusterImpl implements ClusterManager{
         @Override
         public void memberRemoved(MembershipEvent membershipEvent) {
             markAsMaster();
-            // Allow Leader to update distributed map.
-            if (isMaster) {
-                String leftMemberID = getHazelCastNodeID(membershipEvent.getMember());
-            }
         }
 
         @Override
@@ -102,6 +121,32 @@ public class HazelcastClusterImpl implements ClusterManager{
         }
     }
 
+    public void publishProcessStoreEvent(Object deployedEvent) {
+        deployInitiator = _hazelcastInstance.getCluster().getLocalMember();
+        clusterMessageTopic.publish(deployedEvent);
+    }
+
+
+    class ClusterMessageListener implements MessageListener<Object> {
+        @Override
+        public void onMessage(Message<Object> msg) {
+            handleEvent(msg.getMessageObject());
+        }
+    }
+
+    public void handleEvent(Object message) {
+        if (message instanceof ProcessStoreDeployedEvent) {
+            ProcessStoreDeployedEvent event = (ProcessStoreDeployedEvent) message;
+
+            if (_hazelcastInstance.getCluster().getLocalMember() != deployInitiator) {
+                String duName = event.deploymentUnit;
+                __log.info("Receive deployment msg to " + _hazelcastInstance.getCluster().getLocalMember() + " for " + duName);
+                _clusterProcessStore.publishService(duName);
+            } else deployInitiator = null;
+        }
+
+    }
+
     public void markAsMaster() {
         leader = _hazelcastInstance.getCluster().getMembers().iterator().next();
         if (leader.localMember()) {
@@ -114,7 +159,9 @@ public class HazelcastClusterImpl implements ClusterManager{
         return isMaster;
     }
 
-    public HazelcastInstance getHazelcastInstance() {
-        return _hazelcastInstance;
+    public void setClusterProcessStore(Object store) {
+        if (store instanceof ClusterProcessStoreImpl)
+            _clusterProcessStore = (ClusterProcessStoreImpl) store;
     }
 }
+

http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
index e201b70..f9d1004 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
@@ -21,7 +21,6 @@ package org.apache.ode.clustering.hazelcast;
  * Constants used in Hazelcast based clustering implementation
  */
 public final class HazelcastConstants {
-    public static final String ODE_CLUSTER_NODE_MAP = "ODE_NODE_ID_MAP";
     public static final String ODE_CLUSTER_LOCK_MAP = "ODE_LOCK_MAP";
 
     private HazelcastConstants() {

http://git-wip-us.apache.org/repos/asf/ode/blob/521d640d/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceConfig.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceConfig.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceConfig.java
deleted file mode 100644
index 9e8c59b..0000000
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceConfig.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-package org.apache.ode.clustering.hazelcast;
-
-import com.hazelcast.config.Config;
-import com.hazelcast.config.FileSystemXmlConfig;
-import com.hazelcast.core.*;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-
-/**
- * This is to create hazelcast instance.
- * It sets the config object using hazelcast.xml file.First, it looks for the hazelcast.config system property. If it is set, its value is used as the path.
- * Else it will load the hazelcast.xml file using FileSystemXmlConfig()
- */
-public class HazelcastInstanceConfig {
-    private HazelcastInstance hazelcastInstance;
-
-    public HazelcastInstanceConfig() {
-        hazelcastInstance = Hazelcast.newHazelcastInstance();
-    }
-
-    /**
-     *
-     * @param hzXml
-     */
-    public HazelcastInstanceConfig(File hzXml) {
-        try {
-            Config config = new FileSystemXmlConfig(hzXml);
-            hazelcastInstance = Hazelcast.newHazelcastInstance(config);
-        } catch (FileNotFoundException fnf) {
-        }
-    }
-
-    public HazelcastInstance getHazelcastInstance() {
-        return hazelcastInstance;
-    }
-}
-


[13/30] ode git commit: Back to hazelcast 3.4.2

Posted by sa...@apache.org.
Back to hazelcast 3.4.2


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

Branch: refs/heads/ODE-563
Commit: ca74e0054249d894467b915cc313cf205bc98fbc
Parents: 7eac2b1
Author: suba <su...@cse.mrt.ac.lk>
Authored: Thu Jun 25 23:33:48 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Thu Jun 25 23:33:48 2015 +0530

----------------------------------------------------------------------
 dependencies.rb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/ca74e005/dependencies.rb
----------------------------------------------------------------------
diff --git a/dependencies.rb b/dependencies.rb
index f85e38a..33da5e4 100644
--- a/dependencies.rb
+++ b/dependencies.rb
@@ -75,7 +75,7 @@ GERONIMO            = struct(
   :transaction      =>"org.apache.geronimo.components:geronimo-transaction:jar:2.0.1",
   :connector        =>"org.apache.geronimo.components:geronimo-connector:jar:2.0.1"
 )
-HAZELCAST           ="com.hazelcast:hazelcast:jar:3.5"
+HAZELCAST           ="com.hazelcast:hazelcast:jar:3.4.2"
 HIBERNATE           = [ "org.hibernate:hibernate-core:jar:3.3.2.GA", "javassist:javassist:jar:3.9.0.GA", "antlr:antlr:jar:2.7.6",
                         "asm:asm:jar:3.3.1", "cglib:cglib:jar:2.2", "net.sf.ehcache:ehcache:jar:1.2.3" ]
 HSQLDB              = "hsqldb:hsqldb:jar:1.8.0.7"


[06/30] ode git commit: retire previous processes

Posted by sa...@apache.org.
retire previous processes


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

Branch: refs/heads/ODE-563
Commit: b4cd9a483bce77070cb21231296ad89c3e8b4593
Parents: 0b19e7e
Author: suba <su...@cse.mrt.ac.lk>
Authored: Mon Jun 15 00:19:23 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Mon Jun 15 00:19:23 2015 +0530

----------------------------------------------------------------------
 .../ode/store/ClusterProcessStoreImpl.java      | 37 +++++++++++++++-----
 .../org/apache/ode/store/ProcessStoreImpl.java  |  4 +++
 2 files changed, 33 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/b4cd9a48/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index f364fb7..7f79a8b 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -20,6 +20,8 @@ package org.apache.ode.store;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.iapi.ProcessConf;
+import org.apache.ode.bpel.iapi.ProcessState;
 import org.apache.ode.clustering.hazelcast.HazelcastClusterImpl;
 import org.apache.ode.bpel.iapi.EndpointReferenceContext;
 import org.apache.ode.il.config.OdeConfigProperties;
@@ -27,9 +29,7 @@ import org.apache.ode.il.config.OdeConfigProperties;
 import javax.sql.DataSource;
 import javax.xml.namespace.QName;
 import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Collection;
+import java.util.*;
 
 import com.hazelcast.core.*;
 
@@ -39,6 +39,8 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
     private HazelcastInstance _hazelcastInstance;
     private Member deployInitiator;
     private ITopic<String> clusterMessageTopic;
+    private final ArrayList<ProcessConfImpl> loaded = new ArrayList<ProcessConfImpl>();
+
 
     public ClusterProcessStoreImpl(EndpointReferenceContext eprContext, DataSource ds, String persistenceType, OdeConfigProperties props, boolean createDatamodel, HazelcastClusterImpl hazelcastClusterImpl) {
         super(eprContext,ds,persistenceType,props,createDatamodel);
@@ -51,6 +53,10 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
 
     public Collection<QName> deploy(final File deploymentUnitDirectory) {
         Collection<QName> deployed = super.deploy(deploymentUnitDirectory);
+        Map<QName, ProcessConfImpl> _processes = getProcessesMap();
+        for (QName key :_processes.keySet()) {
+            if(!loaded.contains(_processes.get(key))) loaded.add(_processes.get(key));
+        }
         publishProcessStoreDeployedEvent(deploymentUnitDirectory.getName());
         return deployed;
     }
@@ -60,14 +66,29 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
         clusterMessageTopic.publish("Deployed " +duName);
     }
 
+    //have to write code for retire previous versions
     public void publishService(final String duName) {
-        final ArrayList<ProcessConfImpl> loaded = new ArrayList<ProcessConfImpl>();
+        final ArrayList<ProcessConfImpl> confs = new ArrayList<ProcessConfImpl>();
+        String namePart = duName.split("-")[0];
+        ProcessState state = ProcessState.ACTIVE;
+
+        for (Iterator<ProcessConfImpl> iterator = loaded.iterator(); iterator.hasNext();) {
+            ProcessConfImpl pconf = iterator.next();
+            if (pconf.getPackage().contains(namePart) && pconf.getState().equals(state)) {
+                  pconf.setState(ProcessState.RETIRED);
+                  confs.add(pconf);
+            }
+        }
+
         try {
             exec(new Callable<Object>() {
                 public Object call(ConfStoreConnection conn) {
                     DeploymentUnitDAO dudao = conn.getDeploymentUnit(duName);
                     if (dudao != null) {
-                        loaded.addAll(load(dudao));
+                        List<ProcessConfImpl> load = load(dudao);
+                        loaded.addAll(load);
+                        confs.addAll(load);
+
                     }
                     return null;
                 }
@@ -76,13 +97,14 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
             __log.error("Error loading DU from store: " + duName, ex);
         }
 
-        for (ProcessConfImpl p : loaded) {
+        for (ProcessConfImpl p : confs) {
             try {
                 fireStateChange(p.getProcessId(), p.getState(), p.getDeploymentUnit().getName());
             } catch (Exception except) {
                 __log.error("Error while activating process: pid=" + p.getProcessId() + " package="+p.getDeploymentUnit().getName(), except);
             }
         }
+        //loadAll();
     }
 
     class ClusterMessageListener implements MessageListener<String> {
@@ -96,9 +118,8 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
                     __log.info("Receive deployment msg to " +_hazelcastInstance.getCluster().getLocalMember() +" for " +duName);
                     publishService(duName);
                 }
+                else deployInitiator = null;
             }
         }
     }
-
-
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/b4cd9a48/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
index 1a99ef6..d6f76f3 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
@@ -899,4 +899,8 @@ public class ProcessStoreImpl implements ProcessStore {
             }
         }
     }
+
+    protected Map<QName, ProcessConfImpl> getProcessesMap() {
+        return _processes;
+    }
 }


[23/30] ode git commit: tested with concurrent process

Posted by sa...@apache.org.
tested with concurrent process


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

Branch: refs/heads/ODE-563
Commit: 9ffe0c779115515c045888229871187bf3c41a24
Parents: 9a0b742
Author: suba <su...@cse.mrt.ac.lk>
Authored: Wed Jul 15 00:21:09 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Wed Jul 15 00:21:09 2015 +0530

----------------------------------------------------------------------
 .../java/org/apache/ode/axis2/ODEServer.java    | 56 +++++++-------------
 .../hazelcast/HazelcastInstanceLock.java        | 15 ++----
 2 files changed, 24 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/9ffe0c77/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index 34e245a..da62139 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -19,38 +19,11 @@
 
 package org.apache.ode.axis2;
 
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Properties;
-import java.util.StringTokenizer;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ThreadFactory;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.sql.DataSource;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.InvalidTransactionException;
-import javax.transaction.NotSupportedException;
-import javax.transaction.RollbackException;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-import javax.transaction.xa.XAResource;
-
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
-import org.apache.commons.httpclient.util.IdleConnectionTimeoutThread;
 import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
+import org.apache.commons.httpclient.util.IdleConnectionTimeoutThread;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.ode.axis2.deploy.DeploymentPoller;
@@ -64,12 +37,7 @@ import org.apache.ode.bpel.engine.BpelServerImpl;
 import org.apache.ode.bpel.engine.CountLRUDehydrationPolicy;
 import org.apache.ode.bpel.engine.cron.CronScheduler;
 import org.apache.ode.bpel.extvar.jdbc.JdbcExternalVariableModule;
-import org.apache.ode.bpel.iapi.BpelEventListener;
-import org.apache.ode.bpel.iapi.EndpointReferenceContext;
-import org.apache.ode.bpel.iapi.ProcessConf;
-import org.apache.ode.bpel.iapi.ProcessStoreEvent;
-import org.apache.ode.bpel.iapi.ProcessStoreListener;
-import org.apache.ode.bpel.iapi.Scheduler;
+import org.apache.ode.bpel.iapi.*;
 import org.apache.ode.bpel.intercept.MessageExchangeInterceptor;
 import org.apache.ode.bpel.memdao.BpelDAOConnectionFactoryImpl;
 import org.apache.ode.bpel.pmapi.InstanceManagement;
@@ -78,11 +46,25 @@ import org.apache.ode.il.config.OdeConfigProperties;
 import org.apache.ode.il.dbutil.Database;
 import org.apache.ode.scheduler.simple.JdbcDelegate;
 import org.apache.ode.scheduler.simple.SimpleScheduler;
-import org.apache.ode.store.ProcessStoreImpl;
 import org.apache.ode.store.ClusterProcessStoreImpl;
+import org.apache.ode.store.ProcessStoreImpl;
 import org.apache.ode.utils.GUID;
 import org.apache.ode.utils.fs.TempFileManager;
 
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.sql.DataSource;
+import javax.transaction.*;
+import javax.transaction.xa.XAResource;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.*;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+
 /**
  * Server class called by our Axis hooks to handle all ODE lifecycle management.
  *
@@ -136,7 +118,7 @@ public class ODEServer {
     
     public Runnable txMgrCreatedCallback;
 
-    private boolean isClusteringEnabled;
+    private boolean isClusteringEnabled = false;
 
     public void init(ServletConfig config, ConfigurationContext configContext) throws ServletException {
         init(config.getServletContext().getRealPath("/WEB-INF"), configContext);
@@ -213,7 +195,7 @@ public class ODEServer {
         registerExternalVariableModules();
 
         _store.loadAll();
-        _clusterManager.registerClusterProcessStoreMessageListener();
+        if (_clusterManager != null) _clusterManager.registerClusterProcessStoreMessageListener();
 
         try {
             _bpelServer.start();

http://git-wip-us.apache.org/repos/asf/ode/blob/9ffe0c77/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
index aa6c086..1729bac 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
@@ -46,26 +46,23 @@ public class HazelcastInstanceLock implements ClusterLock<Long> {
 
     public void lock(Long iid, int time, TimeUnit tu) throws InterruptedException,TimeoutException {
         if (iid == null) {
-            if (__log.isDebugEnabled()) {
+            if (__log.isDebugEnabled())
                 __log.debug(" Instance Id null at lock[]");
-            }
             return;
         }
 
         String thrd = Thread.currentThread().toString();
 
-        if (__log.isDebugEnabled()) {
+        if (__log.isDebugEnabled())
             __log.debug(thrd + ": lock(iid=" + iid + ", time=" + time + tu + ")");
-        }
 
         putIfAbsent(iid, iid);
 
         if (!_lock_map.tryLock(iid, time, tu)) {
 
-            if (__log.isDebugEnabled()) {
+            if (__log.isDebugEnabled())
                 __log.debug(thrd + ": lock(iid=" + iid + ", " +
                         "time=" + time + tu + ")-->TIMEOUT");
-            }
             throw new TimeoutException();
         }
 
@@ -73,9 +70,8 @@ public class HazelcastInstanceLock implements ClusterLock<Long> {
 
     public void unlock(Long iid) {
         if (iid == null) {
-            if (__log.isDebugEnabled()) {
+            if (__log.isDebugEnabled())
                 __log.debug(" unlock, instance id is null");
-            }
             return;
         }
 
@@ -83,9 +79,8 @@ public class HazelcastInstanceLock implements ClusterLock<Long> {
 
         _lock_map.unlock(iid);
 
-        if (__log.isDebugEnabled()) {
+        if (__log.isDebugEnabled())
             __log.debug(thrd + " unlock(iid=" + iid + ")");
-        }
     }
 
     public boolean tryLock(Long key) {


[17/30] ode git commit: Use AbstractInstanceLockManager

Posted by sa...@apache.org.
Use AbstractInstanceLockManager


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

Branch: refs/heads/ODE-563
Commit: 4a101a41e853bbdae8148ac6ee7150845ac742da
Parents: 94f19ed
Author: suba <su...@cse.mrt.ac.lk>
Authored: Wed Jul 8 14:20:07 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Wed Jul 8 14:20:07 2015 +0530

----------------------------------------------------------------------
 .../main/java/org/apache/ode/bpel/clapi/ClusterManager.java    | 3 ++-
 .../main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java   | 2 +-
 .../java/org/apache/ode/bpel/engine/InstanceLockManager.java   | 6 +++---
 .../apache/ode/clustering/hazelcast/HazelcastClusterImpl.java  | 6 +++---
 4 files changed, 9 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/4a101a41/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
index 6f610a4..25110b4 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
@@ -19,6 +19,7 @@
 package org.apache.ode.bpel.clapi;
 
 import java.io.File;
+import org.apache.ode.bpel.engine.AbstractInstnaceLockManager;
 
 public interface ClusterManager {
 
@@ -57,5 +58,5 @@ public interface ClusterManager {
     void registerClusterProcessStoreMessageListener();
 
     ClusterLock getDeploymentLock();
-    ClusterLock getInstanceLock();
+    org.apache.ode.bpel.engine.AbstractInstanceLockManager getInstanceLock();
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/4a101a41/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
index 81d8a4c..5bef134 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
@@ -115,7 +115,7 @@ public class BpelEngineImpl implements BpelEngine {
     private SharedEndpoints _sharedEps;
 
     /** Manage instance-level locks. */
-    private final AbstractInstanceLockManager _instanceLockManager;
+    private  AbstractInstanceLockManager _instanceLockManager;
 
     final Contexts _contexts;
 

http://git-wip-us.apache.org/repos/asf/ode/blob/4a101a41/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
index e49e8e9..652d2ec 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
@@ -36,7 +36,7 @@ import java.util.concurrent.locks.Lock;
  *
  * @author Maciej Szefler - m s z e f l e r @ g m a i l . c o m
  */
-public class InstanceLockManager {
+public class InstanceLockManager extends AbstractInstanceLockManager {
     private static final Log __log = LogFactory.getLog(InstanceLockManager.class);
 
     private final Lock _mutex = new java.util.concurrent.locks.ReentrantLock();
@@ -137,7 +137,7 @@ public class InstanceLockManager {
     }
 
     /** Exception class indicating a time-out occured while obtaining a lock. */
-    public static final class TimeoutException extends Exception {
+    /*public static final class TimeoutException extends Exception {
         private static final long serialVersionUID = 7247629086692580285L;
-    }
+    }*/
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/4a101a41/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index aa24947..fb25606 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -48,7 +48,7 @@ public class HazelcastClusterImpl implements ClusterManager {
     private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
     private ClusterProcessStore _clusterProcessStore;
     private ClusterLock _hazelcastDeploymentLock;
-    private ClusterLock _hazelcastInstanceLock;
+    private AbstractInstanceLockManager _hazelcastInstanceLock;
 
     public void init(File configRoot) {
 
@@ -82,7 +82,7 @@ public class HazelcastClusterImpl implements ClusterManager {
             clusterMessageTopic = _hazelcastInstance.getTopic(HazelcastConstants.ODE_CLUSTER_MSG);
 
             _hazelcastDeploymentLock = (ClusterLock) new HazelcastDeploymentLock(deployment_lock_map);
-            _hazelcastInstanceLock = (ClusterLock) new HazelcastInstanceLock(instance_lock_map);
+            _hazelcastInstanceLock = (AbstractInstanceLockManager) new HazelcastInstanceLock(instance_lock_map);
         }
     }
 
@@ -169,7 +169,7 @@ public class HazelcastClusterImpl implements ClusterManager {
         return _hazelcastDeploymentLock;
     }
 
-    public ClusterLock getInstanceLock(){
+    public AbstractInstanceLockManager getInstanceLock(){
         return _hazelcastInstanceLock;
     }
 }


[12/30] ode git commit: added patch and log messages

Posted by sa...@apache.org.
added patch and log messages


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

Branch: refs/heads/ODE-563
Commit: 7eac2b120049195526698c761a6fae4c12201496
Parents: 4137714
Author: suba <su...@cse.mrt.ac.lk>
Authored: Thu Jun 25 23:20:50 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Thu Jun 25 23:20:50 2015 +0530

----------------------------------------------------------------------
 .../java/org/apache/ode/axis2/ODEServer.java    |  1 +
 .../org/apache/ode/bpel/clapi/ClusterLock.java  | 27 ++++++++++++++++++++
 .../apache/ode/bpel/clapi/ClusterManager.java   |  7 +++--
 .../ode/bpel/clapi/ClusterProcessStore.java     | 13 ++++++++++
 .../ode/store/ClusterProcessStoreImpl.java      | 11 ++++++--
 .../hazelcast/HazelcastClusterImpl.java         | 27 ++++++++++----------
 6 files changed, 69 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/7eac2b12/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index 51f05dd..9b133fc 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -213,6 +213,7 @@ public class ODEServer {
         registerExternalVariableModules();
 
         _store.loadAll();
+        _clusterManager.registerClusterProcessStoreMessageListener();
 
         try {
             _bpelServer.start();

http://git-wip-us.apache.org/repos/asf/ode/blob/7eac2b12/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
new file mode 100644
index 0000000..ff17188
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
@@ -0,0 +1,27 @@
+package org.apache.ode.bpel.clapi;
+
+public interface ClusterLock {
+    /**
+     * Acquire the lock for each file in the file system
+     *
+     * @param key
+     * @return
+     */
+    boolean lock(String key);
+
+    /**
+     * Release the lock acquired by each file
+     *
+     * @param key
+     * @return
+     */
+    boolean unlock(String key);
+
+    /**
+     * Tries to acquire the lock for the specified key.
+     *
+     * @param key
+     * @return
+     */
+    boolean tryLock(String key);
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/7eac2b12/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
index da2d668..c57358c 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
@@ -60,7 +60,7 @@ public interface ClusterManager {
      * Set the Process Store object which uses for clustering
      * @param ps
      */
-    void setClusterProcessStore(Object ps);
+    void setClusterProcessStore(ClusterProcessStore ps);
 
     /**
      * Publish Deploy event to the cluster by deploy initiator
@@ -75,5 +75,8 @@ public interface ClusterManager {
      */
     void putIfAbsent(String key, String keyVal);
 
-
+    /**
+     * Register the cluster for message listener
+     */
+    void registerClusterProcessStoreMessageListener();
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/7eac2b12/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterProcessStore.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterProcessStore.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterProcessStore.java
new file mode 100644
index 0000000..45ff33c
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterProcessStore.java
@@ -0,0 +1,13 @@
+package org.apache.ode.bpel.clapi;
+
+import java.util.Collection;
+
+import javax.xml.namespace.QName;
+
+import org.apache.ode.bpel.iapi.ProcessStore;
+
+public interface ClusterProcessStore extends ProcessStore {
+    public void deployProcesses(String duName);
+
+    public Collection<QName> undeployProcesses(String duName);
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/7eac2b12/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index f0ae9d1..f36ea69 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -21,6 +21,7 @@ package org.apache.ode.store;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.ode.bpel.clapi.ClusterManager;
+import org.apache.ode.bpel.clapi.ClusterProcessStore;
 import org.apache.ode.bpel.clapi.ProcessStoreDeployedEvent;
 import org.apache.ode.bpel.clapi.ProcessStoreUndeployedEvent;
 import org.apache.ode.bpel.iapi.ProcessState;
@@ -29,12 +30,13 @@ import org.apache.ode.il.config.OdeConfigProperties;
 
 import javax.sql.DataSource;
 import javax.xml.namespace.QName;
+
 import java.io.File;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-public class ClusterProcessStoreImpl extends ProcessStoreImpl{
+public class ClusterProcessStoreImpl extends ProcessStoreImpl implements ClusterProcessStore {
     private static final Log __log = LogFactory.getLog(ClusterProcessStoreImpl.class);
 
     private ClusterManager _clusterManager;
@@ -56,9 +58,10 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
     private void publishProcessStoreDeployedEvent(String duName){
         deployedEvent = new ProcessStoreDeployedEvent(duName);
         _clusterManager.publishProcessStoreClusterEvent(deployedEvent);
+        __log.info("Completed actual deployment for " +duName +" by " +deployedEvent.getUuid());
     }
 
-    public void publishService(final String duName) {
+    public void deployProcesses(final String duName) {
         final ArrayList<ProcessConfImpl> confs = new ArrayList<ProcessConfImpl>();
         ProcessState state = ProcessState.ACTIVE;
 
@@ -69,6 +72,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
             Matcher matcher = duNamePattern.matcher(pconf.getPackage());
             if (matcher.matches() && pconf.getState().equals(state)) {
                   pconf.setState(ProcessState.RETIRED);
+                __log.info("Set state of " +pconf.getProcessId() +"to " +pconf.getState());
                   confs.add(pconf);
             }
         }
@@ -79,6 +83,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
                     DeploymentUnitDAO dudao = conn.getDeploymentUnit(duName);
                     if (dudao != null) {
                         List<ProcessConfImpl> load = load(dudao);
+                        __log.info("Loading DU from store: " + duName);
                         for(ProcessConfImpl p : load) {
                         _processes.put(p.getProcessId(),p);
                         }
@@ -93,6 +98,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
 
         for (ProcessConfImpl p : confs) {
             try {
+                __log.info("Fire event of " + p.getProcessId()  +" " +p.getState());
                 fireStateChange(p.getProcessId(), p.getState(), p.getDeploymentUnit().getName());
             } catch (Exception except) {
                 __log.error("Error with process retiring or activating : pid=" + p.getProcessId() + " package="+p.getDeploymentUnit().getName(), except);
@@ -112,6 +118,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
     private void publishProcessStoreUndeployedEvent(String duName){
         undeployedEvent = new ProcessStoreUndeployedEvent(duName);
         _clusterManager.publishProcessStoreClusterEvent(undeployedEvent);
+        __log.info("Completed actual undeployment for " +duName +" by " +undeployedEvent.getUuid());
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ode/blob/7eac2b12/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index 36859eb..89469e3 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -30,7 +30,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import org.apache.ode.bpel.clapi.*;
-import org.apache.ode.store.ClusterProcessStoreImpl;
+
 
 /**
  * This class implements necessary methods to build the cluster using hazelcast
@@ -43,7 +43,7 @@ public class HazelcastClusterImpl implements ClusterManager {
     private Member leader;
     private IMap<String, String> lock_map;
     private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
-    private ClusterProcessStoreImpl _clusterProcessStore;
+    private ClusterProcessStore _clusterProcessStore;
 
     public void init(File configRoot) {
 
@@ -71,10 +71,7 @@ public class HazelcastClusterImpl implements ClusterManager {
             __log.info("Registering HZ localMember ID " + localMember);
             markAsMaster();
             lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_LOCK_MAP);
-
-            // Register for listening to message listener
             clusterMessageTopic = _hazelcastInstance.getTopic("deployedMsg");
-            clusterMessageTopic.addMessageListener(new ClusterMessageListener());
         }
     }
 
@@ -103,11 +100,12 @@ public class HazelcastClusterImpl implements ClusterManager {
     class ClusterMemberShipListener implements MembershipListener {
         @Override
         public void memberAdded(MembershipEvent membershipEvent) {
-            // Noting to do here.
+            __log.info("Member Added " +membershipEvent.getMember().getUuid());
         }
 
         @Override
         public void memberRemoved(MembershipEvent membershipEvent) {
+            __log.info("Member Removed " +membershipEvent.getMember().getUuid());
             markAsMaster();
         }
 
@@ -119,7 +117,7 @@ public class HazelcastClusterImpl implements ClusterManager {
 
     public void publishProcessStoreClusterEvent(ProcessStoreClusterEvent clusterEvent) {
         clusterEvent.setUuid(_hazelcastInstance.getCluster().getLocalMember().getUuid());
-        __log.info("UUID " +clusterEvent.getUuid());
+        __log.info("Send " +clusterEvent.getInfo() +"Cluster Message " +"for " +clusterEvent.getDuName());
         clusterMessageTopic.publish(clusterEvent);
     }
 
@@ -137,8 +135,8 @@ public class HazelcastClusterImpl implements ClusterManager {
 
             if (!_hazelcastInstance.getCluster().getLocalMember().getUuid().equals(event.getUuid())) {
                 String duName = event.getDuName();
-                __log.info("Receive deployment msg to " + _hazelcastInstance.getCluster().getLocalMember() + " for " + duName);
-                _clusterProcessStore.publishService(duName);
+                __log.info("Receive " +event.getInfo() +"Cluster Message " +"for " +event.getDuName());
+                _clusterProcessStore.deployProcesses(duName);
             }
         }
 
@@ -147,7 +145,7 @@ public class HazelcastClusterImpl implements ClusterManager {
 
             if (!_hazelcastInstance.getCluster().getLocalMember().getUuid().equals(event.getUuid())) {
                 String duName = event.getDuName();
-                __log.info("Receive undeployment msg to " + _hazelcastInstance.getCluster().getLocalMember() + " for " + duName);
+                __log.info("Receive " +event.getInfo() +"Cluster Message " +"for " +event.getDuName());
                 _clusterProcessStore.undeployProcesses(duName);
             }
         }
@@ -166,9 +164,12 @@ public class HazelcastClusterImpl implements ClusterManager {
         return isMaster;
     }
 
-    public void setClusterProcessStore(Object store) {
-        if (store instanceof ClusterProcessStoreImpl)
-            _clusterProcessStore = (ClusterProcessStoreImpl) store;
+    public void setClusterProcessStore(ClusterProcessStore store) {
+            _clusterProcessStore = store;
+    }
+
+    public void registerClusterProcessStoreMessageListener() {
+        clusterMessageTopic.addMessageListener(new ClusterMessageListener());
     }
 }
 


[19/30] ode git commit: fixed errors

Posted by sa...@apache.org.
fixed errors


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

Branch: refs/heads/ODE-563
Commit: 09a448675000801befa747c802a9043439418a81
Parents: f1f9f3f
Author: suba <su...@cse.mrt.ac.lk>
Authored: Thu Jul 9 10:25:51 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Thu Jul 9 10:25:51 2015 +0530

----------------------------------------------------------------------
 .../org/apache/ode/bpel/clapi/ClusterManager.java |  2 +-
 .../hazelcast/HazelcastClusterImpl.java           |  2 +-
 .../hazelcast/HazelcastDeploymentLock.java        |  6 ++++++
 .../hazelcast/HazelcastInstanceLock.java          | 18 ++++++++++++------
 4 files changed, 20 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/09a44867/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
index 4616126..cbfb12f 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
@@ -33,7 +33,7 @@ public interface ClusterManager {
     /**
      * shutdown the cluster instance
      */
-    void shutdwon();
+    void shutdown();
 
     /**
      * Return whether the local member is Master or not

http://git-wip-us.apache.org/repos/asf/ode/blob/09a44867/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index 8bd9c7d..57984c0 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -166,7 +166,7 @@ public class HazelcastClusterImpl implements ClusterManager {
         if(_hazelcastInstance != null) _hazelcastInstance.getLifecycleService().shutdown();
     }
 
-    public ClusterLock getDeplymentLock(){
+    public ClusterLock getDeploymentLock(){
         return _hazelcastDeploymentLock;
     }
 

http://git-wip-us.apache.org/repos/asf/ode/blob/09a44867/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
index 34fa5d4..44bbea8 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
@@ -24,6 +24,8 @@ import org.apache.ode.bpel.clapi.ClusterLock;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import java.util.concurrent.TimeUnit;
+
 public class HazelcastDeploymentLock implements ClusterLock{
     private static final Log __log = LogFactory.getLog(HazelcastDeploymentLock.class);
 
@@ -60,4 +62,8 @@ public class HazelcastDeploymentLock implements ClusterLock{
         }
         return state;
     }
+
+    public boolean tryLockMap(String key,int time, TimeUnit tu) {
+        return true;
+    }
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/09a44867/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
index e673a81..40f1d66 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
@@ -36,7 +36,7 @@ public class HazelcastInstanceLock extends AbstractInstanceLockManager implement
         _lock_map = lock_map;
     }
 
-    private void putIfAbsent(String key, String keyVal) {
+    public void putIfAbsent(String key, String keyVal) {
         _lock_map.putIfAbsent(key, keyVal);
     }
 
@@ -85,12 +85,12 @@ public class HazelcastInstanceLock extends AbstractInstanceLockManager implement
         }
     }
 
-    private boolean lockMap(String key) {
+    public boolean lockMap(String key) {
         _lock_map.lock(key);
         return true;
     }
 
-    private boolean unlockMap(String key) {
+    public boolean unlockMap(String key) {
         if (_lock_map.get(key) == "true") {
             _lock_map.unlock(key);
             _lock_map.replace(key,"false");
@@ -98,13 +98,19 @@ public class HazelcastInstanceLock extends AbstractInstanceLockManager implement
         return true;
     }
 
-    private boolean tryLockMap(String key) {
+    public boolean tryLockMap(String key) {
         boolean state = _lock_map.tryLock(key);
         return state;
     }
 
-    private boolean tryLockMap(String key,int time, TimeUnit tu) {
-        boolean state = _lock_map.tryLock(key,time,tu);
+    public boolean tryLockMap(String key,int time, TimeUnit tu) {
+        boolean state = true;
+        try {
+        state = _lock_map.tryLock(key,time,tu);
+        } catch (InterruptedException ex) {
+            __log.error(ex);
+        }
+
         _lock_map.replace(key,"" +state);
         return state;
     }


[18/30] ode git commit: fixed errors with instance lock manager

Posted by sa...@apache.org.
fixed errors with instance lock manager


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

Branch: refs/heads/ODE-563
Commit: f1f9f3f1ebd87c988fa390c532dd5d7818760fdc
Parents: 4a101a4
Author: suba <su...@cse.mrt.ac.lk>
Authored: Thu Jul 9 10:02:09 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Thu Jul 9 10:02:09 2015 +0530

----------------------------------------------------------------------
 .../ode/bpel/AbstractInstanceLockManager.java   | 38 +++++++++++++++++++
 .../apache/ode/bpel/clapi/ClusterManager.java   |  6 ++-
 .../engine/AbstractInstanceLockManager.java     | 38 -------------------
 .../apache/ode/bpel/engine/BpelEngineImpl.java  | 39 ++++++--------------
 .../ode/bpel/engine/InstanceLockManager.java    | 10 ++---
 .../hazelcast/HazelcastClusterImpl.java         |  1 +
 .../hazelcast/HazelcastDeploymentLock.java      |  3 ++
 .../hazelcast/HazelcastInstanceLock.java        |  6 ++-
 8 files changed, 65 insertions(+), 76 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/f1f9f3f1/bpel-api/src/main/java/org/apache/ode/bpel/AbstractInstanceLockManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/AbstractInstanceLockManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/AbstractInstanceLockManager.java
new file mode 100644
index 0000000..7a34b2c
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/AbstractInstanceLockManager.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ode.bpel;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Abstract class to implement an instance lock manager. Instance lock provide process instance isolation from
+ * concurrent access when entering jacob
+ */
+public abstract class AbstractInstanceLockManager {
+    abstract public void unlock(Long iid);
+
+    abstract public void lock(Long iid, int i, TimeUnit microseconds) throws InterruptedException,
+            TimeoutException;
+
+    /** Exception class indicating a time-out occured  while obtaining a lock. */
+    public static final class TimeoutException extends Exception {
+        private static final long serialVersionUID = 7247629086692580285L;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ode/blob/f1f9f3f1/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
index 25110b4..4616126 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
@@ -18,8 +18,9 @@
  */
 package org.apache.ode.bpel.clapi;
 
+import org.apache.ode.bpel.AbstractInstanceLockManager;
+
 import java.io.File;
-import org.apache.ode.bpel.engine.AbstractInstnaceLockManager;
 
 public interface ClusterManager {
 
@@ -58,5 +59,6 @@ public interface ClusterManager {
     void registerClusterProcessStoreMessageListener();
 
     ClusterLock getDeploymentLock();
-    org.apache.ode.bpel.engine.AbstractInstanceLockManager getInstanceLock();
+
+    AbstractInstanceLockManager getInstanceLock();
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/f1f9f3f1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/AbstractInstanceLockManager.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/AbstractInstanceLockManager.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/AbstractInstanceLockManager.java
deleted file mode 100644
index a534e11..0000000
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/AbstractInstanceLockManager.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.ode.bpel.engine;
-
-import java.util.concurrent.TimeUnit;
-
-/**
- * Abstract class to implement an instance lock manager. Instance lock provide process instance isolation from
- * concurrent access when entering jacob
- */
-public abstract class AbstractInstanceLockManager {
-    abstract void unlock(Long iid);
-
-    abstract void lock(Long iid, int i, TimeUnit microseconds) throws InterruptedException,
-            TimeoutException;
-
-    /** Exception class indicating a time-out occured  while obtaining a lock. */
-    public static final class TimeoutException extends Exception {
-        private static final long serialVersionUID = 7247629086692580285L;
-    }
-}

http://git-wip-us.apache.org/repos/asf/ode/blob/f1f9f3f1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
index 5bef134..e278c7d 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
@@ -19,42 +19,19 @@
 
 package org.apache.ode.bpel.engine;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.concurrent.TimeUnit;
-
-import javax.wsdl.Operation;
-import javax.wsdl.PortType;
-import javax.xml.namespace.QName;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.AbstractInstanceLockManager;
 import org.apache.ode.bpel.dao.MessageExchangeDAO;
 import org.apache.ode.bpel.dao.ProcessDAO;
 import org.apache.ode.bpel.dao.ProcessInstanceDAO;
 import org.apache.ode.bpel.evt.BpelEvent;
-import org.apache.ode.bpel.iapi.BpelEngine;
-import org.apache.ode.bpel.iapi.BpelEngineException;
-import org.apache.ode.bpel.iapi.ContextException;
-import org.apache.ode.bpel.iapi.Endpoint;
-import org.apache.ode.bpel.iapi.Message;
-import org.apache.ode.bpel.iapi.MessageExchange;
-import org.apache.ode.bpel.iapi.OdeGlobalConfig;
-import org.apache.ode.bpel.iapi.MyRoleMessageExchange;
-import org.apache.ode.bpel.iapi.PartnerRoleMessageExchange;
-import org.apache.ode.bpel.iapi.ProcessState;
-import org.apache.ode.bpel.iapi.Scheduler;
+import org.apache.ode.bpel.iapi.*;
 import org.apache.ode.bpel.iapi.MessageExchange.FailureType;
 import org.apache.ode.bpel.iapi.MessageExchange.MessageExchangePattern;
 import org.apache.ode.bpel.iapi.MessageExchange.Status;
 import org.apache.ode.bpel.iapi.MyRoleMessageExchange.CorrelationStatus;
 import org.apache.ode.bpel.iapi.Scheduler.JobDetails;
-import org.apache.ode.bpel.iapi.Scheduler.JobInfo;
 import org.apache.ode.bpel.iapi.Scheduler.JobType;
 import org.apache.ode.bpel.intercept.InterceptorInvoker;
 import org.apache.ode.bpel.intercept.MessageExchangeInterceptor;
@@ -70,6 +47,12 @@ import org.apache.ode.utils.msg.MessageBundle;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import javax.wsdl.Operation;
+import javax.wsdl.PortType;
+import javax.xml.namespace.QName;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
 /**
  * Implementation of the {@link BpelEngine} interface: provides the server methods that should be invoked in the context of a
  * transaction.
@@ -115,7 +98,7 @@ public class BpelEngineImpl implements BpelEngine {
     private SharedEndpoints _sharedEps;
 
     /** Manage instance-level locks. */
-    private  AbstractInstanceLockManager _instanceLockManager;
+    private AbstractInstanceLockManager _instanceLockManager;
 
     final Contexts _contexts;
 
@@ -127,7 +110,6 @@ public class BpelEngineImpl implements BpelEngine {
         if(_contexts.clusterManager != null) {
             _instanceLockManager = _contexts.clusterManager.getInstanceLock();
         }
-
         else _instanceLockManager = new InstanceLockManager();
         _sharedEps = new SharedEndpoints();
         _sharedEps.init();
@@ -435,7 +417,8 @@ public class BpelEngineImpl implements BpelEngine {
         // Note that we don't want to wait too long here to get our lock, since we are likely holding
         // on to scheduler's locks of various sorts.
         try {
-            _instanceLockManager.lock(iid, 1, TimeUnit.MICROSECONDS);
+            _instanceLockManager.
+                    lock(iid, 1, TimeUnit.MICROSECONDS);
             _contexts.scheduler.registerSynchronizer(new Scheduler.Synchronizer() {
                 public void afterCompletion(boolean success) {
                     _instanceLockManager.unlock(iid);

http://git-wip-us.apache.org/repos/asf/ode/blob/f1f9f3f1/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
index 652d2ec..dba127b 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
@@ -20,6 +20,7 @@ package org.apache.ode.bpel.engine;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.AbstractInstanceLockManager;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -40,7 +41,7 @@ public class InstanceLockManager extends AbstractInstanceLockManager {
     private static final Log __log = LogFactory.getLog(InstanceLockManager.class);
 
     private final Lock _mutex = new java.util.concurrent.locks.ReentrantLock();
-    private final Map<Long, InstanceInfo> _locks = new HashMap<Long,InstanceInfo> ();
+    private final Map<Long, InstanceInfo> _locks = new HashMap<Long,InstanceInfo>();
 
     public void lock(Long iid, int time, TimeUnit tu) throws InterruptedException, TimeoutException {
         if (iid == null) return;
@@ -135,9 +136,6 @@ public class InstanceLockManager extends AbstractInstanceLockManager {
             return "{Lock for Instance #" + iid +", acquired by " +  acquierer + "}";
         }
     }
-
-    /** Exception class indicating a time-out occured while obtaining a lock. */
-    /*public static final class TimeoutException extends Exception {
-        private static final long serialVersionUID = 7247629086692580285L;
-    }*/
 }
+
+

http://git-wip-us.apache.org/repos/asf/ode/blob/f1f9f3f1/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index fb25606..8bd9c7d 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -30,6 +30,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import org.apache.ode.bpel.clapi.*;
+import org.apache.ode.bpel.AbstractInstanceLockManager;
 
 
 /**

http://git-wip-us.apache.org/repos/asf/ode/blob/f1f9f3f1/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
index 4d0aac1..34fa5d4 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
@@ -21,6 +21,9 @@ package org.apache.ode.clustering.hazelcast;
 import com.hazelcast.core.IMap;
 import org.apache.ode.bpel.clapi.ClusterLock;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 public class HazelcastDeploymentLock implements ClusterLock{
     private static final Log __log = LogFactory.getLog(HazelcastDeploymentLock.class);
 

http://git-wip-us.apache.org/repos/asf/ode/blob/f1f9f3f1/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
index 3b8ab41..e673a81 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
@@ -20,11 +20,13 @@ package org.apache.ode.clustering.hazelcast;
 
 import com.hazelcast.core.IMap;
 import org.apache.ode.bpel.clapi.ClusterLock;
-import org.apache.ode.bpel.engine.AbstractInstnaceLockManager;
+import org.apache.ode.bpel.AbstractInstanceLockManager;
 
 import java.util.concurrent.TimeUnit;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
-public class HazelcastInstanceLock extends AbstractInstnaceLockManager implements ClusterLock {
+public class HazelcastInstanceLock extends AbstractInstanceLockManager implements ClusterLock {
     private static final Log __log = LogFactory.getLog(HazelcastInstanceLock.class);
 
     private IMap<String, String> _lock_map;


[02/30] ode git commit: second commit

Posted by sa...@apache.org.
second commit


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

Branch: refs/heads/ODE-563
Commit: 79c0b16a694d9a8a25d9ecd8a05272e5e34d8a7f
Parents: 50c4dfe
Author: suba <su...@cse.mrt.ac.lk>
Authored: Sun Jun 7 20:44:02 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Sun Jun 7 20:44:02 2015 +0530

----------------------------------------------------------------------
 .../ode/axis2/deploy/DeploymentPoller.java      | 94 +++++++++++++-------
 .../ode/axis2/service/DeploymentWebService.java | 80 ++++++++++-------
 .../ode/il/config/OdeConfigProperties.java      |  6 ++
 .../hazelcast/HazelcastClusterImpl.java         | 22 ++---
 4 files changed, 122 insertions(+), 80 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/79c0b16a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index 6f82385..057c0fb 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -54,6 +54,8 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
+import  org.apache.ode.clustering.hazelcast.HazelcastClusterImpl;
+
 /**
  * Polls a directory for the deployment of a new deployment unit.
  */
@@ -74,6 +76,8 @@ public class DeploymentPoller {
 
     private SystemSchedulesConfig _systemSchedulesConf;
 
+    private boolean clusterEnabled;
+
     @SuppressWarnings("unchecked")
     private Map<String, WatchDog> dDWatchDogsByPath = new HashMap<String, WatchDog>();
     @SuppressWarnings("unchecked")
@@ -96,6 +100,7 @@ public class DeploymentPoller {
     public DeploymentPoller(File deployDir, final ODEServer odeServer) {
         _odeServer = odeServer;
         _deployDir = deployDir;
+        clusterEnabled = _odeServer.getClusteringState();
         if (!_deployDir.exists()) {
             boolean isDeployDirCreated = _deployDir.mkdir();
             if (!isDeployDirCreated) {
@@ -130,50 +135,58 @@ public class DeploymentPoller {
     @SuppressWarnings("unchecked")
     private void check() {
         File[] files = _deployDir.listFiles(_fileFilter);
+        boolean duLocked;
 
         // Checking for new deployment directories
         if (isDeploymentFromODEFileSystemAllowed() && files != null) {
             for (File file : files) {
-                File deployXml = new File(file, "deploy.xml");
-                File deployedMarker = new File(_deployDir, file.getName() + ".deployed");
-
-                if (!deployXml.exists()) {
-                    // Skip if deploy.xml is abset
-                    if (__log.isDebugEnabled()) {
-                        __log.debug("Not deploying " + file + " (missing deploy.xml)");
-                    }
-                }
+                duLocked = lock(file.getName());
+                try {
+                    if (duLocked) {
+                        File deployXml = new File(file, "deploy.xml");
+                        File deployedMarker = new File(_deployDir, file.getName() + ".deployed");
+
+                        if (!deployXml.exists()) {
+                            // Skip if deploy.xml is abset
+                            if (__log.isDebugEnabled()) {
+                                __log.debug("Not deploying " + file + " (missing deploy.xml)");
+                            }
+                        }
 
-                WatchDog ddWatchDog = ensureDeployXmlWatchDog(file, deployXml);
+                        WatchDog ddWatchDog = ensureDeployXmlWatchDog(file, deployXml);
 
-                if (deployedMarker.exists()) {
-                    checkDeployXmlWatchDog(ddWatchDog);
-                    continue;
-                }
+                        if (deployedMarker.exists()) {
+                            checkDeployXmlWatchDog(ddWatchDog);
+                            continue;
+                        }
 
-                try {
-                    boolean isCreated = deployedMarker.createNewFile();
-                    if (!isCreated) {
-                        __log.error("Error while creating  file "
+                        try {
+                            boolean isCreated = deployedMarker.createNewFile();
+                            if (!isCreated) {
+                                __log.error("Error while creating  file "
                                         + file.getName()
                                         + ".deployed ,deployment could be inconsistent");
-                    }
-                } catch (IOException e1) {
-                    __log.error("Error creating deployed marker file, " + file + " will not be deployed");
-                    continue;
-                }
+                            }
+                        } catch (IOException e1) {
+                            __log.error("Error creating deployed marker file, " + file + " will not be deployed");
+                            continue;
+                        }
 
-                try {
-                    _odeServer.getProcessStore().undeploy(file);
-                } catch (Exception ex) {
-                    __log.error("Error undeploying " + file.getName());
-                }
+                        try {
+                            _odeServer.getProcessStore().undeploy(file);
+                        } catch (Exception ex) {
+                            __log.error("Error undeploying " + file.getName());
+                        }
 
-                try {
-                    Collection<QName> deployed = _odeServer.getProcessStore().deploy(file);
-                    __log.info("Deployment of artifact " + file.getName() + " successful: " + deployed );
-                } catch (Exception e) {
-                    __log.error("Deployment of " + file.getName() + " failed, aborting for now.", e);
+                        try {
+                            Collection<QName> deployed = _odeServer.getProcessStore().deploy(file);
+                            __log.info("Deployment of artifact " + file.getName() + " successful: " + deployed);
+                        } catch (Exception e) {
+                            __log.error("Deployment of " + file.getName() + " failed, aborting for now.", e);
+                        }
+                    }
+                } finally {
+                    unlock(file.getName());
                 }
             }
         }
@@ -324,4 +337,19 @@ public class DeploymentPoller {
             _odeServer.getProcessStore().refreshSchedules(deploymentPakage);
         }
     }
+
+    //Implementation of IMap key Lock
+    public boolean lock(String key) {
+        if(clusterEnabled) {
+            _odeServer.getBpelServer().getContexts().hazelcastClusterImpl.lock(key);
+        }
+        return true;
+    }
+
+    public boolean unlock(String key) {
+        if(clusterEnabled) {
+            _odeServer.getBpelServer().getContexts().hazelcastClusterImpl.unlock(key);
+        }
+        return true;
+    }
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/79c0b16a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
index aa769ed..1c09bb3 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
@@ -109,6 +109,7 @@ public class DeploymentWebService {
             String operation = messageContext.getAxisOperation().getName().getLocalPart();
             SOAPFactory factory = getSOAPFactory(messageContext);
             boolean unknown = false;
+            boolean duLocked;
 
             try {
                 if (operation.equals("deploy")) {
@@ -166,43 +167,54 @@ public class DeploymentWebService {
                         _poller.hold();
 
                         File dest = new File(_deployPath, bundleName + "-" + _store.getCurrentVersion());
-                        boolean createDir = dest.mkdir();
-                        if(!createDir){
-                        	throw new OdeFault("Error while creating file " + dest.getName());
-                        }
-                        unzip(dest, (DataHandler) binaryNode.getDataHandler());
-
-                        // Check that we have a deploy.xml
-                        File deployXml = new File(dest, "deploy.xml");
-                        if (!deployXml.exists())
-                            throw new OdeFault("The deployment doesn't appear to contain a deployment " +
-                                    "descriptor in its root directory named deploy.xml, aborting.");
-
-                        Collection<QName> deployed = _store.deploy(dest);
-
-                        File deployedMarker = new File(_deployPath, dest.getName() + ".deployed");
-                        if(!deployedMarker.createNewFile()) {
-                        	throw new OdeFault("Error while creating file " + deployedMarker.getName() + "deployment failed");
-                        }
 
-                        // Telling the poller what we deployed so that it doesn't try to deploy it again
-                        _poller.markAsDeployed(dest);
-                        __log.info("Deployment of artifact " + dest.getName() + " successful.");
+                        //lock on deployment unit directory name
+                        duLocked = _poller.lock(dest.getName());
 
-                        OMElement response = factory.createOMElement("response", null);
-
-                        if (__log.isDebugEnabled()) __log.debug("Deployed package: "+dest.getName());
-                        OMElement d = factory.createOMElement("name", _deployapi);
-                        d.setText(dest.getName());
-                        response.addChild(d);
-
-                        for (QName pid : deployed) {
-                            if (__log.isDebugEnabled()) __log.debug("Deployed PID: "+pid);
-                            d = factory.createOMElement("id", _deployapi);
-                            d.setText(pid);
-                            response.addChild(d);
+                        if (duLocked) {
+                            boolean createDir = dest.mkdir();
+                            if (!createDir) {
+                                throw new OdeFault("Error while creating file " + dest.getName());
+                            }
+                            try {
+                                unzip(dest, (DataHandler) binaryNode.getDataHandler());
+
+                                // Check that we have a deploy.xml
+                                File deployXml = new File(dest, "deploy.xml");
+                                if (!deployXml.exists())
+                                    throw new OdeFault("The deployment doesn't appear to contain a deployment " +
+                                            "descriptor in its root directory named deploy.xml, aborting.");
+
+                                Collection<QName> deployed = _store.deploy(dest);
+
+                                File deployedMarker = new File(_deployPath, dest.getName() + ".deployed");
+                                if (!deployedMarker.createNewFile()) {
+                                    throw new OdeFault("Error while creating file " + deployedMarker.getName() + "deployment failed");
+                                }
+
+                                // Telling the poller what we deployed so that it doesn't try to deploy it again
+                                _poller.markAsDeployed(dest);
+                                __log.info("Deployment of artifact " + dest.getName() + " successful.");
+
+
+                                OMElement response = factory.createOMElement("response", null);
+
+                                if (__log.isDebugEnabled()) __log.debug("Deployed package: " + dest.getName());
+                                OMElement d = factory.createOMElement("name", _deployapi);
+                                d.setText(dest.getName());
+                                response.addChild(d);
+
+                                for (QName pid : deployed) {
+                                    if (__log.isDebugEnabled()) __log.debug("Deployed PID: " + pid);
+                                    d = factory.createOMElement("id", _deployapi);
+                                    d.setText(pid);
+                                    response.addChild(d);
+                                }
+                                sendResponse(factory, messageContext, "deployResponse", response);
+                            } finally {
+                                _poller.unlock(dest.getName());
+                            }
                         }
-                        sendResponse(factory, messageContext, "deployResponse", response);
                     } finally {
                         _poller.release();
                     }

http://git-wip-us.apache.org/repos/asf/ode/blob/79c0b16a/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
----------------------------------------------------------------------
diff --git a/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java b/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
index 39ca2b0..cef3b74 100644
--- a/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
+++ b/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
@@ -106,6 +106,8 @@ public class OdeConfigProperties {
 
     public static final String DEFAULT_TX_FACTORY_CLASS_NAME = "org.apache.ode.il.EmbeddedGeronimoFactory";
 
+    public static final String PROP_HAZELCAST_CLUSTERING = "hazelcast.clustering.enabled";
+
     private File _cfgFile;
 
     private String _prefix;
@@ -289,6 +291,10 @@ public class OdeConfigProperties {
         return getProperty(OdeConfigProperties.PROP_DEPLOY_DIR);
     }
 
+    public String getClusteringState() {
+        return getProperty(OdeConfigProperties.PROP_HAZELCAST_CLUSTERING);
+    }
+
     public String getTxFactoryClass() {
         return getProperty(OdeConfigProperties.PROP_TX_FACTORY_CLASS, DEFAULT_TX_FACTORY_CLASS_NAME);
     }

http://git-wip-us.apache.org/repos/asf/ode/blob/79c0b16a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index afe0e95..2cff4c8 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -39,6 +39,8 @@ public class HazelcastClusterImpl implements HazelcastCluster{
     private String message = "";
     private Member leader;
 
+    private IMap<String, String> lock_map;
+
     public HazelcastClusterImpl(HazelcastInstance hazelcastInstance) {
         _hazelcastInstance = hazelcastInstance;
         init();
@@ -57,6 +59,8 @@ public class HazelcastClusterImpl implements HazelcastCluster{
         __log.info("Registering HZ localMember ID " + localMemberID);
         _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP)
                 .put(localMemberID, isMaster);
+
+        lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_LOCK_MAP);
     }
 
     public String getHazelCastNodeID(Member member) {
@@ -65,20 +69,12 @@ public class HazelcastClusterImpl implements HazelcastCluster{
         return hostName + ":" + port;
     }
 
-    class ClusterManager {
-        IMap<String, String> lock_map;
-
-        ClusterManager() {
-            lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_LOCK_MAP);
-        }
-
-        void lock(String key) {
-            lock_map.lock(key);
-        }
+    public void lock(String key) {
+        lock_map.lock(key);
+    }
 
-        void unlock(String key) {
-            lock_map.unlock(key);
-        }
+    public void unlock(String key) {
+        lock_map.unlock(key);
     }
 
     class ClusterMemberShipListener implements MembershipListener {


[24/30] ode git commit: Cluster Enabled Simple Scheduler-1

Posted by sa...@apache.org.
Cluster Enabled Simple Scheduler-1


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

Branch: refs/heads/ODE-563
Commit: 15f1883c40e845b430c5c40418333ccccfa48b6a
Parents: 9ffe0c7
Author: suba <su...@cse.mrt.ac.lk>
Authored: Sun Jul 19 00:41:15 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Sun Jul 19 00:41:15 2015 +0530

----------------------------------------------------------------------
 .../java/org/apache/ode/axis2/ODEServer.java    |  12 +-
 .../org/apache/ode/test/BPELTestAbstract.java   |  53 ++++----
 .../hazelcast/HazelcastClusterImpl.java         |  29 ++++-
 .../java/org/apache/ode/jbi/OdeLifeCycle.java   |  25 ++--
 .../ode/scheduler/simple/SchedulerListener.java |  27 ++++
 .../ode/scheduler/simple/SimpleScheduler.java   | 123 +++++++++++++++----
 6 files changed, 191 insertions(+), 78 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/15f1883c/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index da62139..6803350 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -50,6 +50,7 @@ import org.apache.ode.store.ClusterProcessStoreImpl;
 import org.apache.ode.store.ProcessStoreImpl;
 import org.apache.ode.utils.GUID;
 import org.apache.ode.utils.fs.TempFileManager;
+import org.omg.CORBA.StringHolder;
 
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
@@ -195,7 +196,10 @@ public class ODEServer {
         registerExternalVariableModules();
 
         _store.loadAll();
-        if (_clusterManager != null) _clusterManager.registerClusterProcessStoreMessageListener();
+        if (_clusterManager != null) {
+            _clusterManager.registerClusterProcessStoreMessageListener();
+            _clusterManager.setScheduler(_scheduler);
+        }
 
         try {
             _bpelServer.start();
@@ -524,8 +528,10 @@ public class ODEServer {
     }
 
     protected Scheduler createScheduler() {
-        SimpleScheduler scheduler = new SimpleScheduler(new GUID().toString(),
-                new JdbcDelegate(_db.getDataSource()), _odeConfig.getProperties());
+        String nodeId;
+        if (isClusteringEnabled) nodeId = _clusterManager.getUuid();
+        else nodeId = new GUID().toString();
+        SimpleScheduler scheduler = new SimpleScheduler(nodeId, new JdbcDelegate(_db.getDataSource()), _odeConfig.getProperties(), isClusteringEnabled);
         scheduler.setExecutorService(_executorService);
         scheduler.setTransactionManager(_txMgr);
         return scheduler;

http://git-wip-us.apache.org/repos/asf/ode/blob/15f1883c/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java
----------------------------------------------------------------------
diff --git a/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java b/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java
index d24b59b..cdda50e 100644
--- a/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java
+++ b/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java
@@ -18,44 +18,14 @@
  */
 package org.apache.ode.test;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.sql.Connection;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Properties;
-import java.util.concurrent.Callable;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.sql.DataSource;
-import javax.transaction.TransactionManager;
-import javax.xml.namespace.QName;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.ode.bpel.common.evt.DebugBpelEventListener;
 import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
 import org.apache.ode.bpel.engine.BpelServerImpl;
-import org.apache.ode.bpel.iapi.Message;
-import org.apache.ode.bpel.iapi.MessageExchange;
+import org.apache.ode.bpel.iapi.*;
 import org.apache.ode.bpel.iapi.MessageExchange.Status;
-import org.apache.ode.bpel.iapi.MyRoleMessageExchange;
 import org.apache.ode.bpel.iapi.MyRoleMessageExchange.CorrelationStatus;
-import org.apache.ode.bpel.iapi.ProcessStore;
-import org.apache.ode.bpel.iapi.ProcessStoreEvent;
-import org.apache.ode.bpel.iapi.ProcessStoreListener;
 import org.apache.ode.bpel.memdao.BpelDAOConnectionFactoryImpl;
 import org.apache.ode.il.EmbeddedGeronimoFactory;
 import org.apache.ode.il.config.OdeConfigProperties;
@@ -71,6 +41,25 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.w3c.dom.Element;
 
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.sql.DataSource;
+import javax.transaction.TransactionManager;
+import javax.xml.namespace.QName;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Properties;
+import java.util.concurrent.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 public abstract class BPELTestAbstract {
     private static final Log log = LogFactory.getLog(BPELTestAbstract.class);
     public static final long WAIT_BEFORE_INVOKE_TIMEOUT = 2000;
@@ -139,7 +128,7 @@ public abstract class BPELTestAbstract {
 
         {
             JdbcDelegate del = new JdbcDelegate(_dataSource);
-            scheduler = new SimpleScheduler("node", del, props);
+            scheduler = new SimpleScheduler("node", del, props,false);
             scheduler.setTransactionManager(_txManager);
             _cf = new BpelDAOConnectionFactoryImpl(scheduler);
             _server.setDaoConnectionFactory(_cf);

http://git-wip-us.apache.org/repos/asf/ode/blob/15f1883c/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index 5f2b8f5..63a889a 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -30,6 +30,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import org.apache.ode.bpel.clapi.*;
+import org.apache.ode.bpel.iapi.Scheduler;
 
 /**
  * This class implements necessary methods to build the cluster using hazelcast
@@ -46,6 +47,7 @@ public class HazelcastClusterImpl implements ClusterManager {
     private IMap<Long, Long> instance_lock_map;
     private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
     private ClusterProcessStore _clusterProcessStore;
+    private Scheduler _scheduler;
     private ClusterLock<String> _hazelcastDeploymentLock;
     private ClusterLock<Long> _hazelcastInstanceLock;
 
@@ -89,13 +91,17 @@ public class HazelcastClusterImpl implements ClusterManager {
     class ClusterMemberShipListener implements MembershipListener {
         @Override
         public void memberAdded(MembershipEvent membershipEvent) {
-            __log.info("Member Added " +membershipEvent.getMember().getUuid());
+            String nodeId =  membershipEvent.getMember().getUuid();
+            __log.info("Member Added " +nodeId);
+            if(isMaster) _simpleScheduler.memberAdded(nodeId);
         }
 
         @Override
         public void memberRemoved(MembershipEvent membershipEvent) {
-            __log.info("Member Removed " +membershipEvent.getMember().getUuid());
+            String nodeId =  membershipEvent.getMember().getUuid();
+            __log.info("Member Removed " +nodeId);
             markAsMaster();
+            if(isMaster) _simpleScheduler.memberRemoved(nodeId, uuid);
         }
 
         @Override
@@ -145,6 +151,7 @@ public class HazelcastClusterImpl implements ClusterManager {
         leader = _hazelcastInstance.getCluster().getMembers().iterator().next();
         if (leader.localMember()) {
             isMaster = true;
+            _simpleScheduler.setIsMasterNode(true);
         }
         __log.info(isMaster);
     }
@@ -153,8 +160,17 @@ public class HazelcastClusterImpl implements ClusterManager {
         return isMaster;
     }
 
+    public String getUuid() {
+        return uuid;
+    }
+
     public void setClusterProcessStore(ClusterProcessStore store) {
-            _clusterProcessStore = store;
+        _clusterProcessStore = store;
+    }
+
+    public void setScheduler(Scheduler scheduler) {
+        _scheduler = scheduler;
+        _scheduler.setClusterManager(this);
     }
 
     public void registerClusterProcessStoreMessageListener() {
@@ -172,5 +188,12 @@ public class HazelcastClusterImpl implements ClusterManager {
     public ClusterLock<Long> getInstanceLock(){
         return _hazelcastInstanceLock;
     }
+
+    public List<String> getKnownNodes() {
+        List<String> nodesList = new ArrayList<String>();
+        for(Member m : _hazelcastInstance.getCluster().getMembers())
+          nodesList.add(m.getUuid()) ;
+        return nodesList;
+    }
 }
 

http://git-wip-us.apache.org/repos/asf/ode/blob/15f1883c/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
----------------------------------------------------------------------
diff --git a/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java b/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
index 40fb044..0c1b296 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
@@ -19,18 +19,6 @@
 
 package org.apache.ode.jbi;
 
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.util.concurrent.Executors;
-
-import javax.jbi.JBIException;
-import javax.jbi.component.ComponentContext;
-import javax.jbi.component.ComponentLifeCycle;
-import javax.jbi.component.ServiceUnitManager;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import javax.transaction.TransactionManager;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
@@ -50,6 +38,17 @@ import org.apache.ode.store.ProcessStoreImpl;
 import org.apache.ode.utils.GUID;
 import org.apache.ode.utils.fs.TempFileManager;
 
+import javax.jbi.JBIException;
+import javax.jbi.component.ComponentContext;
+import javax.jbi.component.ComponentLifeCycle;
+import javax.jbi.component.ServiceUnitManager;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.transaction.TransactionManager;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.concurrent.Executors;
+
 /**
  * This class implements ComponentLifeCycle. The JBI framework will start this engine class automatically when JBI framework starts
  * up.
@@ -243,7 +242,7 @@ public class OdeLifeCycle implements ComponentLifeCycle {
             _ode._executorService = Executors.newCachedThreadPool();
         else
             _ode._executorService = Executors.newFixedThreadPool(_ode._config.getThreadPoolMaxSize());
-        _ode._scheduler = new SimpleScheduler(new GUID().toString(),new JdbcDelegate(_ode._dataSource), _ode._config.getProperties());
+        _ode._scheduler = new SimpleScheduler(new GUID().toString(),new JdbcDelegate(_ode._dataSource), _ode._config.getProperties(),false);
         _ode._scheduler.setJobProcessor(_ode._server);
         _ode._scheduler.setExecutorService(_ode._executorService);
         _ode._scheduler.setTransactionManager((TransactionManager) _ode.getContext().getTransactionManager());

http://git-wip-us.apache.org/repos/asf/ode/blob/15f1883c/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerListener.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerListener.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerListener.java
new file mode 100644
index 0000000..3786912
--- /dev/null
+++ b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SchedulerListener.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ode.scheduler.simple;
+
+public interface SchedulerListener {
+
+    void memberAdded(String nodeId);
+
+    void memberRemoved(String nodeId,String masterId);
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ode/blob/15f1883c/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
index a56b86e..3b6ec4d 100644
--- a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
+++ b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
@@ -19,33 +19,19 @@
 
 package org.apache.ode.scheduler.simple;
 
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Properties;
-import java.util.Random;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArraySet;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.atomic.AtomicLong;
-
-import javax.transaction.Status;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.clapi.ClusterManager;
 import org.apache.ode.bpel.iapi.ContextException;
 import org.apache.ode.bpel.iapi.Scheduler;
 
+import javax.transaction.*;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.concurrent.*;
+import java.util.concurrent.atomic.AtomicLong;
+
 /**
  * A reliable and relatively simple scheduler that uses a database to persist information about
  * scheduled tasks.
@@ -66,7 +52,7 @@ import org.apache.ode.bpel.iapi.Scheduler;
  * @author Maciej Szefler ( m s z e f l e r @ g m a i l . c o m )
  *
  */
-public class SimpleScheduler implements Scheduler, TaskRunner {
+public class SimpleScheduler implements Scheduler, TaskRunner, SchedulerListener {
     private static final Log __log = LogFactory.getLog(SimpleScheduler.class);
 
     private static final int DEFAULT_TRANSACTION_TIMEOUT = 60 * 1000;
@@ -114,6 +100,10 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
 
     private DatabaseDelegate _db;
 
+    private boolean _isClusterEnabled;
+
+    private ClusterManager _clusterManager;
+
     /** All the nodes we know about */
     private CopyOnWriteArraySet<String> _knownNodes = new CopyOnWriteArraySet<String>();
 
@@ -147,9 +137,10 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
 
     private DateFormat debugDateFormatter = new SimpleDateFormat("HH:mm:ss,SSS");
 
-    public SimpleScheduler(String nodeId, DatabaseDelegate del, Properties conf) {
+    public SimpleScheduler(String nodeId, DatabaseDelegate del, Properties conf, boolean clusterState) {
         _nodeId = nodeId;
         _db = del;
+        _isClusterEnabled = clusterState;
         _todoLimit = getIntProperty(conf, "ode.scheduler.queueLength", _todoLimit);
         _immediateInterval = getLongProperty(conf, "ode.scheduler.immediateInterval", _immediateInterval);
         _nearFutureInterval = getLongProperty(conf, "ode.scheduler.nearFutureInterval", _nearFutureInterval);
@@ -183,6 +174,10 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
         _nodeId = nodeId;
     }
 
+    public void setClusterManager(ClusterManager cm) {
+        _clusterManager = cm;
+    }
+
     public void setStaleInterval(long staleInterval) {
         _staleInterval = staleInterval;
     }
@@ -490,10 +485,11 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
         _todo.enqueue(new LoadImmediateTask(now));
 
         // schedule check for stale nodes, make it random so that the nodes don't overlap.
-        _todo.enqueue(new CheckStaleNodes(now + randomMean(_staleInterval)));
+        if (!_isClusterEnabled)
+            _todo.enqueue(new CheckStaleNodes(now + randomMean(_staleInterval)));
 
         // do the upgrade sometime (random) in the immediate interval.
-        _todo.enqueue(new UpgradeJobsTask(now + randomMean(_immediateInterval)));
+        enqueUpgradeJobsTask(now);
 
         _todo.start();
         _running = true;
@@ -521,6 +517,18 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
         _running = false;
     }
 
+    public void memberAdded(final String nodeId) {
+        _todo.enqueue(new UpgradeJobsTask(System.currentTimeMillis()+ randomMean(_immediateInterval)));
+    }
+
+    public void memberRemoved(final String nodeId, final String masterId) {
+        recoverClusterStaleNodes(nodeId, masterId);
+    }
+
+    public void enqueUpgradeJobsTask(long now) {
+        _todo.enqueue(new UpgradeJobsTask(now + randomMean(_immediateInterval)));
+    }
+
     class RunJob implements Callable<Void> {
         final Job job;
         final JobProcessor processor;
@@ -814,6 +822,41 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
 
     }
 
+    boolean doClusterJobsUpgrade() {
+            __log.debug("UPGRADE started for Cluster Mode");
+            final ArrayList<String> knownNodes = _clusterManager.getKnownNodes();
+            Collections.sort(knownNodes);
+
+            // We're going to try to upgrade near future jobs using the db only.
+            // We assume that the distribution of the trailing digits in the
+            // scheduled time are uniformly distributed, and use modular division
+            // of the time by the number of nodes to create the node assignment.
+            // This can be done in a single update statement.
+            final long maxtime = System.currentTimeMillis() + _nearFutureInterval;
+            try {
+                return execTransaction(new Callable<Boolean>() {
+
+                    public Boolean call() throws Exception {
+                        int numNodes = knownNodes.size();
+                        for (int i = 0; i < numNodes; ++i) {
+                            String node = knownNodes.get(i);
+                            _db.updateAssignToNode(node, i, numNodes, maxtime);
+                        }
+                        return true;
+                    }
+
+                });
+
+            } catch (Exception ex) {
+                __log.error("Database error upgrading jobs.", ex);
+                return false;
+            } finally {
+                __log.debug("UPGRADE complete");
+            }
+
+        }
+
+
     /**
      * Re-assign stale node's jobs to self.
      * @param nodeId
@@ -857,6 +900,31 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
 //        return delay;
 //    }
 
+    void recoverClusterStaleNodes(final String nodeId, final String masterId) {
+        if (__log.isDebugEnabled()) {
+            __log.debug("recovering stale nodes for Cluster Mode " + nodeId);
+        }
+        try {
+            int numrows = execTransaction(new Callable<Integer>() {
+                public Integer call() throws Exception {
+                    return _db.updateReassign(nodeId, masterId);
+                }
+            });
+
+            if (__log.isDebugEnabled()) {
+                __log.debug("reassigned " + numrows + " jobs to master node. ");
+            }
+
+            // Force a load-immediate to catch anything new from the recovered node.
+            doLoadImmediate();
+
+        } catch (Exception ex) {
+            __log.error("Database error reassigning node.", ex);
+        } finally {
+            __log.debug("node recovery complete");
+        }
+    }
+
     private abstract class SchedulerTask extends Task implements Runnable {
         SchedulerTask(long schedDate) {
             super(schedDate);
@@ -911,7 +979,8 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
 
             boolean success = false;
             try {
-                success = doUpgrade();
+               if (_isClusterEnabled && _clusterManager.getIsMaster()) success = doClusterJobsUpgrade();
+                else success = doUpgrade();
             } finally {
                 long future = System.currentTimeMillis() + (success ? (long) (_nearFutureInterval * .50) : 1000);
                 _nextUpgrade.set(future);


[11/30] ode git commit: completed version-2 of deploying processes in the cluster

Posted by sa...@apache.org.
completed version-2 of deploying processes in the cluster


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

Branch: refs/heads/ODE-563
Commit: 4137714cf38dffd9b7d391bf5e2944e84ccb14d4
Parents: 0afb7c4
Author: suba <su...@cse.mrt.ac.lk>
Authored: Tue Jun 23 09:56:39 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Tue Jun 23 09:56:39 2015 +0530

----------------------------------------------------------------------
 .../apache/ode/bpel/clapi/ClusterManager.java   |  4 +--
 .../ode/store/ClusterProcessStoreImpl.java      |  4 +--
 .../hazelcast/HazelcastClusterImpl.java         | 27 ++++++++------------
 3 files changed, 15 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/4137714c/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
index fab2bac..da2d668 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
@@ -64,9 +64,9 @@ public interface ClusterManager {
 
     /**
      * Publish Deploy event to the cluster by deploy initiator
-     * @param event
+     * @param clusterEvent
      */
-    void publishProcessStoreEvent(Object event);
+    void publishProcessStoreClusterEvent(ProcessStoreClusterEvent clusterEvent);
 
     /**
      * Check whether the map has a value for given key, if absent put the value to map

http://git-wip-us.apache.org/repos/asf/ode/blob/4137714c/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index 117eab0..f0ae9d1 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -55,7 +55,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
 
     private void publishProcessStoreDeployedEvent(String duName){
         deployedEvent = new ProcessStoreDeployedEvent(duName);
-        _clusterManager.publishProcessStoreEvent(deployedEvent);
+        _clusterManager.publishProcessStoreClusterEvent(deployedEvent);
     }
 
     public void publishService(final String duName) {
@@ -111,7 +111,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
 
     private void publishProcessStoreUndeployedEvent(String duName){
         undeployedEvent = new ProcessStoreUndeployedEvent(duName);
-        _clusterManager.publishProcessStoreEvent(undeployedEvent);
+        _clusterManager.publishProcessStoreClusterEvent(undeployedEvent);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ode/blob/4137714c/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index 42a3169..36859eb 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -29,10 +29,7 @@ import java.util.List;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-import org.apache.ode.bpel.clapi.ClusterManager;
-import org.apache.ode.bpel.clapi.ProcessStoreClusterEvent;
-import org.apache.ode.bpel.clapi.ProcessStoreDeployedEvent;
-import org.apache.ode.bpel.clapi.ProcessStoreUndeployedEvent;
+import org.apache.ode.bpel.clapi.*;
 import org.apache.ode.store.ClusterProcessStoreImpl;
 
 /**
@@ -45,7 +42,7 @@ public class HazelcastClusterImpl implements ClusterManager {
     private boolean isMaster = false;
     private Member leader;
     private IMap<String, String> lock_map;
-    private ITopic<Object> clusterMessageTopic;
+    private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
     private ClusterProcessStoreImpl _clusterProcessStore;
 
     public void init(File configRoot) {
@@ -120,27 +117,25 @@ public class HazelcastClusterImpl implements ClusterManager {
         }
     }
 
-    public void publishProcessStoreEvent(Object event) {
-        if (event instanceof ProcessStoreClusterEvent) {
-            ProcessStoreClusterEvent e = (ProcessStoreClusterEvent) event;
-        e.setUuid(_hazelcastInstance.getCluster().getLocalMember().getUuid());
-        clusterMessageTopic.publish(e);
-        }
+    public void publishProcessStoreClusterEvent(ProcessStoreClusterEvent clusterEvent) {
+        clusterEvent.setUuid(_hazelcastInstance.getCluster().getLocalMember().getUuid());
+        __log.info("UUID " +clusterEvent.getUuid());
+        clusterMessageTopic.publish(clusterEvent);
     }
 
 
-    class ClusterMessageListener implements MessageListener<Object> {
+    class ClusterMessageListener implements MessageListener<ProcessStoreClusterEvent> {
         @Override
-        public void onMessage(Message<Object> msg) {
+        public void onMessage(Message<ProcessStoreClusterEvent> msg) {
             handleEvent(msg.getMessageObject());
         }
     }
 
-    private void handleEvent(Object message) {
+    private void handleEvent(ProcessStoreClusterEvent message) {
         if (message instanceof ProcessStoreDeployedEvent) {
             ProcessStoreDeployedEvent event = (ProcessStoreDeployedEvent) message;
 
-            if (_hazelcastInstance.getCluster().getLocalMember().getUuid() != event.getUuid()) {
+            if (!_hazelcastInstance.getCluster().getLocalMember().getUuid().equals(event.getUuid())) {
                 String duName = event.getDuName();
                 __log.info("Receive deployment msg to " + _hazelcastInstance.getCluster().getLocalMember() + " for " + duName);
                 _clusterProcessStore.publishService(duName);
@@ -150,7 +145,7 @@ public class HazelcastClusterImpl implements ClusterManager {
         else if (message instanceof ProcessStoreUndeployedEvent) {
             ProcessStoreUndeployedEvent event = (ProcessStoreUndeployedEvent) message;
 
-            if (_hazelcastInstance.getCluster().getLocalMember().getUuid() != event.getUuid()) {
+            if (!_hazelcastInstance.getCluster().getLocalMember().getUuid().equals(event.getUuid())) {
                 String duName = event.getDuName();
                 __log.info("Receive undeployment msg to " + _hazelcastInstance.getCluster().getLocalMember() + " for " + duName);
                 _clusterProcessStore.undeployProcesses(duName);


[05/30] ode git commit: publishing axis2 service in all servers in cluster

Posted by sa...@apache.org.
publishing axis2 service in all servers in cluster


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

Branch: refs/heads/ODE-563
Commit: 0b19e7e457a582fa1ab862e620143fb3b7cfbf0d
Parents: 71f3d35
Author: suba <su...@cse.mrt.ac.lk>
Authored: Fri Jun 12 12:37:18 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Fri Jun 12 12:37:18 2015 +0530

----------------------------------------------------------------------
 Rakefile                                        |  2 +-
 .../ode/store/ClusterProcessStoreImpl.java      | 34 +++++++++++++++++---
 .../hazelcast/HazelcastClusterImpl.java         | 34 ++------------------
 3 files changed, 32 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/0b19e7e4/Rakefile
----------------------------------------------------------------------
diff --git a/Rakefile b/Rakefile
index 5fa4a07..06dcbd5 100644
--- a/Rakefile
+++ b/Rakefile
@@ -271,7 +271,7 @@ define "ode" do
   define "bpel-store" do
     compile.with projects("bpel-api", "bpel-compiler", "bpel-dao", "bpel-obj", "bpel-schemas", "bpel-epr",
       "dao-hibernate", "dao-jpa", "clustering", "utils"),
-      JAVAX.persistence, JAVAX.stream, JAVAX.transaction, HIBERNATE, HSQLDB, XMLBEANS, XERCES, WSDL4J, OPENJPA, SPRING, SLF4J, LOG4J
+      JAVAX.persistence, JAVAX.stream, JAVAX.transaction, HIBERNATE, HSQLDB, XMLBEANS, XERCES, WSDL4J, OPENJPA, SPRING, SLF4J, LOG4J,HAZELCAST
     compile { open_jpa_enhance }
     resources hibernate_doclet(:package=>"org.apache.ode.store.hib", :excludedtags=>"@version,@author,@todo")
 

http://git-wip-us.apache.org/repos/asf/ode/blob/0b19e7e4/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index c6f81ba..f364fb7 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -31,14 +31,22 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Collection;
 
+import com.hazelcast.core.*;
+
 public class ClusterProcessStoreImpl extends ProcessStoreImpl{
     private static final Log __log = LogFactory.getLog(ClusterProcessStoreImpl.class);
 
-    private HazelcastClusterImpl _hazelcastClusterImpl;
+    private HazelcastInstance _hazelcastInstance;
+    private Member deployInitiator;
+    private ITopic<String> clusterMessageTopic;
 
     public ClusterProcessStoreImpl(EndpointReferenceContext eprContext, DataSource ds, String persistenceType, OdeConfigProperties props, boolean createDatamodel, HazelcastClusterImpl hazelcastClusterImpl) {
-        super();
-        _hazelcastClusterImpl = hazelcastClusterImpl;
+        super(eprContext,ds,persistenceType,props,createDatamodel);
+        _hazelcastInstance = hazelcastClusterImpl.getHazelcastInstance();
+
+        // Register for listening to message listener
+        clusterMessageTopic = _hazelcastInstance.getTopic("deployedMsg");
+        clusterMessageTopic.addMessageListener(new ClusterMessageListener());
     }
 
     public Collection<QName> deploy(final File deploymentUnitDirectory) {
@@ -48,8 +56,8 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
     }
 
     public void publishProcessStoreDeployedEvent(String duName){
-       String returnedDuName = _hazelcastClusterImpl.publishProcessStoreEvent("Deployed " +duName);
-       publishService(returnedDuName);
+        deployInitiator = _hazelcastInstance.getCluster().getLocalMember();
+        clusterMessageTopic.publish("Deployed " +duName);
     }
 
     public void publishService(final String duName) {
@@ -77,4 +85,20 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
         }
     }
 
+    class ClusterMessageListener implements MessageListener<String> {
+        @Override
+        public void onMessage(Message<String> msg) {
+            String message = msg.getMessageObject();
+            String arr[] = message.split(" ", 2);
+            String duName = arr[1];
+            if(message.contains("Deployed ")) {
+                if(_hazelcastInstance.getCluster().getLocalMember() != deployInitiator) {
+                    __log.info("Receive deployment msg to " +_hazelcastInstance.getCluster().getLocalMember() +" for " +duName);
+                    publishService(duName);
+                }
+            }
+        }
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/0b19e7e4/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index 0e53de4..4e6878e 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -36,12 +36,9 @@ public class HazelcastClusterImpl implements HazelcastCluster{
 
     private HazelcastInstance _hazelcastInstance;
     private boolean isMaster = false;
-    private String _duName = "";
     private Member leader;
-    private Member deployInitiator;
 
     private IMap<String, String> lock_map;
-    private ITopic<String> clusterMessageTopic;
 
     public HazelcastClusterImpl(HazelcastInstance hazelcastInstance) {
         _hazelcastInstance = hazelcastInstance;
@@ -52,10 +49,6 @@ public class HazelcastClusterImpl implements HazelcastCluster{
         // Registering this node in the cluster.
         _hazelcastInstance.getCluster().addMembershipListener(new ClusterMemberShipListener());
 
-        // Register for listening to message listener
-        clusterMessageTopic = _hazelcastInstance.getTopic("deployedMsg");
-        clusterMessageTopic.addMessageListener(new ClusterMessageListener());
-
         Member localMember = _hazelcastInstance.getCluster().getLocalMember();
         String localMemberID = getHazelCastNodeID(localMember);
         __log.info("Registering HZ localMember ID " + localMemberID);
@@ -113,22 +106,6 @@ public class HazelcastClusterImpl implements HazelcastCluster{
         }
     }
 
-    class ClusterMessageListener implements MessageListener<String> {
-        @Override
-        public void onMessage(Message<String> msg) {
-            String message = msg.getMessageObject();
-            String arr[] = message.split(" ", 2);
-            String duName = arr[1];
-            if(message.contains("Deployed ")) {
-                if(_hazelcastInstance.getCluster().getLocalMember() != deployInitiator) {
-                    setDUName(duName);
-                    __log.info("Recerive deployment msg to " +_hazelcastInstance.getCluster().getLocalMember() +"for" +duName);
-                }
-            }
-        }
-    }
-
-
     public void markAsMaster() {
         leader = _hazelcastInstance.getCluster().getMembers().iterator().next();
         if (leader.localMember()) {
@@ -149,14 +126,7 @@ public class HazelcastClusterImpl implements HazelcastCluster{
         return isMaster;
     }
 
-    public void setDUName(String duName) {
-        _duName = duName;
+    public HazelcastInstance getHazelcastInstance() {
+        return _hazelcastInstance;
     }
-
-    public String publishProcessStoreEvent(String msg) {
-        deployInitiator = _hazelcastInstance.getCluster().getLocalMember();
-        clusterMessageTopic.publish(msg);
-        return _duName;
-    }
-
 }


[20/30] ode git commit: cluster enabled instance lock manager implementation-1

Posted by sa...@apache.org.
cluster enabled instance lock manager implementation-1


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

Branch: refs/heads/ODE-563
Commit: cfa4a97b0a0ec854790a16bcedcc5279afa6656a
Parents: 09a4486
Author: suba <su...@cse.mrt.ac.lk>
Authored: Thu Jul 9 23:43:55 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Thu Jul 9 23:43:55 2015 +0530

----------------------------------------------------------------------
 .../ode/bpel/AbstractInstanceLockManager.java   | 38 -------------------
 .../org/apache/ode/bpel/clapi/ClusterLock.java  |  4 +-
 .../apache/ode/bpel/clapi/ClusterManager.java   |  8 +++-
 .../bpel/iapi/AbstractInstanceLockManager.java  | 37 +++++++++++++++++++
 .../apache/ode/bpel/engine/BpelEngineImpl.java  | 24 ++++++++++--
 .../ode/bpel/engine/InstanceLockManager.java    |  2 +-
 .../hazelcast/HazelcastClusterImpl.java         |  3 +-
 .../hazelcast/HazelcastDeploymentLock.java      |  1 +
 .../hazelcast/HazelcastInstanceLock.java        | 39 ++++++++++----------
 9 files changed, 90 insertions(+), 66 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/cfa4a97b/bpel-api/src/main/java/org/apache/ode/bpel/AbstractInstanceLockManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/AbstractInstanceLockManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/AbstractInstanceLockManager.java
deleted file mode 100644
index 7a34b2c..0000000
--- a/bpel-api/src/main/java/org/apache/ode/bpel/AbstractInstanceLockManager.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.ode.bpel;
-
-import java.util.concurrent.TimeUnit;
-
-/**
- * Abstract class to implement an instance lock manager. Instance lock provide process instance isolation from
- * concurrent access when entering jacob
- */
-public abstract class AbstractInstanceLockManager {
-    abstract public void unlock(Long iid);
-
-    abstract public void lock(Long iid, int i, TimeUnit microseconds) throws InterruptedException,
-            TimeoutException;
-
-    /** Exception class indicating a time-out occured  while obtaining a lock. */
-    public static final class TimeoutException extends Exception {
-        private static final long serialVersionUID = 7247629086692580285L;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ode/blob/cfa4a97b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
index 9eaf705..118b275 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
@@ -38,14 +38,14 @@ public interface ClusterLock {
     boolean unlockMap(String key);
 
     /**
-     * Tries to acquire the lock for the specified key ant time period.
+     * Tries to acquire the lock for the specified key
      * @param key
      * @return
      */
     boolean tryLockMap(String key);
 
     /**
-     *
+     * Tries to acquire the lock for the specified key and time period.
      * @param key
      * @param time
      * @param tu

http://git-wip-us.apache.org/repos/asf/ode/blob/cfa4a97b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
index cbfb12f..d73810d 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
@@ -18,7 +18,7 @@
  */
 package org.apache.ode.bpel.clapi;
 
-import org.apache.ode.bpel.AbstractInstanceLockManager;
+import org.apache.ode.bpel.iapi.AbstractInstanceLockManager;
 
 import java.io.File;
 
@@ -58,7 +58,13 @@ public interface ClusterManager {
      */
     void registerClusterProcessStoreMessageListener();
 
+    /**
+     * Return deployment lock for cluster
+     */
     ClusterLock getDeploymentLock();
 
+    /**
+     * Return instance lock for cluster
+     */
     AbstractInstanceLockManager getInstanceLock();
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/cfa4a97b/bpel-api/src/main/java/org/apache/ode/bpel/iapi/AbstractInstanceLockManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/iapi/AbstractInstanceLockManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/iapi/AbstractInstanceLockManager.java
new file mode 100644
index 0000000..b53ac65
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/iapi/AbstractInstanceLockManager.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ode.bpel.iapi;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Abstract class to implement an instance lock manager
+ */
+public abstract class AbstractInstanceLockManager {
+    public abstract void unlock(Long iid);
+
+    public abstract void lock(Long iid, int i, TimeUnit microseconds) throws InterruptedException,
+            TimeoutException;
+
+    /** Exception class indicating a time-out occured  while obtaining a lock. */
+    public static final class TimeoutException extends Exception {
+        private static final long serialVersionUID = 7247629086692580285L;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ode/blob/cfa4a97b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
index e278c7d..fe38cf0 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
@@ -21,12 +21,22 @@ package org.apache.ode.bpel.engine;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.ode.bpel.AbstractInstanceLockManager;
 import org.apache.ode.bpel.dao.MessageExchangeDAO;
 import org.apache.ode.bpel.dao.ProcessDAO;
 import org.apache.ode.bpel.dao.ProcessInstanceDAO;
 import org.apache.ode.bpel.evt.BpelEvent;
-import org.apache.ode.bpel.iapi.*;
+import org.apache.ode.bpel.iapi.AbstractInstanceLockManager;
+import org.apache.ode.bpel.iapi.BpelEngine;
+import org.apache.ode.bpel.iapi.BpelEngineException;
+import org.apache.ode.bpel.iapi.ContextException;
+import org.apache.ode.bpel.iapi.Endpoint;
+import org.apache.ode.bpel.iapi.Message;
+import org.apache.ode.bpel.iapi.MessageExchange;
+import org.apache.ode.bpel.iapi.OdeGlobalConfig;
+import org.apache.ode.bpel.iapi.MyRoleMessageExchange;
+import org.apache.ode.bpel.iapi.PartnerRoleMessageExchange;
+import org.apache.ode.bpel.iapi.ProcessState;
+import org.apache.ode.bpel.iapi.Scheduler;
 import org.apache.ode.bpel.iapi.MessageExchange.FailureType;
 import org.apache.ode.bpel.iapi.MessageExchange.MessageExchangePattern;
 import org.apache.ode.bpel.iapi.MessageExchange.Status;
@@ -50,7 +60,13 @@ import org.w3c.dom.Element;
 import javax.wsdl.Operation;
 import javax.wsdl.PortType;
 import javax.xml.namespace.QName;
-import java.util.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -98,7 +114,7 @@ public class BpelEngineImpl implements BpelEngine {
     private SharedEndpoints _sharedEps;
 
     /** Manage instance-level locks. */
-    private AbstractInstanceLockManager _instanceLockManager;
+    private final AbstractInstanceLockManager _instanceLockManager;
 
     final Contexts _contexts;
 

http://git-wip-us.apache.org/repos/asf/ode/blob/cfa4a97b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
index dba127b..f712552 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
@@ -20,7 +20,7 @@ package org.apache.ode.bpel.engine;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.ode.bpel.AbstractInstanceLockManager;
+import org.apache.ode.bpel.iapi.AbstractInstanceLockManager;
 
 import java.util.HashMap;
 import java.util.Map;

http://git-wip-us.apache.org/repos/asf/ode/blob/cfa4a97b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index 57984c0..8eac0b6 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -30,7 +30,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import org.apache.ode.bpel.clapi.*;
-import org.apache.ode.bpel.AbstractInstanceLockManager;
+import org.apache.ode.bpel.iapi.AbstractInstanceLockManager;
 
 
 /**
@@ -78,6 +78,7 @@ public class HazelcastClusterImpl implements ClusterManager {
             uuid = localMember.getUuid();
             __log.info("Registering HZ localMember ID " + nodeID);
             markAsMaster();
+
             deployment_lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_LOCK);
             instance_lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_PROCESS_INSTANCE_LOCK);
             clusterMessageTopic = _hazelcastInstance.getTopic(HazelcastConstants.ODE_CLUSTER_MSG);

http://git-wip-us.apache.org/repos/asf/ode/blob/cfa4a97b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
index 44bbea8..2f5aa4d 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
@@ -64,6 +64,7 @@ public class HazelcastDeploymentLock implements ClusterLock{
     }
 
     public boolean tryLockMap(String key,int time, TimeUnit tu) {
+        // Noting to do here.
         return true;
     }
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/cfa4a97b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
index 40f1d66..6988746 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
@@ -20,9 +20,10 @@ package org.apache.ode.clustering.hazelcast;
 
 import com.hazelcast.core.IMap;
 import org.apache.ode.bpel.clapi.ClusterLock;
-import org.apache.ode.bpel.AbstractInstanceLockManager;
+import org.apache.ode.bpel.iapi.AbstractInstanceLockManager;
 
 import java.util.concurrent.TimeUnit;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -43,7 +44,7 @@ public class HazelcastInstanceLock extends AbstractInstanceLockManager implement
     public void lock(Long iid, int time, TimeUnit tu) throws InterruptedException,
             AbstractInstanceLockManager.TimeoutException {
         if (iid == null) {
-            if(__log.isDebugEnabled()) {
+            if (__log.isDebugEnabled()) {
                 __log.debug(" Instance Id null at lock[]");
             }
             return;
@@ -51,15 +52,15 @@ public class HazelcastInstanceLock extends AbstractInstanceLockManager implement
 
         String thrd = Thread.currentThread().toString();
 
-        if(__log.isDebugEnabled()) {
+        if (__log.isDebugEnabled()) {
             __log.debug(thrd + ": lock(iid=" + iid + ", time=" + time + tu + ")");
         }
 
-        putIfAbsent(iid.toString(),iid.toString());
+        putIfAbsent(iid.toString(), iid.toString());
 
-        if (!tryLockMap(iid.toString(),time, tu)) {
+        if (!tryLockMap(iid.toString(), time, tu)) {
 
-            if(__log.isDebugEnabled()) {
+            if (__log.isDebugEnabled()) {
                 __log.debug(thrd + ": lock(iid=" + iid + ", " +
                         "time=" + time + tu + ")-->TIMEOUT");
             }
@@ -70,7 +71,7 @@ public class HazelcastInstanceLock extends AbstractInstanceLockManager implement
 
     public void unlock(Long iid) {
         if (iid == null) {
-            if(__log.isDebugEnabled()) {
+            if (__log.isDebugEnabled()) {
                 __log.debug(" unlock, instance id is null");
             }
             return;
@@ -80,38 +81,38 @@ public class HazelcastInstanceLock extends AbstractInstanceLockManager implement
 
         unlockMap(iid.toString());
 
-        if(__log.isDebugEnabled()) {
+        if (__log.isDebugEnabled()) {
             __log.debug(thrd + " unlock(iid=" + iid + ")");
         }
     }
 
     public boolean lockMap(String key) {
-        _lock_map.lock(key);
+        // Noting to do here.
         return true;
     }
 
     public boolean unlockMap(String key) {
         if (_lock_map.get(key) == "true") {
             _lock_map.unlock(key);
-            _lock_map.replace(key,"false");
+            _lock_map.replace(key, "false");
+            return true;
         }
-        return true;
+        return false;
     }
 
     public boolean tryLockMap(String key) {
-        boolean state = _lock_map.tryLock(key);
-        return state;
+        // Noting to do here.
+        return true;
     }
 
-    public boolean tryLockMap(String key,int time, TimeUnit tu) {
-        boolean state = true;
+    public boolean tryLockMap(String key, int time, TimeUnit tu) {
+        boolean state = false;
         try {
-        state = _lock_map.tryLock(key,time,tu);
+            state = _lock_map.tryLock(key, time, tu);
         } catch (InterruptedException ex) {
-            __log.error(ex);
+            __log.error("Interruption occured" +ex);
         }
-
-        _lock_map.replace(key,"" +state);
+        _lock_map.replace(key, "" + state);
         return state;
     }
 }


[21/30] ode git commit: Implement ClusterLock using java generics

Posted by sa...@apache.org.
Implement ClusterLock using java generics


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

Branch: refs/heads/ODE-563
Commit: dfb500c081277bb30b806e6d33468bea1f612533
Parents: cfa4a97
Author: suba <su...@cse.mrt.ac.lk>
Authored: Sun Jul 12 19:19:06 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Sun Jul 12 19:19:06 2015 +0530

----------------------------------------------------------------------
 .../ode/axis2/deploy/DeploymentPoller.java      |  8 ++--
 .../ode/axis2/service/DeploymentWebService.java |  8 ++--
 .../org/apache/ode/bpel/clapi/ClusterLock.java  | 30 ++++++++----
 .../apache/ode/bpel/clapi/ClusterManager.java   |  4 +-
 .../bpel/iapi/AbstractInstanceLockManager.java  | 37 ---------------
 .../apache/ode/bpel/engine/BpelEngineImpl.java  | 24 ++--------
 .../ode/bpel/engine/InstanceLockManager.java    | 22 ++++++++-
 .../hazelcast/HazelcastClusterImpl.java         | 14 +++---
 .../hazelcast/HazelcastDeploymentLock.java      | 19 ++++----
 .../hazelcast/HazelcastInstanceLock.java        | 50 +++++++-------------
 .../ode/scheduler/simple/SimpleScheduler.java   | 33 ++++---------
 11 files changed, 97 insertions(+), 152 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index 98f5f82..baa790b 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -369,15 +369,15 @@ public class DeploymentPoller {
         if(clusterEnabled) {
             ClusterLock clusterLock = _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock();
             clusterLock.putIfAbsent(key,key);
-            return clusterLock.tryLockMap(key);
+            return clusterLock.tryLock(key);
         }
         else return true;
     }
 
     private boolean unlock(String key) {
-        if(clusterEnabled) {
-            return _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock().unlockMap(key);
+        if (clusterEnabled) {
+            _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock().unlock(key);
         }
-        else return true;
+        return true;
     }
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
index 7e4b347..61bf00d 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
@@ -389,9 +389,9 @@ public class DeploymentWebService {
         if(clusterEnabled) {
             ClusterLock clusterLock = _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock();
             clusterLock.putIfAbsent(key,key);
-            return clusterLock.lockMap(key);
+            clusterLock.lock(key);
         }
-        else return true;
+        return true;
     }
 
     /**
@@ -399,8 +399,8 @@ public class DeploymentWebService {
      */
     private boolean unlock(String key) {
         if(clusterEnabled) {
-            return _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock().unlockMap(key);
+            _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock().unlock(key);
         }
-        else return true;
+        return true;
     }
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
index 118b275..9c9683f 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
@@ -20,29 +20,38 @@ package org.apache.ode.bpel.clapi;
 
 import java.util.concurrent.TimeUnit;
 
-public interface ClusterLock {
+public interface ClusterLock<E> {
     /**
-     * Acquire the lock for each file in the file system
+     * Acquire the lock for specified key
      *
      * @param key
      * @return
      */
-    boolean lockMap(String key);
+    void lock(E key);
 
     /**
-     * Release the lock acquired by each file
+     * Acquire the lock for specified key and time period
+     *
+     *
+     * @param key
+     * @return
+     */
+    void lock(E key,int time,TimeUnit tu) throws InterruptedException, TimeoutException;
+
+    /**
+     * Release the lock acquired for specified key
      *
      * @param key
      * @return
      */
-    boolean unlockMap(String key);
+    void unlock(E key);
 
     /**
      * Tries to acquire the lock for the specified key
      * @param key
      * @return
      */
-    boolean tryLockMap(String key);
+    boolean tryLock(E key);
 
     /**
      * Tries to acquire the lock for the specified key and time period.
@@ -51,12 +60,17 @@ public interface ClusterLock {
      * @param tu
      * @return
      */
-    boolean tryLockMap(String key, int time, TimeUnit tu);
+    boolean tryLock(E key, int time, TimeUnit tu);
 
     /**
      * Check whether the map has a value for given key, if absent put the value to map
      * @param key
      * @param keyVal
      */
-    void putIfAbsent(String key, String keyVal);
+    void putIfAbsent(E key, E keyVal);
+
+    /** Exception class indicating a time-out occured  while obtaining a lock. */
+    public static final class  TimeoutException extends Exception {
+        private static final long serialVersionUID = 7247629086692580285L;
+    }
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
index d73810d..70d7c03 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
@@ -18,8 +18,6 @@
  */
 package org.apache.ode.bpel.clapi;
 
-import org.apache.ode.bpel.iapi.AbstractInstanceLockManager;
-
 import java.io.File;
 
 public interface ClusterManager {
@@ -66,5 +64,5 @@ public interface ClusterManager {
     /**
      * Return instance lock for cluster
      */
-    AbstractInstanceLockManager getInstanceLock();
+    ClusterLock getInstanceLock();
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/bpel-api/src/main/java/org/apache/ode/bpel/iapi/AbstractInstanceLockManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/iapi/AbstractInstanceLockManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/iapi/AbstractInstanceLockManager.java
deleted file mode 100644
index b53ac65..0000000
--- a/bpel-api/src/main/java/org/apache/ode/bpel/iapi/AbstractInstanceLockManager.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.ode.bpel.iapi;
-
-import java.util.concurrent.TimeUnit;
-
-/**
- * Abstract class to implement an instance lock manager
- */
-public abstract class AbstractInstanceLockManager {
-    public abstract void unlock(Long iid);
-
-    public abstract void lock(Long iid, int i, TimeUnit microseconds) throws InterruptedException,
-            TimeoutException;
-
-    /** Exception class indicating a time-out occured  while obtaining a lock. */
-    public static final class TimeoutException extends Exception {
-        private static final long serialVersionUID = 7247629086692580285L;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
index fe38cf0..feb4cd1 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
@@ -21,22 +21,12 @@ package org.apache.ode.bpel.engine;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.clapi.ClusterLock;
 import org.apache.ode.bpel.dao.MessageExchangeDAO;
 import org.apache.ode.bpel.dao.ProcessDAO;
 import org.apache.ode.bpel.dao.ProcessInstanceDAO;
 import org.apache.ode.bpel.evt.BpelEvent;
-import org.apache.ode.bpel.iapi.AbstractInstanceLockManager;
-import org.apache.ode.bpel.iapi.BpelEngine;
-import org.apache.ode.bpel.iapi.BpelEngineException;
-import org.apache.ode.bpel.iapi.ContextException;
-import org.apache.ode.bpel.iapi.Endpoint;
-import org.apache.ode.bpel.iapi.Message;
-import org.apache.ode.bpel.iapi.MessageExchange;
-import org.apache.ode.bpel.iapi.OdeGlobalConfig;
-import org.apache.ode.bpel.iapi.MyRoleMessageExchange;
-import org.apache.ode.bpel.iapi.PartnerRoleMessageExchange;
-import org.apache.ode.bpel.iapi.ProcessState;
-import org.apache.ode.bpel.iapi.Scheduler;
+import org.apache.ode.bpel.iapi.*;
 import org.apache.ode.bpel.iapi.MessageExchange.FailureType;
 import org.apache.ode.bpel.iapi.MessageExchange.MessageExchangePattern;
 import org.apache.ode.bpel.iapi.MessageExchange.Status;
@@ -60,13 +50,7 @@ import org.w3c.dom.Element;
 import javax.wsdl.Operation;
 import javax.wsdl.PortType;
 import javax.xml.namespace.QName;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -114,7 +98,7 @@ public class BpelEngineImpl implements BpelEngine {
     private SharedEndpoints _sharedEps;
 
     /** Manage instance-level locks. */
-    private final AbstractInstanceLockManager _instanceLockManager;
+    private final ClusterLock<Long> _instanceLockManager;
 
     final Contexts _contexts;
 

http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
index f712552..1571eac 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/InstanceLockManager.java
@@ -20,7 +20,7 @@ package org.apache.ode.bpel.engine;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.ode.bpel.iapi.AbstractInstanceLockManager;
+import org.apache.ode.bpel.clapi.ClusterLock;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -37,12 +37,16 @@ import java.util.concurrent.locks.Lock;
  *
  * @author Maciej Szefler - m s z e f l e r @ g m a i l . c o m
  */
-public class InstanceLockManager extends AbstractInstanceLockManager {
+public class InstanceLockManager implements ClusterLock<Long> {
     private static final Log __log = LogFactory.getLog(InstanceLockManager.class);
 
     private final Lock _mutex = new java.util.concurrent.locks.ReentrantLock();
     private final Map<Long, InstanceInfo> _locks = new HashMap<Long,InstanceInfo>();
 
+    public void lock(Long key) {
+        // Noting to do here.
+    }
+
     public void lock(Long iid, int time, TimeUnit tu) throws InterruptedException, TimeoutException {
         if (iid == null) return;
 
@@ -106,6 +110,20 @@ public class InstanceLockManager extends AbstractInstanceLockManager {
 
     }
 
+    public boolean tryLock(Long key) {
+        // Noting to do here.
+        return false;
+    }
+
+    public boolean tryLock(Long key, int time, TimeUnit tu) {
+        // Noting to do here.
+        return false;
+    }
+
+    public void putIfAbsent(Long key, Long keyVal) {
+        // Noting to do here.
+    }
+
 
     @Override
     public String toString() {

http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index 8eac0b6..5f2b8f5 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -30,8 +30,6 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import org.apache.ode.bpel.clapi.*;
-import org.apache.ode.bpel.iapi.AbstractInstanceLockManager;
-
 
 /**
  * This class implements necessary methods to build the cluster using hazelcast
@@ -45,11 +43,11 @@ public class HazelcastClusterImpl implements ClusterManager {
     private String uuid;
     private Member leader;
     private IMap<String, String> deployment_lock_map;
-    private IMap<String, String> instance_lock_map;
+    private IMap<Long, Long> instance_lock_map;
     private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
     private ClusterProcessStore _clusterProcessStore;
-    private ClusterLock _hazelcastDeploymentLock;
-    private AbstractInstanceLockManager _hazelcastInstanceLock;
+    private ClusterLock<String> _hazelcastDeploymentLock;
+    private ClusterLock<Long> _hazelcastInstanceLock;
 
     public void init(File configRoot) {
 
@@ -84,7 +82,7 @@ public class HazelcastClusterImpl implements ClusterManager {
             clusterMessageTopic = _hazelcastInstance.getTopic(HazelcastConstants.ODE_CLUSTER_MSG);
 
             _hazelcastDeploymentLock = (ClusterLock) new HazelcastDeploymentLock(deployment_lock_map);
-            _hazelcastInstanceLock = (AbstractInstanceLockManager) new HazelcastInstanceLock(instance_lock_map);
+            _hazelcastInstanceLock = (ClusterLock) new HazelcastInstanceLock(instance_lock_map);
         }
     }
 
@@ -167,11 +165,11 @@ public class HazelcastClusterImpl implements ClusterManager {
         if(_hazelcastInstance != null) _hazelcastInstance.getLifecycleService().shutdown();
     }
 
-    public ClusterLock getDeploymentLock(){
+    public ClusterLock<String> getDeploymentLock(){
         return _hazelcastDeploymentLock;
     }
 
-    public AbstractInstanceLockManager getInstanceLock(){
+    public ClusterLock<Long> getInstanceLock(){
         return _hazelcastInstanceLock;
     }
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
index 2f5aa4d..f36a1b4 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
@@ -26,7 +26,7 @@ import org.apache.commons.logging.LogFactory;
 
 import java.util.concurrent.TimeUnit;
 
-public class HazelcastDeploymentLock implements ClusterLock{
+public class HazelcastDeploymentLock implements ClusterLock<String>{
     private static final Log __log = LogFactory.getLog(HazelcastDeploymentLock.class);
 
     private IMap<String, String> _lock_map;
@@ -39,23 +39,21 @@ public class HazelcastDeploymentLock implements ClusterLock{
         _lock_map.putIfAbsent(key, keyVal);
     }
 
-    public boolean lockMap(String key) {
+    public void lock(String key) {
         _lock_map.lock(key);
         if (__log.isDebugEnabled()) {
             __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + true);
         }
-        return true;
     }
 
-    public boolean unlockMap(String key) {
+    public void unlock(String key) {
         _lock_map.unlock(key);
         if (__log.isDebugEnabled()) {
             __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + false);
         }
-        return true;
     }
 
-    public boolean tryLockMap(String key) {
+    public boolean tryLock(String key) {
         boolean state = _lock_map.tryLock(key);
         if (__log.isDebugEnabled()) {
             __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
@@ -63,8 +61,13 @@ public class HazelcastDeploymentLock implements ClusterLock{
         return state;
     }
 
-    public boolean tryLockMap(String key,int time, TimeUnit tu) {
+    public boolean tryLock(String key,int time, TimeUnit tu) {
+        // Noting to do here.
+        return false;
+
+    }
+
+    public void lock(String key,int time, TimeUnit tu) {
         // Noting to do here.
-        return true;
     }
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
index 6988746..aa6c086 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
@@ -20,29 +20,31 @@ package org.apache.ode.clustering.hazelcast;
 
 import com.hazelcast.core.IMap;
 import org.apache.ode.bpel.clapi.ClusterLock;
-import org.apache.ode.bpel.iapi.AbstractInstanceLockManager;
 
 import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-public class HazelcastInstanceLock extends AbstractInstanceLockManager implements ClusterLock {
+public class HazelcastInstanceLock implements ClusterLock<Long> {
     private static final Log __log = LogFactory.getLog(HazelcastInstanceLock.class);
 
-    private IMap<String, String> _lock_map;
+    private IMap<Long, Long> _lock_map;
 
 
-    HazelcastInstanceLock(IMap<String, String> lock_map) {
+    HazelcastInstanceLock(IMap<Long, Long> lock_map) {
         _lock_map = lock_map;
     }
 
-    public void putIfAbsent(String key, String keyVal) {
+    public void putIfAbsent(Long key, Long keyVal) {
         _lock_map.putIfAbsent(key, keyVal);
     }
 
-    public void lock(Long iid, int time, TimeUnit tu) throws InterruptedException,
-            AbstractInstanceLockManager.TimeoutException {
+    public void lock(Long key) {
+        // Noting to do here.
+    }
+
+    public void lock(Long iid, int time, TimeUnit tu) throws InterruptedException,TimeoutException {
         if (iid == null) {
             if (__log.isDebugEnabled()) {
                 __log.debug(" Instance Id null at lock[]");
@@ -56,15 +58,15 @@ public class HazelcastInstanceLock extends AbstractInstanceLockManager implement
             __log.debug(thrd + ": lock(iid=" + iid + ", time=" + time + tu + ")");
         }
 
-        putIfAbsent(iid.toString(), iid.toString());
+        putIfAbsent(iid, iid);
 
-        if (!tryLockMap(iid.toString(), time, tu)) {
+        if (!_lock_map.tryLock(iid, time, tu)) {
 
             if (__log.isDebugEnabled()) {
                 __log.debug(thrd + ": lock(iid=" + iid + ", " +
                         "time=" + time + tu + ")-->TIMEOUT");
             }
-            throw new AbstractInstanceLockManager.TimeoutException();
+            throw new TimeoutException();
         }
 
     }
@@ -79,40 +81,20 @@ public class HazelcastInstanceLock extends AbstractInstanceLockManager implement
 
         String thrd = Thread.currentThread().toString();
 
-        unlockMap(iid.toString());
+        _lock_map.unlock(iid);
 
         if (__log.isDebugEnabled()) {
             __log.debug(thrd + " unlock(iid=" + iid + ")");
         }
     }
 
-    public boolean lockMap(String key) {
+    public boolean tryLock(Long key) {
         // Noting to do here.
-        return true;
-    }
-
-    public boolean unlockMap(String key) {
-        if (_lock_map.get(key) == "true") {
-            _lock_map.unlock(key);
-            _lock_map.replace(key, "false");
-            return true;
-        }
         return false;
     }
 
-    public boolean tryLockMap(String key) {
+    public boolean tryLock(Long key, int time, TimeUnit tu) {
         // Noting to do here.
-        return true;
-    }
-
-    public boolean tryLockMap(String key, int time, TimeUnit tu) {
-        boolean state = false;
-        try {
-            state = _lock_map.tryLock(key, time, tu);
-        } catch (InterruptedException ex) {
-            __log.error("Interruption occured" +ex);
-        }
-        _lock_map.replace(key, "" + state);
-        return state;
+        return false;
     }
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/dfb500c0/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
index a56b86e..a0d67ce 100644
--- a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
+++ b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
@@ -19,33 +19,18 @@
 
 package org.apache.ode.scheduler.simple;
 
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Properties;
-import java.util.Random;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArraySet;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.atomic.AtomicLong;
-
-import javax.transaction.Status;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.ode.bpel.iapi.ContextException;
 import org.apache.ode.bpel.iapi.Scheduler;
 
+import javax.transaction.*;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.concurrent.*;
+import java.util.concurrent.atomic.AtomicLong;
+
 /**
  * A reliable and relatively simple scheduler that uses a database to persist information about
  * scheduled tasks.
@@ -508,9 +493,9 @@ public class SimpleScheduler implements Scheduler, TaskRunner {
             return;
 
         _todo.stop();
-        _todo.clearTasks(UpgradeJobsTask.class);
+        _todo.clearTasks(UpgradeJobsTask.class);  //check   gsoc
         _todo.clearTasks(LoadImmediateTask.class);
-        _todo.clearTasks(CheckStaleNodes.class);
+        _todo.clearTasks(CheckStaleNodes.class);  //check   gsoc
         _processedSinceLastLoadTask.clear();
         _outstandingJobs.clear();
 


[30/30] ode git commit: Merge from fork branch sudharma/ODECluster

Posted by sa...@apache.org.
Merge from fork branch sudharma/ODECluster


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

Branch: refs/heads/ODE-563
Commit: 26dacc2013b6b5e6c6e097b27c94fdd8352393c5
Parents: 8fcaf5f 6c92a25
Author: sathwik <sa...@apache.org>
Authored: Fri Nov 6 12:58:21 2015 +0530
Committer: sathwik <sa...@apache.org>
Committed: Fri Nov 6 12:58:21 2015 +0530

----------------------------------------------------------------------
 Rakefile                                        |  16 +-
 .../src/main/webapp/WEB-INF/conf/hazelcast.xml  |  63 +++++
 .../webapp/WEB-INF/conf/ode-axis2.properties    |   8 +-
 .../java/org/apache/ode/axis2/Messages.java     |   4 +
 .../java/org/apache/ode/axis2/ODEServer.java    | 119 +++++---
 .../ode/axis2/deploy/DeploymentPoller.java      | 135 +++++++---
 .../ode/axis2/service/DeploymentWebService.java | 177 +++++++-----
 .../org/apache/ode/bpel/clapi/ClusterLock.java  |  76 ++++++
 .../apache/ode/bpel/clapi/ClusterManager.java   |  84 ++++++
 .../ode/bpel/clapi/ClusterMemberListener.java   |  29 ++
 .../ode/bpel/clapi/ClusterProcessStore.java     |  31 +++
 .../bpel/clapi/ProcessStoreClusterEvent.java    |  58 ++++
 .../bpel/clapi/ProcessStoreClusterListener.java |  24 ++
 .../bpel/clapi/ProcessStoreDeployedEvent.java   |  32 +++
 .../bpel/clapi/ProcessStoreUndeployedEvent.java |  32 +++
 .../ode/il/config/OdeConfigProperties.java      |  22 +-
 .../apache/ode/bpel/engine/BpelEngineImpl.java  |  36 +--
 .../apache/ode/bpel/engine/BpelServerImpl.java  |   5 +
 .../org/apache/ode/bpel/engine/Contexts.java    |   3 +
 .../ode/bpel/engine/InstanceLockManager.java    |  30 ++-
 .../ode/store/ClusterProcessStoreImpl.java      | 135 ++++++++++
 .../org/apache/ode/store/ProcessStoreImpl.java  |  81 +++---
 .../org/apache/ode/test/BPELTestAbstract.java   |  51 ++--
 clustering/pom.xml                              |  30 +++
 .../java/org/apache/ode/clustering/Test.java    |   4 +
 .../hazelcast/HazelcastClusterImpl.java         | 268 +++++++++++++++++++
 .../hazelcast/HazelcastConstants.java           |  31 +++
 .../hazelcast/HazelcastDeploymentLock.java      |  73 +++++
 .../hazelcast/HazelcastInstanceLock.java        |  94 +++++++
 dependencies.rb                                 |   1 +
 .../java/org/apache/ode/jbi/OdeLifeCycle.java   |  23 +-
 pom.xml                                         |   1 +
 .../ode/scheduler/simple/SimpleScheduler.java   | 189 +++++++++----
 .../scheduler/simple/SimpleSchedulerTest.java   |  27 +-
 34 files changed, 1660 insertions(+), 332 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/26dacc20/Rakefile
----------------------------------------------------------------------
diff --cc Rakefile
index a8c5f06,7c0fa67..ac9b74e
--- a/Rakefile
+++ b/Rakefile
@@@ -99,9 -97,9 +99,9 @@@ define "ode" d
    desc "ODE Axis2 Based Web Application"
    define "axis2-war" do
      libs = projects("axis2", "bpel-api", "bpel-compiler", "bpel-connector", "bpel-dao",
 -      "bpel-epr", "bpel-obj", "bpel-ql", "bpel-runtime", "scheduler-simple",
 +      "bpel-epr", "bpel-nobj", "bpel-ql", "bpel-runtime", "scheduler-simple",
        "bpel-schemas", "bpel-store", "dao-hibernate", "jca-ra", "jca-server",
-       "utils", "dao-jpa", "agents"),
+       "utils", "dao-jpa", "agents", "clustering"),
        AXIS2_ALL, ANNONGEN, BACKPORT, COMMONS.codec, COMMONS.collections, COMMONS.fileupload, COMMONS.io, COMMONS.httpclient, COMMONS.beanutils,
        COMMONS.lang, COMMONS.pool, DERBY, DERBY_TOOLS, JACOB, JAXEN, JAVAX.activation, JAVAX.ejb, JAVAX.javamail,
        JAVAX.connector, JAVAX.jms, JAVAX.persistence, JAVAX.transaction, JAVAX.stream,  JIBX,
@@@ -233,16 -230,15 +239,16 @@@
  
    desc "ODE Runtime Engine"
    define "bpel-runtime" do
 -    compile.with projects("bpel-api", "bpel-compiler", "bpel-dao", "bpel-epr", "bpel-obj", "bpel-schemas",
 -      "bpel-store", "utils", "agents","clustering"),
 -      COMMONS.collections, COMMONS.httpclient, JACOB, JAVAX.persistence, JAVAX.stream, JAXEN, SAXON, WSDL4J, XMLBEANS, SPRING, SLF4J, LOG4J
+ 
 +    compile.with projects("bpel-api", "bpel-compiler", "bpel-dao", "bpel-epr", "bpel-nobj", "bpel-schemas",
-       "bpel-store", "utils", "agents"),
++      "bpel-store", "utils", "agents","clustering"),
 +      COMMONS.collections, COMMONS.httpclient, JACOB, JAVAX.persistence, JAVAX.stream, JAXEN, SAXON, WSDL4J, XMLBEANS, SPRING, SLF4J, LOG4J,
 +	  JACKSON, JAVAX.connector
  
- 
 -    test.with projects("scheduler-simple", "dao-jpa", "dao-hibernate", "bpel-epr"),
 -        BACKPORT, COMMONS.pool, COMMONS.lang, COMMONS.io, DERBY, JAVAX.connector, JAVAX.transaction,
 -        GERONIMO.transaction, GERONIMO.kernel, GERONIMO.connector, TRANQL, HSQLDB, JAVAX.ejb,
 -        OPENJPA, XERCES, XALAN, DOM4J, HIBERNATE, SPRING_TEST, H2::REQUIRES,
 +    test.with projects("scheduler-simple", "dao-jpa", "dao-hibernate", "bpel-epr", "bpel-obj"),
 +#         BACKPORT, COMMONS.pool, COMMONS.lang, COMMONS.io, DERBY, JAVAX.connector, JAVAX.transaction,
 +        GERONIMO.transaction, GERONIMO.kernel, GERONIMO.connector, TRANQL, HSQLDB, JAVAX.ejb, JAVAX.transaction,
 +        OPENJPA, XERCES, XALAN, DOM4J, HIBERNATE, SPRING_TEST, H2::REQUIRES, JACKSON,
          "tranql:tranql-connector-derby-common:jar:1.1"
  
      package :jar

http://git-wip-us.apache.org/repos/asf/ode/blob/26dacc20/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ode/blob/26dacc20/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ode/blob/26dacc20/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ode/blob/26dacc20/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ode/blob/26dacc20/dependencies.rb
----------------------------------------------------------------------
diff --cc dependencies.rb
index 0857cf1,33da5e4..f469c02
--- a/dependencies.rb
+++ b/dependencies.rb
@@@ -75,14 -75,10 +75,15 @@@ GERONIMO            = struct
    :transaction      =>"org.apache.geronimo.components:geronimo-transaction:jar:2.0.1",
    :connector        =>"org.apache.geronimo.components:geronimo-connector:jar:2.0.1"
  )
+ HAZELCAST           ="com.hazelcast:hazelcast:jar:3.4.2"
  HIBERNATE           = [ "org.hibernate:hibernate-core:jar:3.3.2.GA", "javassist:javassist:jar:3.9.0.GA", "antlr:antlr:jar:2.7.6",
                          "asm:asm:jar:3.3.1", "cglib:cglib:jar:2.2", "net.sf.ehcache:ehcache:jar:1.2.3" ]
 -HSQLDB              = "hsqldb:hsqldb:jar:1.8.0.7"
 +HSQLDB              = "org.hsqldb:hsqldb:jar:2.3.3"
 +JACKSON              = [ "com.fasterxml.jackson.core:jackson-core:jar:2.4.0", 
 +                        "com.fasterxml.jackson.core:jackson-databind:jar:2.4.0",
 +                        "com.fasterxml.jackson.core:jackson-annotations:jar:2.4.0",
 +                        "com.fasterxml.jackson.dataformat:jackson-dataformat-smile:jar:2.4.0",
 +                        "com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.4.0"]
  JACOB               = "org.apache.ode:jacob:jar:2.0a-SNAPSHOT"
  JAVAX               = struct(
    :activation       =>"javax.activation:activation:jar:1.1",


[04/30] ode git commit: first phase of implementing using locking mechanism

Posted by sa...@apache.org.
first phase of implementing using locking mechanism


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

Branch: refs/heads/ODE-563
Commit: 71f3d35d7ca766ddfeca8e0884495b9dfc9b7f04
Parents: 764bf64
Author: suba <su...@cse.mrt.ac.lk>
Authored: Fri Jun 12 01:24:27 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Fri Jun 12 01:24:27 2015 +0530

----------------------------------------------------------------------
 Rakefile                                        |  2 +-
 .../java/org/apache/ode/axis2/ODEServer.java    |  9 ++-
 .../ode/axis2/deploy/DeploymentPoller.java      |  2 +
 .../ode/axis2/service/DeploymentWebService.java |  2 +
 .../apache/ode/bpel/hzapi/HazelcastCluster.java |  2 +-
 .../ode/store/ClusterProcessStoreImpl.java      | 80 ++++++++++++++++++++
 .../org/apache/ode/store/ProcessStoreImpl.java  |  4 +-
 .../hazelcast/HazelcastClusterImpl.java         | 46 +++++++----
 8 files changed, 126 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/71f3d35d/Rakefile
----------------------------------------------------------------------
diff --git a/Rakefile b/Rakefile
index 1320043..5fa4a07 100644
--- a/Rakefile
+++ b/Rakefile
@@ -270,7 +270,7 @@ define "ode" do
   desc "ODE Process Store"
   define "bpel-store" do
     compile.with projects("bpel-api", "bpel-compiler", "bpel-dao", "bpel-obj", "bpel-schemas", "bpel-epr",
-      "dao-hibernate", "dao-jpa", "utils"),
+      "dao-hibernate", "dao-jpa", "clustering", "utils"),
       JAVAX.persistence, JAVAX.stream, JAVAX.transaction, HIBERNATE, HSQLDB, XMLBEANS, XERCES, WSDL4J, OPENJPA, SPRING, SLF4J, LOG4J
     compile { open_jpa_enhance }
     resources hibernate_doclet(:package=>"org.apache.ode.store.hib", :excludedtags=>"@version,@author,@todo")

http://git-wip-us.apache.org/repos/asf/ode/blob/71f3d35d/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index 1547042..d1f6c36 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -79,6 +79,7 @@ import org.apache.ode.il.dbutil.Database;
 import org.apache.ode.scheduler.simple.JdbcDelegate;
 import org.apache.ode.scheduler.simple.SimpleScheduler;
 import org.apache.ode.store.ProcessStoreImpl;
+import org.apache.ode.store.ClusterProcessStoreImpl;
 import org.apache.ode.utils.GUID;
 import org.apache.ode.utils.fs.TempFileManager;
 
@@ -526,13 +527,15 @@ public class ODEServer {
         _store.registerListener(new ProcessStoreListenerImpl());
         _store.setDeployDir(
                 _odeConfig.getDeployDir() != null ?
-                    new File(_odeConfig.getDeployDir()) :
-                    new File(_workRoot, "processes"));
+                        new File(_odeConfig.getDeployDir()) :
+                        new File(_workRoot, "processes"));
         _store.setConfigDir(_configRoot);
     }
 
     protected ProcessStoreImpl createProcessStore(EndpointReferenceContext eprContext, DataSource ds) {
-        return new ProcessStoreImpl(eprContext, ds, _odeConfig.getDAOConnectionFactory(), _odeConfig, false);
+        if (isClusteringEnabled)
+            return new ClusterProcessStoreImpl(eprContext, ds, _odeConfig.getDAOConnectionFactory(), _odeConfig, false, hazelcastClusterImpl);
+        else return new ProcessStoreImpl(eprContext, ds, _odeConfig.getDAOConnectionFactory(), _odeConfig, false);
     }
 
     protected Scheduler createScheduler() {

http://git-wip-us.apache.org/repos/asf/ode/blob/71f3d35d/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index 25d7f20..66890ba 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -140,6 +140,7 @@ public class DeploymentPoller {
         // Checking for new deployment directories
         if (isDeploymentFromODEFileSystemAllowed() && files != null) {
             for (File file : files) {
+                __log.info("Trying to access the lock for " +file.getName());
                 duLocked = lock(file.getName());
                 try {
                     if (duLocked) {
@@ -186,6 +187,7 @@ public class DeploymentPoller {
                         }
                     }
                 } finally {
+                    __log.info("Trying to release the lock for " + file.getName());
                     unlock(file.getName());
                 }
             }

http://git-wip-us.apache.org/repos/asf/ode/blob/71f3d35d/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
index 1c09bb3..bd35167 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
@@ -167,6 +167,7 @@ public class DeploymentWebService {
                         _poller.hold();
 
                         File dest = new File(_deployPath, bundleName + "-" + _store.getCurrentVersion());
+                        __log.info("Trying to access the lock for " + dest.getName());
 
                         //lock on deployment unit directory name
                         duLocked = _poller.lock(dest.getName());
@@ -212,6 +213,7 @@ public class DeploymentWebService {
                                 }
                                 sendResponse(factory, messageContext, "deployResponse", response);
                             } finally {
+                                __log.info("Trying to release the lock for " + dest.getName());
                                 _poller.unlock(dest.getName());
                             }
                         }

http://git-wip-us.apache.org/repos/asf/ode/blob/71f3d35d/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java b/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
index 4e03c7d..adca32c 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
@@ -39,7 +39,7 @@ public interface HazelcastCluster {
     /**
      * Check whether current node is the leader or not.
      */
-    void isLeader();
+     void markAsMaster();
 
     /**
      * returns Current Nodes in the cluster.

http://git-wip-us.apache.org/repos/asf/ode/blob/71f3d35d/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
new file mode 100644
index 0000000..c6f81ba
--- /dev/null
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ode.store;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ode.clustering.hazelcast.HazelcastClusterImpl;
+import org.apache.ode.bpel.iapi.EndpointReferenceContext;
+import org.apache.ode.il.config.OdeConfigProperties;
+
+import javax.sql.DataSource;
+import javax.xml.namespace.QName;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Collection;
+
+public class ClusterProcessStoreImpl extends ProcessStoreImpl{
+    private static final Log __log = LogFactory.getLog(ClusterProcessStoreImpl.class);
+
+    private HazelcastClusterImpl _hazelcastClusterImpl;
+
+    public ClusterProcessStoreImpl(EndpointReferenceContext eprContext, DataSource ds, String persistenceType, OdeConfigProperties props, boolean createDatamodel, HazelcastClusterImpl hazelcastClusterImpl) {
+        super();
+        _hazelcastClusterImpl = hazelcastClusterImpl;
+    }
+
+    public Collection<QName> deploy(final File deploymentUnitDirectory) {
+        Collection<QName> deployed = super.deploy(deploymentUnitDirectory);
+        publishProcessStoreDeployedEvent(deploymentUnitDirectory.getName());
+        return deployed;
+    }
+
+    public void publishProcessStoreDeployedEvent(String duName){
+       String returnedDuName = _hazelcastClusterImpl.publishProcessStoreEvent("Deployed " +duName);
+       publishService(returnedDuName);
+    }
+
+    public void publishService(final String duName) {
+        final ArrayList<ProcessConfImpl> loaded = new ArrayList<ProcessConfImpl>();
+        try {
+            exec(new Callable<Object>() {
+                public Object call(ConfStoreConnection conn) {
+                    DeploymentUnitDAO dudao = conn.getDeploymentUnit(duName);
+                    if (dudao != null) {
+                        loaded.addAll(load(dudao));
+                    }
+                    return null;
+                }
+            });
+        } catch (Exception ex) {
+            __log.error("Error loading DU from store: " + duName, ex);
+        }
+
+        for (ProcessConfImpl p : loaded) {
+            try {
+                fireStateChange(p.getProcessId(), p.getState(), p.getDeploymentUnit().getName());
+            } catch (Exception except) {
+                __log.error("Error while activating process: pid=" + p.getProcessId() + " package="+p.getDeploymentUnit().getName(), except);
+            }
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/71f3d35d/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
index b689bd1..1a99ef6 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
@@ -88,6 +88,8 @@ public class ProcessStoreImpl implements ProcessStore {
 
     protected File _configDir;
 
+
+
     /**
      * Executor used to process DB transactions. Allows us to isolate the TX context, and to ensure that only one TX gets executed a
      * time. We don't really care to parallelize these operations because: i) HSQL does not isolate transactions and we don't want
@@ -592,7 +594,7 @@ public class ProcessStoreImpl implements ProcessStore {
             psl.onProcessStoreEvent(pse);
     }
 
-    private void fireStateChange(QName processId, ProcessState state, String duname) {
+    protected void fireStateChange(QName processId, ProcessState state, String duname) {
         switch (state) {
             case ACTIVE:
                 fireEvent(new ProcessStoreEvent(ProcessStoreEvent.Type.ACTVIATED, processId, duname));

http://git-wip-us.apache.org/repos/asf/ode/blob/71f3d35d/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index c387b74..0e53de4 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -36,10 +36,12 @@ public class HazelcastClusterImpl implements HazelcastCluster{
 
     private HazelcastInstance _hazelcastInstance;
     private boolean isMaster = false;
-    private String message = "";
+    private String _duName = "";
     private Member leader;
+    private Member deployInitiator;
 
     private IMap<String, String> lock_map;
+    private ITopic<String> clusterMessageTopic;
 
     public HazelcastClusterImpl(HazelcastInstance hazelcastInstance) {
         _hazelcastInstance = hazelcastInstance;
@@ -51,7 +53,7 @@ public class HazelcastClusterImpl implements HazelcastCluster{
         _hazelcastInstance.getCluster().addMembershipListener(new ClusterMemberShipListener());
 
         // Register for listening to message listener
-        ITopic<String> clusterMessageTopic = _hazelcastInstance.getTopic("clusterMsg");
+        clusterMessageTopic = _hazelcastInstance.getTopic("deployedMsg");
         clusterMessageTopic.addMessageListener(new ClusterMessageListener());
 
         Member localMember = _hazelcastInstance.getCluster().getLocalMember();
@@ -72,18 +74,18 @@ public class HazelcastClusterImpl implements HazelcastCluster{
     public boolean lock(String key) {
         lock_map.lock(key);
         boolean state = lock_map.isLocked(key);
-        if (__log.isDebugEnabled()) {
-        __log.debug ("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
-        }
+        __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
         return state;
     }
 
     public boolean unlock(String key) {
         lock_map.unlock(key);
-        boolean state = lock_map.isLocked(key);
-        if (__log.isDebugEnabled()) {
-        __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + state);
+        try {
+            Thread.sleep(10);
+        } catch (InterruptedException e) {
         }
+        boolean state = lock_map.isLocked(key);
+        __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + state);
         return state;
     }
 
@@ -96,12 +98,12 @@ public class HazelcastClusterImpl implements HazelcastCluster{
 
         @Override
         public void memberRemoved(MembershipEvent membershipEvent) {
-            isLeader();
+            markAsMaster();
             // Allow Leader to update distributed map.
             if (isMaster) {
                 String leftMemberID = getHazelCastNodeID(membershipEvent.getMember());
-                _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).remove(leftMemberID);
-                _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).replace(getHazelCastNodeID(leader), isMaster);
+               // _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).remove(leftMemberID);
+               // _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).replace(getHazelCastNodeID(leader), isMaster);
             }
         }
 
@@ -114,12 +116,20 @@ public class HazelcastClusterImpl implements HazelcastCluster{
     class ClusterMessageListener implements MessageListener<String> {
         @Override
         public void onMessage(Message<String> msg) {
-            message = msg.getMessageObject();
+            String message = msg.getMessageObject();
+            String arr[] = message.split(" ", 2);
+            String duName = arr[1];
+            if(message.contains("Deployed ")) {
+                if(_hazelcastInstance.getCluster().getLocalMember() != deployInitiator) {
+                    setDUName(duName);
+                    __log.info("Recerive deployment msg to " +_hazelcastInstance.getCluster().getLocalMember() +"for" +duName);
+                }
+            }
         }
     }
 
 
-    public void isLeader() {
+    public void markAsMaster() {
         leader = _hazelcastInstance.getCluster().getMembers().iterator().next();
         if (leader.localMember()) {
             isMaster = true;
@@ -139,8 +149,14 @@ public class HazelcastClusterImpl implements HazelcastCluster{
         return isMaster;
     }
 
-    public String getMessage() {
-        return message;
+    public void setDUName(String duName) {
+        _duName = duName;
+    }
+
+    public String publishProcessStoreEvent(String msg) {
+        deployInitiator = _hazelcastInstance.getCluster().getLocalMember();
+        clusterMessageTopic.publish(msg);
+        return _duName;
     }
 
 }


[09/30] ode git commit: completed version-1 of deploying processes in the cluster

Posted by sa...@apache.org.
completed version-1 of deploying processes in the cluster


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

Branch: refs/heads/ODE-563
Commit: 9cb75820df9f8a87ebb163e4c1c45d7affd6291f
Parents: 521d640
Author: suba <su...@cse.mrt.ac.lk>
Authored: Wed Jun 17 12:32:40 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Wed Jun 17 12:32:40 2015 +0530

----------------------------------------------------------------------
 .../webapp/WEB-INF/conf/ode-axis2.properties    |  8 +++-
 .../java/org/apache/ode/axis2/Messages.java     |  4 ++
 .../java/org/apache/ode/axis2/ODEServer.java    | 27 ++++++------
 .../ode/axis2/deploy/DeploymentPoller.java      | 14 +++----
 .../ode/axis2/service/DeploymentWebService.java | 41 +++++++++++++------
 .../apache/ode/bpel/clapi/ClusterManager.java   | 13 +-----
 .../bpel/clapi/ProcessStoreUndeployedEvent.java | 40 ++++++++++++++++++
 .../ode/store/ClusterProcessStoreImpl.java      | 43 ++++++++++++++++----
 .../org/apache/ode/store/ProcessStoreImpl.java  | 22 ++++++++++
 .../hazelcast/HazelcastClusterImpl.java         | 37 +++++++++++------
 10 files changed, 183 insertions(+), 66 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/axis2-war/src/main/webapp/WEB-INF/conf/ode-axis2.properties
----------------------------------------------------------------------
diff --git a/axis2-war/src/main/webapp/WEB-INF/conf/ode-axis2.properties b/axis2-war/src/main/webapp/WEB-INF/conf/ode-axis2.properties
index 253037c..03ac79c 100644
--- a/axis2-war/src/main/webapp/WEB-INF/conf/ode-axis2.properties
+++ b/axis2-war/src/main/webapp/WEB-INF/conf/ode-axis2.properties
@@ -94,4 +94,10 @@ ode-axis2.db.emb.name=derby-jpadb
 
 ## Event listeners
 #ode-axis2.event.listeners=
-#ode-axis2.event.listeners=org.apache.ode.bpel.common.evt.DebugBpelEventListener
\ No newline at end of file
+#ode-axis2.event.listeners=org.apache.ode.bpel.common.evt.DebugBpelEventListener
+
+## Enable clustering
+#ode-axis2.clustering.enabled=true
+
+## Clustering Implementation class.
+#ode-axis2.clustering.impl.class = org.apache.ode.clustering.hazelcast.HazelcastClusterImpl

http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/axis2/src/main/java/org/apache/ode/axis2/Messages.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/Messages.java b/axis2/src/main/java/org/apache/ode/axis2/Messages.java
index a95c30d..0581c72 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/Messages.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/Messages.java
@@ -58,6 +58,10 @@ public class Messages extends MessageBundle {
         return format("Starting ODE ServiceEngine.");
     }
 
+    public String msgOdeClusteringNotInitialized() {
+        return format("Clustering has not been initialized.");
+    }
+
     public String msgOdeStarted() {
         return format("ODE Service Engine has been started.");
     }

http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index f0ad470..51f05dd 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -57,6 +57,7 @@ import org.apache.ode.axis2.deploy.DeploymentPoller;
 import org.apache.ode.axis2.service.DeploymentWebService;
 import org.apache.ode.axis2.service.ManagementService;
 import org.apache.ode.axis2.util.ClusterUrlTransformer;
+import org.apache.ode.bpel.clapi.ClusterManager;
 import org.apache.ode.bpel.connector.BpelServerConnector;
 import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
 import org.apache.ode.bpel.engine.BpelServerImpl;
@@ -82,8 +83,6 @@ import org.apache.ode.store.ClusterProcessStoreImpl;
 import org.apache.ode.utils.GUID;
 import org.apache.ode.utils.fs.TempFileManager;
 
-import org.apache.ode.bpel.clapi.ClusterManager;
-
 /**
  * Server class called by our Axis hooks to handle all ODE lifecycle management.
  *
@@ -122,6 +121,8 @@ public class ODEServer {
 
     protected Database _db;
 
+    protected ClusterManager _clusterManager;
+
     private DeploymentPoller _poller;
 
     private BpelServerConnector _connector;
@@ -135,10 +136,6 @@ public class ODEServer {
     
     public Runnable txMgrCreatedCallback;
 
-    private ClusterManager _clusterManager;
-
-    private String clusteringState = "";
-
     private boolean isClusteringEnabled;
 
     public void init(ServletConfig config, ConfigurationContext configContext) throws ServletException {
@@ -193,9 +190,10 @@ public class ODEServer {
             txMgrCreatedCallback.run();
         }
 
-        clusteringState = _odeConfig.getClusteringState();
-        if (isClusteringEnabled()) initClustering();
-        else __log.info("Clustering has not been initialized");
+        String clusteringState = _odeConfig.getClusteringState();
+        if (clusteringState != null && isClusteringEnabled(clusteringState)) {
+            initClustering();
+        } else __log.info(__msgs.msgOdeClusteringNotInitialized());
 
         __log.debug("Creating data source.");
         initDataSource();
@@ -384,6 +382,11 @@ public class ODEServer {
                 _txMgr = null;
             }
 
+            if (_clusterManager != null) {
+                __log.debug("shutting down cluster manager.");
+                _clusterManager = null;
+            }
+
             if (_connector != null) {
                 try {
                     __log.debug("shutdown BpelConnector");
@@ -468,7 +471,7 @@ public class ODEServer {
         }
     }
 
-    public boolean isClusteringEnabled() {
+    private boolean isClusteringEnabled(String clusteringState) {
         boolean state;
         if (clusteringState.equals("true")) state = true;
         else state = false;
@@ -476,7 +479,7 @@ public class ODEServer {
         return state;
     }
 
-    public void  setClustering (boolean state) {
+    private void  setClustering (boolean state) {
         isClusteringEnabled = state;
     }
 
@@ -493,7 +496,7 @@ public class ODEServer {
             Class<?> clusterImplClass = this.getClass().getClassLoader().loadClass(clusterImplName);
             _clusterManager = (ClusterManager) clusterImplClass.newInstance();
         } catch (Exception ex) {
-            __log.error(ex);
+            __log.error("Error while loading class : " +clusterImplName ,ex);
         }
         _clusterManager.init(_configRoot);
     }

http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index ccb029b..9964af0 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -41,6 +41,7 @@ package org.apache.ode.axis2.deploy;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.ode.axis2.ODEServer;
+import org.apache.ode.bpel.clapi.ClusterManager;
 import org.apache.ode.bpel.engine.cron.CronScheduler;
 import org.apache.ode.bpel.engine.cron.SystemSchedulesConfig;
 import org.apache.ode.utils.WatchDog;
@@ -54,8 +55,6 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.ode.bpel.clapi.ClusterManager;
-
 /**
  * Polls a directory for the deployment of a new deployment unit.
  */
@@ -140,10 +139,9 @@ public class DeploymentPoller {
         // Checking for new deployment directories
         if (isDeploymentFromODEFileSystemAllowed() && files != null) {
             for (File file : files) {
-                String test = file.getName();
-                __log.info("Trying to access the lock for " + test);
-                __log.info("Test null key value " +test);
-                duLocked = pollerTryLock(test);
+                String duName = file.getName();
+                __log.info("Trying to acquire the lock for " + duName);
+                duLocked = pollerTryLock(duName);
 
                 if (duLocked) {
                     try {
@@ -343,7 +341,9 @@ public class DeploymentPoller {
         }
     }
 
-    //Implementation of IMap key Lock
+    /**
+     * Use to acquire the lock by poller
+     */
     private boolean pollerTryLock(String key) {
         if(clusterEnabled) {
             return _odeServer.getBpelServer().getContexts().clusterManager.tryLock(key);

http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
index 1951cf5..89c5a63 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
@@ -172,7 +172,7 @@ public class DeploymentWebService {
                         _poller.hold();
 
                         File dest = new File(_deployPath, bundleName + "-" + _store.getCurrentVersion());
-                        __log.info("Trying to access the lock for " + dest.getName());
+                        __log.info("Trying to acquire the lock for deploying: " + dest.getName());
 
                         //lock on deployment unit directory name
                         duLocked = lock(dest.getName());
@@ -218,7 +218,7 @@ public class DeploymentWebService {
                                 }
                                 sendResponse(factory, messageContext, "deployResponse", response);
                             } finally {
-                                __log.info("Trying to release the lock for " + dest.getName());
+                                __log.info("Trying to release the lock for deploying: " + dest.getName());
                                 unlock(dest.getName());
                             }
                         }
@@ -243,20 +243,30 @@ public class DeploymentWebService {
                         // Put the poller on hold to avoid undesired side effects
                         _poller.hold();
 
-                        Collection<QName> undeployed = _store.undeploy(deploymentDir);
+                        __log.info("Trying to acquire the lock for undeploying: " + deploymentDir.getName());
+                        duLocked = lock(deploymentDir.getName());
 
-                        File deployedMarker = new File(deploymentDir + ".deployed");
-                        boolean isDeleted = deployedMarker.delete();
+                        if (duLocked) {
+                            try {
+                                Collection<QName> undeployed = _store.undeploy(deploymentDir);
 
-                        if (!isDeleted)
-                            __log.error("Error while deleting file " + deployedMarker.getName());
+                                File deployedMarker = new File(deploymentDir + ".deployed");
+                                boolean isDeleted = deployedMarker.delete();
 
-                        FileUtils.deepDelete(deploymentDir);
+                                if (!isDeleted)
+                                    __log.error("Error while deleting file " + deployedMarker.getName());
 
-                        OMElement response = factory.createOMElement("response", null);
-                        response.setText("" + (undeployed.size() > 0));
-                        sendResponse(factory, messageContext, "undeployResponse", response);
-                        _poller.markAsUndeployed(deploymentDir);
+                                FileUtils.deepDelete(deploymentDir);
+
+                                OMElement response = factory.createOMElement("response", null);
+                                response.setText("" + (undeployed.size() > 0));
+                                sendResponse(factory, messageContext, "undeployResponse", response);
+                                _poller.markAsUndeployed(deploymentDir);
+                            } finally {
+                                __log.info("Trying to release the lock for undeploying: " + deploymentDir.getName());
+                                unlock(deploymentDir.getName());
+                            }
+                        }
                     } finally {
                         _poller.release();
                     }
@@ -371,7 +381,9 @@ public class DeploymentWebService {
         out.close();
     }
 
-    //Implementation of IMap key Lock
+    /**
+     * Acquire the lock when deploying using web service
+     */
     private boolean lock(String key) {
         if(clusterEnabled) {
             return _odeServer.getBpelServer().getContexts().clusterManager.lock(key);
@@ -379,6 +391,9 @@ public class DeploymentWebService {
         else return true;
     }
 
+    /**
+     * Release the lock after completing deploy process
+     */
     private boolean unlock(String key) {
         if(clusterEnabled) {
             return _odeServer.getBpelServer().getContexts().clusterManager.unlock(key);

http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
index a1fe194..df4342e 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
@@ -30,12 +30,7 @@ public interface ClusterManager {
     void init(File file);
 
     /**
-     * Check whether current node is the leader or not.
-     */
-     void markAsMaster();
-
-    /**
-     * Return isMaster
+     * Return whether the local member is Master or not
      * @return
      */
     boolean getIsMaster();
@@ -72,10 +67,4 @@ public interface ClusterManager {
      * @param event
      */
     void publishProcessStoreEvent(Object event);
-
-    /**
-     * Handle event according to received event
-     * @param message
-     */
-    void handleEvent(Object message);
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreUndeployedEvent.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreUndeployedEvent.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreUndeployedEvent.java
new file mode 100644
index 0000000..347312f
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreUndeployedEvent.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ode.bpel.clapi;
+
+import java.io.Serializable;
+
+public class ProcessStoreUndeployedEvent implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    public final String deploymentUnit;
+
+    public final String info;
+
+    public ProcessStoreUndeployedEvent(String deploymentUnit) {
+        this.info = "Undeployment Event";
+        this.deploymentUnit = deploymentUnit;
+    }
+
+    @Override
+    public String toString() {
+        return "{ProcessStoreUndeployedEvent#" + deploymentUnit +"}";
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index 6f35110..551fd72 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -22,6 +22,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.ode.bpel.clapi.ClusterManager;
 import org.apache.ode.bpel.clapi.ProcessStoreDeployedEvent;
+import org.apache.ode.bpel.clapi.ProcessStoreUndeployedEvent;
 import org.apache.ode.bpel.iapi.ProcessState;
 import org.apache.ode.bpel.iapi.EndpointReferenceContext;
 import org.apache.ode.il.config.OdeConfigProperties;
@@ -36,9 +37,10 @@ import java.util.regex.Pattern;
 public class ClusterProcessStoreImpl extends ProcessStoreImpl{
     private static final Log __log = LogFactory.getLog(ClusterProcessStoreImpl.class);
 
-    private final ArrayList<ProcessConfImpl> loaded = new ArrayList<ProcessConfImpl>();
+    private final Map<QName, ProcessConfImpl> loaded = new HashMap<QName, ProcessConfImpl>();
     private ClusterManager _clusterManager;
     private  ProcessStoreDeployedEvent deployedEvent;
+    private  ProcessStoreUndeployedEvent undeployedEvent;
 
     public ClusterProcessStoreImpl(EndpointReferenceContext eprContext, DataSource ds, String persistenceType, OdeConfigProperties props, boolean createDatamodel, ClusterManager clusterManager) {
         super(eprContext,ds,persistenceType,props,createDatamodel);
@@ -49,8 +51,8 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
     public Collection<QName> deploy(final File deploymentUnitDirectory) {
         Collection<QName> deployed = super.deploy(deploymentUnitDirectory);
         Map<QName, ProcessConfImpl> _processes = getProcessesMap();
-        for (QName key :_processes.keySet()) {
-            if(!loaded.contains(_processes.get(key))) loaded.add(_processes.get(key));
+        for (QName key : deployed) {
+            loaded.put(key,_processes.get(key));
         }
         publishProcessStoreDeployedEvent(deploymentUnitDirectory.getName());
         return deployed;
@@ -67,8 +69,8 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
 
         Pattern duNamePattern = getPreviousPackageVersionPattern(duName);
 
-        for (Iterator<ProcessConfImpl> iterator = loaded.iterator(); iterator.hasNext();) {
-            ProcessConfImpl pconf = iterator.next();
+        for (QName key : loaded.keySet()) {
+            ProcessConfImpl pconf = loaded.get(key);
             Matcher matcher = duNamePattern.matcher(pconf.getPackage());
             if (matcher.matches() && pconf.getState().equals(state)) {
                   pconf.setState(ProcessState.RETIRED);
@@ -82,9 +84,10 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
                     DeploymentUnitDAO dudao = conn.getDeploymentUnit(duName);
                     if (dudao != null) {
                         List<ProcessConfImpl> load = load(dudao);
-                        loaded.addAll(load);
+                        for(ProcessConfImpl p : load) {
+                        loaded.put(p.getProcessId(),p);
+                        }
                         confs.addAll(load);
-
                     }
                     return null;
                 }
@@ -97,10 +100,9 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
             try {
                 fireStateChange(p.getProcessId(), p.getState(), p.getDeploymentUnit().getName());
             } catch (Exception except) {
-                __log.error("Error while activating process: pid=" + p.getProcessId() + " package="+p.getDeploymentUnit().getName(), except);
+                __log.error("Error with process retiring or activating : pid=" + p.getProcessId() + " package="+p.getDeploymentUnit().getName(), except);
             }
         }
-        //loadAll();
     }
 
     private Pattern getPreviousPackageVersionPattern(String duName) {
@@ -116,4 +118,27 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
         Pattern duNamePattern = Pattern.compile(duNameRegExp.toString());
         return duNamePattern;
     }
+
+    public Collection<QName> undeploy(final File dir) {
+        Collection<QName> undeployed = super.undeploy(dir);
+        loaded.keySet().removeAll(undeployed);
+        publishProcessStoreUndeployedEvent(dir.getName());
+        return undeployed;
+    }
+
+    private void publishProcessStoreUndeployedEvent(String duName){
+        undeployedEvent = new ProcessStoreUndeployedEvent(duName);
+        _clusterManager.publishProcessStoreEvent(undeployedEvent);
+    }
+
+    /**
+     * Use to unregister processes when deployment unit is undeployed
+     * @param duName
+     * @return
+     */
+    public Collection<QName> undeployProcesses(final String duName) {
+        Collection<QName> undeployed = super.undeployProcesses(duName);
+        loaded.keySet().removeAll(undeployed);
+        return undeployed;
+    }
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
index d6f76f3..77afe5a 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
@@ -903,4 +903,26 @@ public class ProcessStoreImpl implements ProcessStore {
     protected Map<QName, ProcessConfImpl> getProcessesMap() {
         return _processes;
     }
+
+    protected  Collection<QName> undeployProcesses(final String duName) {
+        Collection<QName> undeployed = Collections.emptyList();
+        DeploymentUnitDir du;
+        _rw.writeLock().lock();
+        try {
+            du = _deploymentUnits.remove(duName);
+            if (du != null) {
+                undeployed = toPids(du.getProcessNames(), du.getVersion());
+            }
+
+            for (QName pn : undeployed) {
+                fireEvent(new ProcessStoreEvent(ProcessStoreEvent.Type.UNDEPLOYED, pn, du.getName()));
+                __log.info(__msgs.msgProcessUndeployed(pn));
+            }
+
+            _processes.keySet().removeAll(undeployed);
+        } finally {
+            _rw.writeLock().unlock();
+        }
+        return undeployed;
+    }
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/9cb75820/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index 2e6868f..beba779 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -29,9 +29,10 @@ import java.util.List;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-import org.apache.ode.store.ClusterProcessStoreImpl;
 import org.apache.ode.bpel.clapi.ClusterManager;
 import org.apache.ode.bpel.clapi.ProcessStoreDeployedEvent;
+import org.apache.ode.bpel.clapi.ProcessStoreUndeployedEvent;
+import org.apache.ode.store.ClusterProcessStoreImpl;
 
 /**
  * This class implements necessary methods to build the cluster using hazelcast
@@ -42,14 +43,16 @@ public class HazelcastClusterImpl implements ClusterManager {
     private HazelcastInstance _hazelcastInstance;
     private boolean isMaster = false;
     private Member leader;
-    private Member deployInitiator;
+    private Member eventInitiator;
     private IMap<String, String> lock_map;
     private ITopic<Object> clusterMessageTopic;
     private ClusterProcessStoreImpl _clusterProcessStore;
 
     public void init(File configRoot) {
+
         /*First,looks for the hazelcast.config system property. If it is set, its value is used as the path.
         Else it will load the hazelcast.xml file using FileSystemXmlConfig()*/
+
         String hzConfig = System.getProperty("hazelcast.config");
         if (hzConfig != null) _hazelcastInstance = Hazelcast.newHazelcastInstance();
         else {
@@ -79,7 +82,7 @@ public class HazelcastClusterImpl implements ClusterManager {
     }
 
     public boolean lock(String key) {
-        lock_map.putIfAbsent(key,key);
+        lock_map.putIfAbsent(key, key);
         lock_map.lock(key);
         boolean state = lock_map.isLocked(key);
         __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
@@ -98,9 +101,9 @@ public class HazelcastClusterImpl implements ClusterManager {
     }
 
     public boolean tryLock(String key) {
-        lock_map.putIfAbsent(key,key);
+        lock_map.putIfAbsent(key, key);
         boolean state = lock_map.tryLock(key);
-        __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state );
+        __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
         return state;
     }
 
@@ -121,9 +124,9 @@ public class HazelcastClusterImpl implements ClusterManager {
         }
     }
 
-    public void publishProcessStoreEvent(Object deployedEvent) {
-        deployInitiator = _hazelcastInstance.getCluster().getLocalMember();
-        clusterMessageTopic.publish(deployedEvent);
+    public void publishProcessStoreEvent(Object event) {
+        eventInitiator = _hazelcastInstance.getCluster().getLocalMember();
+        clusterMessageTopic.publish(event);
     }
 
 
@@ -134,20 +137,30 @@ public class HazelcastClusterImpl implements ClusterManager {
         }
     }
 
-    public void handleEvent(Object message) {
+    private void handleEvent(Object message) {
         if (message instanceof ProcessStoreDeployedEvent) {
             ProcessStoreDeployedEvent event = (ProcessStoreDeployedEvent) message;
 
-            if (_hazelcastInstance.getCluster().getLocalMember() != deployInitiator) {
+            if (_hazelcastInstance.getCluster().getLocalMember() != eventInitiator) {
                 String duName = event.deploymentUnit;
                 __log.info("Receive deployment msg to " + _hazelcastInstance.getCluster().getLocalMember() + " for " + duName);
                 _clusterProcessStore.publishService(duName);
-            } else deployInitiator = null;
+            } else eventInitiator = null;
+        }
+
+        else if (message instanceof ProcessStoreUndeployedEvent) {
+            ProcessStoreUndeployedEvent event = (ProcessStoreUndeployedEvent) message;
+
+            if (_hazelcastInstance.getCluster().getLocalMember() != eventInitiator) {
+                String duName = event.deploymentUnit;
+                __log.info("Receive undeployment msg to " + _hazelcastInstance.getCluster().getLocalMember() + " for " + duName);
+                _clusterProcessStore.undeployProcesses(duName);
+            } else eventInitiator = null;
         }
 
     }
 
-    public void markAsMaster() {
+    private void markAsMaster() {
         leader = _hazelcastInstance.getCluster().getMembers().iterator().next();
         if (leader.localMember()) {
             isMaster = true;


[28/30] ode git commit: Tested with two nodes cluster successfully

Posted by sa...@apache.org.
Tested with two nodes cluster successfully


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

Branch: refs/heads/ODE-563
Commit: 8fe5546d6528b1b2e970971af6c077077b871561
Parents: 348ae9d
Author: suba <su...@cse.mrt.ac.lk>
Authored: Wed Aug 5 22:39:34 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Wed Aug 5 22:39:34 2015 +0530

----------------------------------------------------------------------
 .../src/main/webapp/WEB-INF/conf/hazelcast.xml  | 63 ++++++++++++++++++++
 .../java/org/apache/ode/axis2/ODEServer.java    |  2 +
 .../hazelcast/HazelcastClusterImpl.java         | 18 +++---
 .../hazelcast/HazelcastDeploymentLock.java      |  2 +-
 .../hazelcast/HazelcastInstanceLock.java        |  3 +-
 .../ode/scheduler/simple/SimpleScheduler.java   | 43 ++++++-------
 .../scheduler/simple/SimpleSchedulerTest.java   | 27 ++++-----
 7 files changed, 113 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/8fe5546d/axis2-war/src/main/webapp/WEB-INF/conf/hazelcast.xml
----------------------------------------------------------------------
diff --git a/axis2-war/src/main/webapp/WEB-INF/conf/hazelcast.xml b/axis2-war/src/main/webapp/WEB-INF/conf/hazelcast.xml
new file mode 100644
index 0000000..bf1e99e
--- /dev/null
+++ b/axis2-war/src/main/webapp/WEB-INF/conf/hazelcast.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright (c) 2008-2013, Hazelcast, Inc. All Rights Reserved.
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~ http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.4.xsd"
+           xmlns="http://www.hazelcast.com/schema/config"
+           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+   <network>
+        <port auto-increment="true" port-count="100">5701</port>
+        <outbound-ports>
+            <ports>0</ports>
+        </outbound-ports>
+        <reuse-address>false</reuse-address>
+        <join>
+            <multicast enabled="false">
+                <multicast-group>224.2.2.3</multicast-group>
+                <multicast-port>54327</multicast-port>
+            </multicast>
+            <tcp-ip enabled="true">
+                <member>127.0.0.1:5701</member>
+                <member>127.0.0.1:5702</member>
+            </tcp-ip>
+            <aws enabled="false">
+                <access-key>my-access-key</access-key>
+                <secret-key>my-secret-key</secret-key>
+                <region>us-west-1</region>
+                <host-header>ec2.amazonaws.com</host-header>
+                <security-group-name>hazelcast-sg</security-group-name>
+                <tag-key>type</tag-key>
+                <tag-value>hz-nodes</tag-value>
+            <multicast enabled="false">
+                <multicast-group>224.2.2.3</multicast-group>
+                <multicast-port>54327</multicast-port>
+            </multicast>
+            </aws>
+        </join>
+        <interfaces enabled="false">
+            <interface>10.10.1.*</interface>
+        </interfaces>
+        <ssl enabled="false" />
+        <socket-interceptor enabled="false" />
+    </network>
+    <partition-group enabled="false"/>
+    <map name="ODE_DEPLOYMENT_LOCK"></map>
+    <map name="ODE_PROCESS_INSTANCE_LOCK"></map>
+    <topic name="ODE_DEPLOYMENT_TOPIC"></topic>
+</hazelcast>
+
+
+

http://git-wip-us.apache.org/repos/asf/ode/blob/8fe5546d/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index 4860150..0a13c4a 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -201,6 +201,7 @@ public class ODEServer {
             _clusterManager.registerClusterMemberListener((ClusterMemberListener) _scheduler);
             _clusterManager.setClusterProcessStore((ClusterProcessStore) _store);
             _clusterManager.init(_configRoot);
+           ((SimpleScheduler)_scheduler).setNodeId(_clusterManager.getNodeID());
         }
 
         try {
@@ -483,6 +484,7 @@ public class ODEServer {
         }
     }
 
+
     /**
      * Initialize the DAO.
      *

http://git-wip-us.apache.org/repos/asf/ode/blob/8fe5546d/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index 9d2a554..4c5cad5 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -57,8 +57,8 @@ public class HazelcastClusterImpl implements ClusterManager, ProcessStoreCluster
     private IMap<Long, Long> instance_lock_map;
     private ITopic<ProcessStoreClusterEvent> clusterDeploymentMessageTopic;
     private ClusterProcessStore _clusterProcessStore;
-    private ClusterLock<String> _hazelcastDeploymentLock;
-    private ClusterLock<Long> _hazelcastInstanceLock;
+    private HazelcastDeploymentLock hazelcastDeploymentLock;
+    private HazelcastInstanceLock hazelcastInstanceLock;
     private ClusterDeploymentMessageListener clusterDeploymentMessageListener;
     private ClusterMemberShipListener clusterMemberShipListener;
     private List<ClusterMemberListener> clusterMemberListenerList = null;
@@ -67,8 +67,11 @@ public class HazelcastClusterImpl implements ClusterManager, ProcessStoreCluster
         clusterMemberShipListener = new ClusterMemberShipListener();
         clusterDeploymentMessageListener = new ClusterDeploymentMessageListener();
         clusterDeploymentMessageListener.registerClusterProcessStoreListener((ProcessStoreClusterListener)this);
+        hazelcastDeploymentLock = new HazelcastDeploymentLock();
+        hazelcastInstanceLock = new HazelcastInstanceLock();
     }
 
+
     public void init(File configRoot) {
 
         /*First,looks for the hazelcast.config system property. If it is set, its value is used as the path.
@@ -101,9 +104,8 @@ public class HazelcastClusterImpl implements ClusterManager, ProcessStoreCluster
             instance_lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_PROCESS_INSTANCE_LOCK);
             clusterDeploymentMessageTopic = _hazelcastInstance.getTopic(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_TOPIC);
 
-            _hazelcastDeploymentLock = (ClusterLock) new HazelcastDeploymentLock(deployment_lock_map);
-            _hazelcastInstanceLock = (ClusterLock) new HazelcastInstanceLock(instance_lock_map);
-
+            hazelcastDeploymentLock.setLockMap(deployment_lock_map);
+            hazelcastInstanceLock.setLockMap(instance_lock_map);
             markAsMaster();
         }
     }
@@ -221,7 +223,7 @@ public class HazelcastClusterImpl implements ClusterManager, ProcessStoreCluster
                 listener.memberElectedAsMaster(nodeID);
             }
         }
-        __log.info(isMaster);
+        __log.info("Master node: " +isMaster);
     }
 
     public boolean isMaster() {
@@ -249,11 +251,11 @@ public class HazelcastClusterImpl implements ClusterManager, ProcessStoreCluster
     }
 
     public ClusterLock<String> getDeploymentLock(){
-        return _hazelcastDeploymentLock;
+        return (ClusterLock)hazelcastDeploymentLock;
     }
 
     public ClusterLock<Long> getInstanceLock(){
-        return _hazelcastInstanceLock;
+        return (ClusterLock)hazelcastInstanceLock;
     }
 
     public List<String> getActiveNodes() {

http://git-wip-us.apache.org/repos/asf/ode/blob/8fe5546d/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
index f36a1b4..b753305 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
@@ -31,7 +31,7 @@ public class HazelcastDeploymentLock implements ClusterLock<String>{
 
     private IMap<String, String> _lock_map;
 
-    HazelcastDeploymentLock(IMap<String, String> lock_map) {
+    public void setLockMap(IMap<String, String> lock_map) {
         _lock_map = lock_map;
     }
 

http://git-wip-us.apache.org/repos/asf/ode/blob/8fe5546d/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
index 1729bac..8ac11f8 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
@@ -31,8 +31,7 @@ public class HazelcastInstanceLock implements ClusterLock<Long> {
 
     private IMap<Long, Long> _lock_map;
 
-
-    HazelcastInstanceLock(IMap<Long, Long> lock_map) {
+    public void setLockMap(IMap<Long, Long> lock_map) {
         _lock_map = lock_map;
     }
 

http://git-wip-us.apache.org/repos/asf/ode/blob/8fe5546d/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
index 1da5571..517045d 100644
--- a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
+++ b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
@@ -479,10 +479,10 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
         // schedule immediate job loading for now!
         _todo.enqueue(new LoadImmediateTask(now));
 
-        if(!_isClusterEnabled) enqueueTasksReadnodeIds();
+        if(!_isClusterEnabled) enqueueTasksReadnodeIds(now);
 
         else {
-            if (_clusterManager.isMaster()) enqueueTasksReadnodeIds();
+            if (_clusterManager.isMaster()) enqueueTasksReadnodeIds(now);
         }
 
         _todo.start();
@@ -521,10 +521,11 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
 
     // Do enqueue CheckStaleNodes and UpgradeJobsTask after a new master is identified.
     public void memberElectedAsMaster(String masterId) {
-        enqueueTasksReadnodeIds();
+        long now = System.currentTimeMillis();
+        enqueueTasksReadnodeIds(now);
     }
 
-    private void enqueueTasksReadnodeIds() {
+    private void enqueueTasksReadnodeIds(long now) {
         try {
             execTransaction(new Callable<Void>() {
 
@@ -544,8 +545,6 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
 
         else _knownNodes.add(_nodeId);
 
-        long now = System.currentTimeMillis();
-
         // schedule check for stale nodes, make it random so that the nodes don't overlap.
         _todo.enqueue(new CheckStaleNodes(now + randomMean(_staleInterval)));
 
@@ -815,8 +814,10 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
         final ArrayList<String> activeNodes;
 
         // for cluster mode
-        if (_isClusterEnabled && _clusterManager.isMaster()) {
-            activeNodes = (ArrayList) _clusterManager.getActiveNodes();
+        if (_isClusterEnabled) {
+            if (_clusterManager.isMaster()) {
+                activeNodes = (ArrayList) _clusterManager.getActiveNodes();
+            } else activeNodes = null;
         }
         //for standalone ODE deployments
         else {
@@ -984,24 +985,26 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
             ArrayList<String> knownNodes = new ArrayList<String>(_knownNodes);
 
             // for cluster mode
-            if (_isClusterEnabled && _clusterManager.isMaster()) {
-                ArrayList<String> memberList = (ArrayList) _clusterManager.getActiveNodes();
-
-                //find stale nodes
-                knownNodes.removeAll(memberList);
-                if (knownNodes.size() != 0) {
-                    for (String nodeId : knownNodes) {
-                        _staleNodes.add(nodeId);
+            if (_isClusterEnabled) {
+                if (_clusterManager.isMaster()) {
+                    ArrayList<String> memberList = (ArrayList) _clusterManager.getActiveNodes();
+
+                    //find stale nodes
+                    knownNodes.removeAll(memberList);
+                    if (knownNodes.size() != 0) {
+                        for (String nodeId : knownNodes) {
+                            _staleNodes.add(nodeId);
+                        }
+                    }
+                    for (String nodeId : _staleNodes) {
+                        recoverStaleNode(nodeId);
                     }
-                }
-                for (String nodeId : _staleNodes)  {
-                    recoverStaleNode(nodeId);
                 }
             }
             // for standalone ode node
             else {
                 for (String nodeId : knownNodes) {
-                    if (!nodeId.equals(_nodeId)) recoverStaleNode(nodeId);
+                    if (!_nodeId.equals(nodeId)) recoverStaleNode(nodeId);
                 }
             }
             /*for (String nodeId : _knownNodes) {

http://git-wip-us.apache.org/repos/asf/ode/blob/8fe5546d/scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/SimpleSchedulerTest.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/SimpleSchedulerTest.java b/scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/SimpleSchedulerTest.java
index 4c89ae9..10e86fc 100644
--- a/scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/SimpleSchedulerTest.java
+++ b/scheduler-simple/src/test/java/org/apache/ode/scheduler/simple/SimpleSchedulerTest.java
@@ -19,27 +19,26 @@
 
 package org.apache.ode.scheduler.simple;
 
-import java.util.*;
-
-import javax.transaction.RollbackException;
-import javax.transaction.Status;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.TransactionManager;
-
 import junit.framework.Assert;
-import junit.framework.TestCase;
-
 import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
 import org.apache.ode.bpel.iapi.Scheduler;
 import org.apache.ode.bpel.iapi.Scheduler.JobInfo;
 import org.apache.ode.bpel.iapi.Scheduler.JobProcessor;
 import org.apache.ode.bpel.iapi.Scheduler.JobProcessorException;
-import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
+import javax.transaction.RollbackException;
+import javax.transaction.Status;
+import javax.transaction.Synchronization;
+import javax.transaction.SystemException;
+import javax.transaction.TransactionManager;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Properties;
+
 public class SimpleSchedulerTest extends Assert implements JobProcessor {
 
     DelegateSupport _ds;
@@ -210,10 +209,10 @@ public class SimpleSchedulerTest extends Assert implements JobProcessor {
         _scheduler.setImmediateInterval(1000);
         _scheduler.setStaleInterval(1000);
         _scheduler.start();
-        for (int i = 0; i < 40; ++i) {
-            _scheduler.updateHeartBeat("n1");
+        /*for (int i = 0; i < 40; ++i) {
+           _scheduler.updateHeartBeat("n1");
             Thread.sleep(100);
-        }
+        }*/
 
         _scheduler.stop();
         Thread.sleep(1000);


[26/30] ode git commit: Cluster Enabled Simple Scheduler-3

Posted by sa...@apache.org.
Cluster Enabled Simple Scheduler-3


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

Branch: refs/heads/ODE-563
Commit: 43a8df89b9b05c5831cc5fd4d385b018094f7429
Parents: 3f5ef53
Author: suba <su...@cse.mrt.ac.lk>
Authored: Thu Jul 23 15:52:25 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Thu Jul 23 15:52:25 2015 +0530

----------------------------------------------------------------------
 Rakefile                                        |  2 +-
 .../java/org/apache/ode/axis2/ODEServer.java    | 15 ++--
 .../apache/ode/bpel/clapi/ClusterManager.java   |  4 +-
 .../ode/bpel/clapi/ClusterMemberListener.java   |  2 +-
 .../org/apache/ode/test/BPELTestAbstract.java   |  2 +-
 .../hazelcast/HazelcastClusterImpl.java         | 17 ++--
 .../java/org/apache/ode/jbi/OdeLifeCycle.java   |  2 +-
 .../ode/scheduler/simple/SimpleScheduler.java   | 88 +++++++++++---------
 8 files changed, 71 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/43a8df89/Rakefile
----------------------------------------------------------------------
diff --git a/Rakefile b/Rakefile
index 5475227..7c0fa67 100644
--- a/Rakefile
+++ b/Rakefile
@@ -208,7 +208,7 @@ define "ode" do
 
   desc "ODE Clustering"
    define "clustering" do
-     compile.with projects("bpel-api","bpel-store","scheduler-simple"),HAZELCAST, COMMONS.logging
+     compile.with projects("bpel-api","bpel-store"),HAZELCAST, COMMONS.logging
      package :jar
    end
 

http://git-wip-us.apache.org/repos/asf/ode/blob/43a8df89/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index 222fedd..b3f5d2f 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -31,6 +31,7 @@ import org.apache.ode.axis2.service.DeploymentWebService;
 import org.apache.ode.axis2.service.ManagementService;
 import org.apache.ode.axis2.util.ClusterUrlTransformer;
 import org.apache.ode.bpel.clapi.ClusterManager;
+import org.apache.ode.bpel.clapi.ClusterMemberListener;
 import org.apache.ode.bpel.connector.BpelServerConnector;
 import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
 import org.apache.ode.bpel.engine.BpelServerImpl;
@@ -197,7 +198,9 @@ public class ODEServer {
         _store.loadAll();
         if (_clusterManager != null) {
             _clusterManager.registerClusterProcessStoreMessageListener();
-            _clusterManager.registerClusterMemberListener(_scheduler);
+            if (_scheduler instanceof SimpleScheduler) {
+                _clusterManager.registerClusterMemberListener((ClusterMemberListener) _scheduler);
+            }
         }
 
         try {
@@ -527,10 +530,12 @@ public class ODEServer {
     }
 
     protected Scheduler createScheduler() {
-        String nodeId;
-        if (isClusteringEnabled) nodeId = _clusterManager.getUuid();
-        else nodeId = new GUID().toString();
-        SimpleScheduler scheduler = new SimpleScheduler(nodeId, new JdbcDelegate(_db.getDataSource()), _odeConfig.getProperties(), isClusteringEnabled);
+        SimpleScheduler scheduler;
+        if (isClusteringEnabled) {
+            scheduler = new SimpleScheduler(_clusterManager.getUuid(), new JdbcDelegate(_db.getDataSource()), _odeConfig.getProperties(), isClusteringEnabled);
+            scheduler.setClusterManager(_clusterManager);
+        } else
+            scheduler = new SimpleScheduler(new GUID().toString(), new JdbcDelegate(_db.getDataSource()), _odeConfig.getProperties());
         scheduler.setExecutorService(_executorService);
         scheduler.setTransactionManager(_txMgr);
         return scheduler;

http://git-wip-us.apache.org/repos/asf/ode/blob/43a8df89/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
index a00959a..07d3d8d 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
@@ -59,9 +59,9 @@ public interface ClusterManager {
 
     /**
      * Register Scheduler as ClusterMemberListener
-     * @param scheduler
+     * @param listener
      */
-    void registerClusterMemberListener(Object scheduler);
+    void registerClusterMemberListener(ClusterMemberListener listener);
 
     /**
      * Return deployment lock for cluster

http://git-wip-us.apache.org/repos/asf/ode/blob/43a8df89/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterMemberListener.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterMemberListener.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterMemberListener.java
index 4225f7d..541ab9c 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterMemberListener.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterMemberListener.java
@@ -24,6 +24,6 @@ public interface ClusterMemberListener {
 
     void memberRemoved(String nodeId);
 
-    void memberElectedAsMaster();
+    void memberElectedAsMaster(String masterId);
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ode/blob/43a8df89/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java
----------------------------------------------------------------------
diff --git a/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java b/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java
index cdda50e..00bdf7d 100644
--- a/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java
+++ b/bpel-test/src/main/java/org/apache/ode/test/BPELTestAbstract.java
@@ -128,7 +128,7 @@ public abstract class BPELTestAbstract {
 
         {
             JdbcDelegate del = new JdbcDelegate(_dataSource);
-            scheduler = new SimpleScheduler("node", del, props,false);
+            scheduler = new SimpleScheduler("node", del, props);
             scheduler.setTransactionManager(_txManager);
             _cf = new BpelDAOConnectionFactoryImpl(scheduler);
             _server.setDaoConnectionFactory(_cf);

http://git-wip-us.apache.org/repos/asf/ode/blob/43a8df89/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index 971df3e..f68068a 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -30,7 +30,6 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import org.apache.ode.bpel.clapi.*;
-import org.apache.ode.scheduler.simple.SimpleScheduler;
 
 /**
  * This class implements necessary methods to build the cluster using hazelcast
@@ -47,7 +46,7 @@ public class HazelcastClusterImpl implements ClusterManager {
     private IMap<Long, Long> instance_lock_map;
     private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
     private ClusterProcessStore _clusterProcessStore;
-    private SimpleScheduler _scheduler;
+    private ClusterMemberListener _listener;
     private ClusterLock<String> _hazelcastDeploymentLock;
     private ClusterLock<Long> _hazelcastInstanceLock;
 
@@ -78,6 +77,8 @@ public class HazelcastClusterImpl implements ClusterManager {
             uuid = localMember.getUuid();
             __log.info("Registering HZ localMember ID " + nodeID);
 
+            markAsMaster();
+
             deployment_lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_LOCK);
             instance_lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_PROCESS_INSTANCE_LOCK);
             clusterMessageTopic = _hazelcastInstance.getTopic(HazelcastConstants.ODE_CLUSTER_MSG);
@@ -92,7 +93,7 @@ public class HazelcastClusterImpl implements ClusterManager {
         public void memberAdded(MembershipEvent membershipEvent) {
             String nodeId =  membershipEvent.getMember().getUuid();
             __log.info("Member Added " +nodeId);
-            _scheduler.memberAdded(nodeId);
+            if(isMaster && _listener != null) _listener.memberAdded(nodeId);
         }
 
         @Override
@@ -100,7 +101,7 @@ public class HazelcastClusterImpl implements ClusterManager {
             String nodeId = membershipEvent.getMember().getUuid();
             __log.info("Member Removed " + nodeId);
             markAsMaster();
-            _scheduler.memberRemoved(nodeId);
+            if(isMaster && _listener != null) _listener.memberRemoved(nodeId);
         }
 
         @Override
@@ -150,7 +151,7 @@ public class HazelcastClusterImpl implements ClusterManager {
         leader = _hazelcastInstance.getCluster().getMembers().iterator().next();
         if (leader.localMember() && isMaster == false) {
             isMaster = true;
-            _scheduler.memberElectedAsMaster();
+            if(_listener != null) _listener.memberElectedAsMaster(uuid);
         }
         __log.info(isMaster);
     }
@@ -171,10 +172,8 @@ public class HazelcastClusterImpl implements ClusterManager {
         clusterMessageTopic.addMessageListener(new ClusterMessageListener());
     }
 
-    public void registerClusterMemberListener(Object scheduler) {
-        _scheduler = (SimpleScheduler) scheduler;
-        markAsMaster();
-        _scheduler.setClusterManager(this);
+    public void registerClusterMemberListener(ClusterMemberListener listener) {
+        _listener = listener;
     }
 
     public void shutdown() {

http://git-wip-us.apache.org/repos/asf/ode/blob/43a8df89/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
----------------------------------------------------------------------
diff --git a/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java b/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
index 0c1b296..c885d13 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
@@ -242,7 +242,7 @@ public class OdeLifeCycle implements ComponentLifeCycle {
             _ode._executorService = Executors.newCachedThreadPool();
         else
             _ode._executorService = Executors.newFixedThreadPool(_ode._config.getThreadPoolMaxSize());
-        _ode._scheduler = new SimpleScheduler(new GUID().toString(),new JdbcDelegate(_ode._dataSource), _ode._config.getProperties(),false);
+        _ode._scheduler = new SimpleScheduler(new GUID().toString(),new JdbcDelegate(_ode._dataSource), _ode._config.getProperties());
         _ode._scheduler.setJobProcessor(_ode._server);
         _ode._scheduler.setExecutorService(_ode._executorService);
         _ode._scheduler.setTransactionManager((TransactionManager) _ode.getContext().getTransactionManager());

http://git-wip-us.apache.org/repos/asf/ode/blob/43a8df89/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
----------------------------------------------------------------------
diff --git a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
index a0dbf5a..df33ae0 100644
--- a/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
+++ b/scheduler-simple/src/main/java/org/apache/ode/scheduler/simple/SimpleScheduler.java
@@ -103,19 +103,14 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
 
     private boolean _isClusterEnabled;
 
-    private String _masterId;
-
     private ClusterManager _clusterManager;
 
-    /** All the nodes which are taken from the database*/
-    private CopyOnWriteArraySet<String> _dbNodes = new CopyOnWriteArraySet<String>();
+    /** All the nodes we know about */
+    private CopyOnWriteArraySet<String> _knownNodes = new CopyOnWriteArraySet<String>();
 
     /** All the stale nodes */
     private CopyOnWriteArraySet<String> _staleNodes = new CopyOnWriteArraySet<String>();
 
-    /** All the nodes when members are added to the cluster*/
-    private CopyOnWriteArraySet<String> _clusterNodes = new CopyOnWriteArraySet<String>();
-
     /** When we last heard from our nodes. */
     //private ConcurrentHashMap<String, Long> _lastHeartBeat = new ConcurrentHashMap<String, Long>();
 
@@ -146,6 +141,10 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
 
     private DateFormat debugDateFormatter = new SimpleDateFormat("HH:mm:ss,SSS");
 
+    public SimpleScheduler(String nodeId, DatabaseDelegate del, Properties conf) {
+       this(nodeId,del,conf,false);
+    }
+
     public SimpleScheduler(String nodeId, DatabaseDelegate del, Properties conf, boolean clusterState) {
         _nodeId = nodeId;
         _db = del;
@@ -469,25 +468,9 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
         _processedSinceLastLoadTask.clear();
         _outstandingJobs.clear();
 
-        _dbNodes.clear();
-        _clusterNodes.clear();
+        _knownNodes.clear();
         _staleNodes.clear();
 
-        try {
-            execTransaction(new Callable<Void>() {
-
-                public Void call() throws Exception {
-                    _dbNodes.addAll(_db.getNodeIds());
-                    return null;
-                }
-
-            });
-        } catch (Exception ex) {
-            __log.error("Error retrieving node list.", ex);
-            throw new ContextException("Error retrieving node list.", ex);
-        }
-        _clusterNodes.add(_nodeId);
-
         long now = System.currentTimeMillis();
 
         // Pretend we got a heartbeat...
@@ -496,11 +479,11 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
         // schedule immediate job loading for now!
         _todo.enqueue(new LoadImmediateTask(now));
 
-        // schedule check for stale nodes, make it random so that the nodes don't overlap.
-        _todo.enqueue(new CheckStaleNodes(now + randomMean(_staleInterval)));
+        if(!_isClusterEnabled) enqueueTasksReadnodeIds();
 
-        // do the upgrade sometime (random) in the immediate interval.
-        _todo.enqueue(new UpgradeJobsTask(now + randomMean(_immediateInterval)));
+        else {
+            if (_clusterManager.getIsMaster()) enqueueTasksReadnodeIds();
+        }
 
         _todo.start();
         _running = true;
@@ -529,7 +512,7 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
     }
 
     public void memberAdded(String nodeId) {
-        _clusterNodes.add(nodeId);
+        _knownNodes.add(nodeId);
     }
 
     public void memberRemoved(String nodeId) {
@@ -537,16 +520,16 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
     }
 
     // Do enqueue CheckStaleNodes and UpgradeJobsTask after a new master is identified.
-    public void memberElectedAsMaster() {
-        _masterId = _nodeId;
-        _todo.enqueue(new CheckStaleNodes(System.currentTimeMillis() + randomMean(_staleInterval)));
-        _todo.enqueue(new UpgradeJobsTask(System.currentTimeMillis() + randomMean(_immediateInterval)));
-        _dbNodes.clear();
+    public void memberElectedAsMaster(String masterId) {
+        enqueueTasksReadnodeIds();
+    }
+
+    private void enqueueTasksReadnodeIds() {
         try {
             execTransaction(new Callable<Void>() {
 
                 public Void call() throws Exception {
-                    _dbNodes.addAll(_db.getNodeIds());
+                    _knownNodes.addAll(_db.getNodeIds());
                     return null;
                 }
 
@@ -555,6 +538,19 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
             __log.error("Error retrieving node list.", ex);
             throw new ContextException("Error retrieving node list.", ex);
         }
+
+        //make double sure all the active nodes are included into _knownNodes
+        if(_isClusterEnabled) _knownNodes.addAll(_clusterManager.getActiveNodes());
+
+        else _knownNodes.add(_nodeId);
+
+        long now = System.currentTimeMillis();
+
+        // schedule check for stale nodes, make it random so that the nodes don't overlap.
+        _todo.enqueue(new CheckStaleNodes(now + randomMean(_staleInterval)));
+
+        // do the upgrade sometime (random) in the immediate interval.
+        _todo.enqueue(new UpgradeJobsTask(now + randomMean(_immediateInterval)));
     }
 
     class RunJob implements Callable<Void> {
@@ -880,9 +876,13 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
 
             if(_isClusterEnabled) _staleNodes.remove(nodeId);
 
-            // If the stale node id is in _clusterNodes or _dbNodes, remove it.
-            _clusterNodes.remove(nodeId);
-            _dbNodes.remove(nodeId);
+            // If the stale node id is in _knownNodes, remove it.
+            _knownNodes.remove(nodeId);
+
+            // We can now forget about this node, if we see it again, it will be
+            // "new to us"
+            //_knownNodes.remove(nodeId);
+            //_lastHeartBeat.remove(nodeId);
 
             // Force a load-immediate to catch anything new from the recovered node.
             doLoadImmediate();
@@ -981,9 +981,7 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
             _todo.enqueue(new CheckStaleNodes(System.currentTimeMillis() + _staleInterval));
             __log.debug("CHECK STALE NODES started");
 
-            ArrayList<String> knownNodes = new ArrayList<String>();
-            knownNodes.addAll(_dbNodes);
-            knownNodes.addAll(_clusterNodes);
+            ArrayList<String> knownNodes = new ArrayList<String>(_knownNodes);
 
             // for cluster mode
             if (_isClusterEnabled && _clusterManager.getIsMaster()) {
@@ -1006,6 +1004,14 @@ public class SimpleScheduler implements Scheduler, TaskRunner, ClusterMemberList
                     if (!nodeId.equals(_nodeId)) recoverStaleNode(nodeId);
                 }
             }
+            /*for (String nodeId : _knownNodes) {
+                Long lastSeen = _lastHeartBeat.get(nodeId);
+                if ((lastSeen == null || (System.currentTimeMillis() - lastSeen) > _staleInterval)
+                        && !_nodeId.equals(nodeId))
+                {
+                    recoverStaleNode(nodeId);
+                }
+            }*/
         }
     }
 


[07/30] ode git commit: redesigning phase

Posted by sa...@apache.org.
redesigning phase


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

Branch: refs/heads/ODE-563
Commit: afa36ee682af1ec4cf4441c44007f2ef6b564b04
Parents: b4cd9a4
Author: suba <su...@cse.mrt.ac.lk>
Authored: Mon Jun 15 22:53:53 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Mon Jun 15 22:53:53 2015 +0530

----------------------------------------------------------------------
 .../java/org/apache/ode/axis2/ODEServer.java    | 31 ++++------
 .../apache/ode/bpel/clapi/ClusterManager.java   | 59 ++++++++++++++++++++
 .../apache/ode/bpel/hzapi/HazelcastCluster.java | 56 -------------------
 .../ode/il/config/OdeConfigProperties.java      | 12 +++-
 .../apache/ode/bpel/engine/BpelServerImpl.java  |  6 +-
 .../org/apache/ode/bpel/engine/Contexts.java    |  4 +-
 .../ode/store/ClusterProcessStoreImpl.java      | 25 +++++++--
 .../hazelcast/HazelcastClusterImpl.java         | 56 ++++++++-----------
 8 files changed, 129 insertions(+), 120 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/afa36ee6/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index d1f6c36..26489d2 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -48,7 +48,6 @@ import javax.transaction.xa.XAResource;
 
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
 import org.apache.commons.httpclient.util.IdleConnectionTimeoutThread;
 import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
@@ -83,8 +82,7 @@ import org.apache.ode.store.ClusterProcessStoreImpl;
 import org.apache.ode.utils.GUID;
 import org.apache.ode.utils.fs.TempFileManager;
 
-import org.apache.ode.clustering.hazelcast.*;
-import com.hazelcast.core.*;
+import org.apache.ode.bpel.clapi.ClusterManager;
 
 /**
  * Server class called by our Axis hooks to handle all ODE lifecycle management.
@@ -137,9 +135,7 @@ public class ODEServer {
     
     public Runnable txMgrCreatedCallback;
 
-    private HazelcastInstanceConfig hazelcastInstanceConfig;
-
-    private HazelcastClusterImpl hazelcastClusterImpl;
+    private ClusterManager _clusterManager;
 
     private String clusteringState = "";
 
@@ -484,7 +480,7 @@ public class ODEServer {
         isClusteringEnabled = state;
     }
 
-    public boolean getClusteringState() {
+    public boolean getIsCluteringEnabled() {
         return isClusteringEnabled;
     }
 
@@ -492,17 +488,14 @@ public class ODEServer {
      * Initialize the clustering if it is enabled
      */
     private void initClustering() {
-        String hzConfig = System.getProperty("hazelcast.config");
-        if (hzConfig != null) hazelcastInstanceConfig = new HazelcastInstanceConfig();
-        else {
-            File hzXml = new File(_configRoot, "hazelcast.xml");
-            if (!hzXml.isFile())
-                __log.error("hazelcast.xml does not exist or is not a file");
-            else hazelcastInstanceConfig = new HazelcastInstanceConfig(hzXml);
-        }
-        if (hazelcastInstanceConfig != null) {
-            hazelcastClusterImpl = new HazelcastClusterImpl(hazelcastInstanceConfig.getHazelcastInstance());
+        String clusterImplName = _odeConfig.getClusteringImplClass();
+        try {
+            Class<?> clustering_class = this.getClass().getClassLoader().loadClass(clusterImplName);
+            _clusterManager = (ClusterManager) clustering_class.newInstance();
+        } catch (Exception ex) {
+            __log.error(ex);
         }
+        _clusterManager.init(_configRoot);
     }
 
     /**
@@ -534,7 +527,7 @@ public class ODEServer {
 
     protected ProcessStoreImpl createProcessStore(EndpointReferenceContext eprContext, DataSource ds) {
         if (isClusteringEnabled)
-            return new ClusterProcessStoreImpl(eprContext, ds, _odeConfig.getDAOConnectionFactory(), _odeConfig, false, hazelcastClusterImpl);
+            return new ClusterProcessStoreImpl(eprContext, ds, _odeConfig.getDAOConnectionFactory(), _odeConfig, false, _clusterManager);
         else return new ProcessStoreImpl(eprContext, ds, _odeConfig.getDAOConnectionFactory(), _odeConfig, false);
     }
 
@@ -585,7 +578,7 @@ public class ODEServer {
         _bpelServer.setCronScheduler(_cronScheduler);
 
         _bpelServer.setDaoConnectionFactory(_daoCF);
-        _bpelServer.setHazelcastCluster(hazelcastClusterImpl);
+        _bpelServer.setClusterManagerImpl(_clusterManager);
         _bpelServer.setInMemDaoConnectionFactory(new BpelDAOConnectionFactoryImpl(_scheduler, _odeConfig.getInMemMexTtl()));
         _bpelServer.setEndpointReferenceContext(eprContext);
         _bpelServer.setMessageExchangeContext(new MessageExchangeContextImpl(this));

http://git-wip-us.apache.org/repos/asf/ode/blob/afa36ee6/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
new file mode 100644
index 0000000..4a0aded
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ode.bpel.clapi;
+
+import java.io.File;
+import java.util.List;
+
+public interface ClusterManager {
+
+    /**
+     * Initialization of the cluster
+     * @param file
+     */
+    void init(File file);
+
+    /**
+     * Check whether current node is the leader or not.
+     */
+     void markAsMaster();
+
+    /**
+     * Return isMaster
+     * @return
+     */
+    boolean getIsMaster();
+
+    /**
+     * Acquire the lock for each file in the file system
+     * @param key
+     * @return
+     */
+    boolean lock(String key);
+
+    /**
+     * Release the lock acquired by each file
+     * @param key
+     * @return
+     */
+    boolean unlock(String key);
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/afa36ee6/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java b/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
deleted file mode 100644
index adca32c..0000000
--- a/bpel-api/src/main/java/org/apache/ode/bpel/hzapi/HazelcastCluster.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ode.bpel.hzapi;
-
-import com.hazelcast.core.Member;
-
-import java.util.List;
-
-public interface HazelcastCluster {
-
-    /**
-     * Initialization of the cluster
-     */
-    void init();
-
-    /**
-     * Get hostName + port nu of Member
-     * @param member
-     * @return
-     */
-    String getHazelCastNodeID(Member member);
-
-    /**
-     * Check whether current node is the leader or not.
-     */
-     void markAsMaster();
-
-    /**
-     * returns Current Nodes in the cluster.
-     * @return
-     */
-    List<String> getKnownNodes();
-
-    /**
-     * Return isMaster
-     * @return
-     */
-    boolean getIsMaster();
-
-}

http://git-wip-us.apache.org/repos/asf/ode/blob/afa36ee6/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
----------------------------------------------------------------------
diff --git a/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java b/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
index cef3b74..5c0ed13 100644
--- a/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
+++ b/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
@@ -106,7 +106,11 @@ public class OdeConfigProperties {
 
     public static final String DEFAULT_TX_FACTORY_CLASS_NAME = "org.apache.ode.il.EmbeddedGeronimoFactory";
 
-    public static final String PROP_HAZELCAST_CLUSTERING = "hazelcast.clustering.enabled";
+    public static final String PROP_CLUSTERING_ENABLED = "clustering.enabled";
+
+    public static final String PROP_CLUSTERING_IMPL_CLASS = "clustering.impl.class";
+
+    public static final String DEFAULT_CLUSTERING_IMPL_CLASS_NAME = "org.apache.ode.clustering.hazelcast.HazelcastClusterImpl";
 
     private File _cfgFile;
 
@@ -292,7 +296,11 @@ public class OdeConfigProperties {
     }
 
     public String getClusteringState() {
-        return getProperty(OdeConfigProperties.PROP_HAZELCAST_CLUSTERING);
+        return getProperty(OdeConfigProperties.PROP_CLUSTERING_ENABLED);
+    }
+
+    public String getClusteringImplClass() {
+        return getProperty(OdeConfigProperties.PROP_CLUSTERING_IMPL_CLASS, DEFAULT_CLUSTERING_IMPL_CLASS_NAME);
     }
 
     public String getTxFactoryClass() {

http://git-wip-us.apache.org/repos/asf/ode/blob/afa36ee6/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
index 92e9784..01ef6eb 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelServerImpl.java
@@ -35,6 +35,7 @@ import javax.xml.namespace.QName;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.clapi.ClusterManager;
 import org.apache.ode.bpel.dao.BpelDAOConnection;
 import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
 import org.apache.ode.bpel.dao.DeferredProcessInstanceCleanable;
@@ -59,7 +60,6 @@ import org.apache.ode.bpel.iapi.Scheduler.MapSerializableRunnable;
 import org.apache.ode.bpel.iapi.Scheduler.Synchronizer;
 import org.apache.ode.bpel.intercept.MessageExchangeInterceptor;
 import org.apache.ode.bpel.o.OProcess;
-import org.apache.ode.clustering.hazelcast.HazelcastClusterImpl;
 import org.apache.ode.utils.msg.MessageBundle;
 import org.apache.ode.utils.stl.CollectionsX;
 import org.apache.ode.utils.stl.MemberOfFunction;
@@ -535,8 +535,8 @@ public class BpelServerImpl implements BpelServer, Scheduler.JobProcessor {
         _contexts.bindingContext = bc;
     }
 
-    public void setHazelcastCluster(HazelcastClusterImpl hzCImpl) {
-        _contexts.hazelcastClusterImpl = hzCImpl;
+    public void setClusterManagerImpl(ClusterManager cm) {
+        _contexts.clusterManager = cm;
     }
 
     public DebuggerContext getDebugger(QName pid) throws BpelEngineException {

http://git-wip-us.apache.org/repos/asf/ode/blob/afa36ee6/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
index 115f4f7..a965d58 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/Contexts.java
@@ -19,6 +19,7 @@
 
 package org.apache.ode.bpel.engine;
 
+import org.apache.ode.bpel.clapi.ClusterManager;
 import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
 import org.apache.ode.bpel.iapi.BindingContext;
 import org.apache.ode.bpel.iapi.BpelEventListener;
@@ -28,7 +29,6 @@ import org.apache.ode.bpel.iapi.Scheduler;
 import org.apache.ode.bpel.intercept.MessageExchangeInterceptor;
 import org.apache.ode.bpel.engine.cron.CronScheduler;
 import org.apache.ode.bpel.evar.ExternalVariableModule;
-import org.apache.ode.clustering.hazelcast.HazelcastClusterImpl;
 
 import java.util.HashMap;
 import java.util.List;
@@ -47,7 +47,7 @@ public class Contexts {
 
     public CronScheduler cronScheduler;
 
-    public  HazelcastClusterImpl hazelcastClusterImpl;
+    public ClusterManager clusterManager;
 
     EndpointReferenceContext eprContext;
 

http://git-wip-us.apache.org/repos/asf/ode/blob/afa36ee6/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index 7f79a8b..22ba2cd 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -30,6 +30,8 @@ import javax.sql.DataSource;
 import javax.xml.namespace.QName;
 import java.io.File;
 import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import com.hazelcast.core.*;
 
@@ -66,15 +68,16 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
         clusterMessageTopic.publish("Deployed " +duName);
     }
 
-    //have to write code for retire previous versions
     public void publishService(final String duName) {
-        final ArrayList<ProcessConfImpl> confs = new ArrayList<ProcessConfImpl>();
-        String namePart = duName.split("-")[0];
+        final ArrayList<ProcessConfImpl> confs = new ArrayList<ProcessConfImpl>();;
         ProcessState state = ProcessState.ACTIVE;
 
+        Pattern duNamePattern = getPreviousPackageVersionPattern(duName);
+
         for (Iterator<ProcessConfImpl> iterator = loaded.iterator(); iterator.hasNext();) {
             ProcessConfImpl pconf = iterator.next();
-            if (pconf.getPackage().contains(namePart) && pconf.getState().equals(state)) {
+            Matcher matcher = duNamePattern.matcher(pconf.getPackage());
+            if (matcher.matches() && pconf.getState().equals(state)) {
                   pconf.setState(ProcessState.RETIRED);
                   confs.add(pconf);
             }
@@ -122,4 +125,18 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
             }
         }
     }
+
+    private Pattern getPreviousPackageVersionPattern(String duName) {
+        String[] nameParts = duName.split("/");
+        /* Replace the version number (if any) with regexp to match any version number */
+        nameParts[0] = nameParts[0].replaceAll("([-\\Q.\\E](\\d)+)?\\z", "");
+        nameParts[0] += "([-\\Q.\\E](\\d)+)?";
+        StringBuilder duNameRegExp = new StringBuilder(duName.length() * 2);
+        for (int i = 0, n = nameParts.length; i < n; i++) {
+            if (i > 0) duNameRegExp.append("/");
+            duNameRegExp.append(nameParts[i]);
+        }
+        Pattern duNamePattern = Pattern.compile(duNameRegExp.toString());
+        return duNamePattern;
+    }
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/afa36ee6/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index 4e6878e..6ae701b 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -20,18 +20,19 @@ package org.apache.ode.clustering.hazelcast;
 
 import com.hazelcast.core.*;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-import org.apache.ode.bpel.hzapi.HazelcastCluster;
+import org.apache.ode.bpel.clapi.ClusterManager;
 
 /**
  * This class implements necessary methods to build the cluster using hazelcast
  */
-public class HazelcastClusterImpl implements HazelcastCluster{
+public class HazelcastClusterImpl implements ClusterManager{
     private static final Log __log = LogFactory.getLog(HazelcastClusterImpl.class);
 
     private HazelcastInstance _hazelcastInstance;
@@ -40,28 +41,26 @@ public class HazelcastClusterImpl implements HazelcastCluster{
 
     private IMap<String, String> lock_map;
 
-    public HazelcastClusterImpl(HazelcastInstance hazelcastInstance) {
-        _hazelcastInstance = hazelcastInstance;
-        init();
-    }
-
-    public void init() {
-        // Registering this node in the cluster.
-        _hazelcastInstance.getCluster().addMembershipListener(new ClusterMemberShipListener());
-
-        Member localMember = _hazelcastInstance.getCluster().getLocalMember();
-        String localMemberID = getHazelCastNodeID(localMember);
-        __log.info("Registering HZ localMember ID " + localMemberID);
-        _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP)
-                .put(localMemberID, isMaster);
-
-        lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_LOCK_MAP);
-    }
+    public void init(File configRoot) {
+        //First,looks for the hazelcast.config system property. If it is set, its value is used as the path.
+        //Else it will load the hazelcast.xml file using FileSystemXmlConfig()
+        String hzConfig = System.getProperty("hazelcast.config");
+        if (hzConfig != null) _hazelcastInstance = Hazelcast.newHazelcastInstance();
+        else {
+            File hzXml = new File(configRoot, "hazelcast.xml");
+            if (!hzXml.isFile())
+                __log.error("hazelcast.xml does not exist or is not a file");
+            else _hazelcastInstance = Hazelcast.newHazelcastInstance(new FileSystemXmlConfig(hzXml));
+        }
 
-    public String getHazelCastNodeID(Member member) {
-        String hostName = member.getSocketAddress().getHostName();
-        int port = member.getSocketAddress().getPort();
-        return hostName + ":" + port;
+        if (_hazelcastInstance != null) {
+            // Registering this node in the cluster.
+            _hazelcastInstance.getCluster().addMembershipListener(new ClusterMemberShipListener());
+            Member localMember = _hazelcastInstance.getCluster().getLocalMember();
+            __log.info("Registering HZ localMember ID " + localMember);
+            markAsMaster();
+            lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_LOCK_MAP);
+        }
     }
 
     public boolean lock(String key) {
@@ -83,7 +82,6 @@ public class HazelcastClusterImpl implements HazelcastCluster{
     }
 
     class ClusterMemberShipListener implements MembershipListener {
-
         @Override
         public void memberAdded(MembershipEvent membershipEvent) {
             // Noting to do here.
@@ -95,8 +93,6 @@ public class HazelcastClusterImpl implements HazelcastCluster{
             // Allow Leader to update distributed map.
             if (isMaster) {
                 String leftMemberID = getHazelCastNodeID(membershipEvent.getMember());
-               // _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).remove(leftMemberID);
-               // _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).replace(getHazelCastNodeID(leader), isMaster);
             }
         }
 
@@ -114,14 +110,6 @@ public class HazelcastClusterImpl implements HazelcastCluster{
         __log.info(isMaster);
     }
 
-    public List<String> getKnownNodes() {
-        List<String> nodeList = new ArrayList<String>();
-        for (Object s : _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).keySet()) {
-            nodeList.add((String) _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_NODE_MAP).get(s));
-        }
-        return nodeList;
-    }
-
     public boolean getIsMaster() {
         return isMaster;
     }


[10/30] ode git commit: minor changes

Posted by sa...@apache.org.
minor changes


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

Branch: refs/heads/ODE-563
Commit: 0afb7c4d6268ff3bcc99620e4926e0c7ab61d78d
Parents: 9cb7582
Author: suba <su...@cse.mrt.ac.lk>
Authored: Mon Jun 22 21:29:19 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Mon Jun 22 21:29:19 2015 +0530

----------------------------------------------------------------------
 .../ode/axis2/deploy/DeploymentPoller.java      |  2 +
 .../ode/axis2/service/DeploymentWebService.java |  5 +-
 .../apache/ode/bpel/clapi/ClusterManager.java   |  9 ++++
 .../bpel/clapi/ProcessStoreClusterEvent.java    | 57 ++++++++++++++++++++
 .../bpel/clapi/ProcessStoreDeployedEvent.java   | 18 ++-----
 .../bpel/clapi/ProcessStoreUndeployedEvent.java | 16 ++----
 .../ode/store/ClusterProcessStoreImpl.java      | 31 +++--------
 .../org/apache/ode/store/ProcessStoreImpl.java  | 51 ++++++------------
 .../hazelcast/HazelcastClusterImpl.java         | 41 +++++++-------
 dependencies.rb                                 |  2 +-
 10 files changed, 126 insertions(+), 106 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index 9964af0..ed84f35 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -346,6 +346,8 @@ public class DeploymentPoller {
      */
     private boolean pollerTryLock(String key) {
         if(clusterEnabled) {
+            ClusterManager cm = _odeServer.getBpelServer().getContexts().clusterManager;
+            cm.putIfAbsent(key,key);
             return _odeServer.getBpelServer().getContexts().clusterManager.tryLock(key);
         }
         else return true;

http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
index 89c5a63..66221dc 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
@@ -45,6 +45,7 @@ import org.apache.axiom.om.OMText;
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axis2.AxisFault;
+import org.apache.ode.bpel.clapi.ClusterManager;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.AxisOperation;
@@ -386,7 +387,9 @@ public class DeploymentWebService {
      */
     private boolean lock(String key) {
         if(clusterEnabled) {
-            return _odeServer.getBpelServer().getContexts().clusterManager.lock(key);
+            ClusterManager cm = _odeServer.getBpelServer().getContexts().clusterManager;
+            cm.putIfAbsent(key,key);
+            return cm.lock(key);
         }
         else return true;
     }

http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
index df4342e..fab2bac 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
@@ -67,4 +67,13 @@ public interface ClusterManager {
      * @param event
      */
     void publishProcessStoreEvent(Object event);
+
+    /**
+     * Check whether the map has a value for given key, if absent put the value to map
+     * @param key
+     * @param keyVal
+     */
+    void putIfAbsent(String key, String keyVal);
+
+
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterEvent.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterEvent.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterEvent.java
new file mode 100644
index 0000000..a396f6f
--- /dev/null
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreClusterEvent.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ode.bpel.clapi;
+
+import java.io.Serializable;
+
+public abstract class ProcessStoreClusterEvent implements Serializable {
+    protected static final long serialVersionUID = 1L;
+
+    private String deploymentUnit;
+
+    protected String info ;
+
+    private String uuid;
+
+    public ProcessStoreClusterEvent(String deploymentUnit) {
+        this.deploymentUnit = deploymentUnit;
+    }
+
+    @Override
+    public String toString() {
+        return "{ProcessStoreClusterEvent#" + deploymentUnit +"}";
+    }
+
+    public void setUuid(String uuid) {
+        this.uuid = uuid;
+    }
+
+    public String getUuid() {
+        return uuid;
+    }
+
+    public String getDuName() {
+        return deploymentUnit;
+    }
+
+    public String getInfo() {
+        return info;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreDeployedEvent.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreDeployedEvent.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreDeployedEvent.java
index a623d47..c7cbb23 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreDeployedEvent.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreDeployedEvent.java
@@ -18,23 +18,15 @@
  */
 package org.apache.ode.bpel.clapi;
 
-import java.io.Serializable;
+public class ProcessStoreDeployedEvent extends ProcessStoreClusterEvent {
 
-public class ProcessStoreDeployedEvent implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    public final String deploymentUnit;
-
-    public final String info;
-
-    public ProcessStoreDeployedEvent(String deploymentUnit) {
-        this.info = "Deployment Event";
-        this.deploymentUnit = deploymentUnit;
+     public ProcessStoreDeployedEvent(String deploymentUnit) {
+        super(deploymentUnit);
+        info = "Deploy Event";
     }
 
     @Override
     public String toString() {
-        return "{ProcessStoreDeployedEvent#" + deploymentUnit +"}";
+        return "{ProcessStoreDeployedEvent#" + getDuName() +"}";
     }
-
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreUndeployedEvent.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreUndeployedEvent.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreUndeployedEvent.java
index 347312f..d4f5a49 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreUndeployedEvent.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ProcessStoreUndeployedEvent.java
@@ -18,23 +18,15 @@
  */
 package org.apache.ode.bpel.clapi;
 
-import java.io.Serializable;
-
-public class ProcessStoreUndeployedEvent implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    public final String deploymentUnit;
-
-    public final String info;
+public class ProcessStoreUndeployedEvent extends ProcessStoreClusterEvent {
 
     public ProcessStoreUndeployedEvent(String deploymentUnit) {
-        this.info = "Undeployment Event";
-        this.deploymentUnit = deploymentUnit;
+        super(deploymentUnit);
+        info = "Undeploy Event";
     }
 
     @Override
     public String toString() {
-        return "{ProcessStoreUndeployedEvent#" + deploymentUnit +"}";
+        return "{ProcessStoreUndeployedEvent#" + getDuName() +"}";
     }
-
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index 551fd72..117eab0 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -37,7 +37,6 @@ import java.util.regex.Pattern;
 public class ClusterProcessStoreImpl extends ProcessStoreImpl{
     private static final Log __log = LogFactory.getLog(ClusterProcessStoreImpl.class);
 
-    private final Map<QName, ProcessConfImpl> loaded = new HashMap<QName, ProcessConfImpl>();
     private ClusterManager _clusterManager;
     private  ProcessStoreDeployedEvent deployedEvent;
     private  ProcessStoreUndeployedEvent undeployedEvent;
@@ -50,10 +49,6 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
 
     public Collection<QName> deploy(final File deploymentUnitDirectory) {
         Collection<QName> deployed = super.deploy(deploymentUnitDirectory);
-        Map<QName, ProcessConfImpl> _processes = getProcessesMap();
-        for (QName key : deployed) {
-            loaded.put(key,_processes.get(key));
-        }
         publishProcessStoreDeployedEvent(deploymentUnitDirectory.getName());
         return deployed;
     }
@@ -64,13 +59,13 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
     }
 
     public void publishService(final String duName) {
-        final ArrayList<ProcessConfImpl> confs = new ArrayList<ProcessConfImpl>();;
+        final ArrayList<ProcessConfImpl> confs = new ArrayList<ProcessConfImpl>();
         ProcessState state = ProcessState.ACTIVE;
 
         Pattern duNamePattern = getPreviousPackageVersionPattern(duName);
 
-        for (QName key : loaded.keySet()) {
-            ProcessConfImpl pconf = loaded.get(key);
+        for (QName key : _processes.keySet()) {
+            ProcessConfImpl pconf = _processes.get(key);
             Matcher matcher = duNamePattern.matcher(pconf.getPackage());
             if (matcher.matches() && pconf.getState().equals(state)) {
                   pconf.setState(ProcessState.RETIRED);
@@ -85,7 +80,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
                     if (dudao != null) {
                         List<ProcessConfImpl> load = load(dudao);
                         for(ProcessConfImpl p : load) {
-                        loaded.put(p.getProcessId(),p);
+                        _processes.put(p.getProcessId(),p);
                         }
                         confs.addAll(load);
                     }
@@ -105,23 +100,11 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
         }
     }
 
-    private Pattern getPreviousPackageVersionPattern(String duName) {
-        String[] nameParts = duName.split("/");
-        /* Replace the version number (if any) with regexp to match any version number */
-        nameParts[0] = nameParts[0].replaceAll("([-\\Q.\\E](\\d)+)?\\z", "");
-        nameParts[0] += "([-\\Q.\\E](\\d)+)?";
-        StringBuilder duNameRegExp = new StringBuilder(duName.length() * 2);
-        for (int i = 0, n = nameParts.length; i < n; i++) {
-            if (i > 0) duNameRegExp.append("/");
-            duNameRegExp.append(nameParts[i]);
-        }
-        Pattern duNamePattern = Pattern.compile(duNameRegExp.toString());
-        return duNamePattern;
-    }
+
 
     public Collection<QName> undeploy(final File dir) {
         Collection<QName> undeployed = super.undeploy(dir);
-        loaded.keySet().removeAll(undeployed);
+        _processes.keySet().removeAll(undeployed);
         publishProcessStoreUndeployedEvent(dir.getName());
         return undeployed;
     }
@@ -138,7 +121,7 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl{
      */
     public Collection<QName> undeployProcesses(final String duName) {
         Collection<QName> undeployed = super.undeployProcesses(duName);
-        loaded.keySet().removeAll(undeployed);
+        _processes.keySet().removeAll(undeployed);
         return undeployed;
     }
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
index 77afe5a..0658b66 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
@@ -71,7 +71,7 @@ public class ProcessStoreImpl implements ProcessStore {
 
     private final CopyOnWriteArrayList<ProcessStoreListener> _listeners = new CopyOnWriteArrayList<ProcessStoreListener>();
 
-    private Map<QName, ProcessConfImpl> _processes = new HashMap<QName, ProcessConfImpl>();
+    protected Map<QName, ProcessConfImpl> _processes = new HashMap<QName, ProcessConfImpl>();
 
     private Map<String, DeploymentUnitDir> _deploymentUnits = new HashMap<String, DeploymentUnitDir>();
 
@@ -333,18 +333,9 @@ public class ProcessStoreImpl implements ProcessStore {
      * "AbsenceRequest-2/AbsenceRequest.ode" and setRetirePackage() will be called accordingly.
      */
     private void retirePreviousPackageVersions(DeploymentUnitDir du) {
-        //retire all the other versions of the same DU
-        String[] nameParts = du.getName().split("/");
-           /* Replace the version number (if any) with regexp to match any version number */
-            nameParts[0] = nameParts[0].replaceAll("([-\\Q.\\E](\\d)+)?\\z", "");
-            nameParts[0] += "([-\\Q.\\E](\\d)+)?";
-        StringBuilder duNameRegExp = new StringBuilder(du.getName().length() * 2);
-        for (int i = 0, n = nameParts.length; i < n; i++) {
-            if (i > 0) duNameRegExp.append("/");
-            duNameRegExp.append(nameParts[i]);
-        }
 
-        Pattern duNamePattern = Pattern.compile(duNameRegExp.toString());
+        Pattern duNamePattern = getPreviousPackageVersionPattern(du.getName());
+
         for (String deployedDUname : _deploymentUnits.keySet()) {
             Matcher matcher = duNamePattern.matcher(deployedDUname);
             if (matcher.matches()) {
@@ -371,26 +362,7 @@ public class ProcessStoreImpl implements ProcessStore {
             __log.error("Error synchronizing with data store; " + duName + " may be reappear after restart!");
         }
 
-        Collection<QName> undeployed = Collections.emptyList();
-        DeploymentUnitDir du;
-        _rw.writeLock().lock();
-        try {
-            du = _deploymentUnits.remove(duName);
-            if (du != null) {
-                undeployed = toPids(du.getProcessNames(), du.getVersion());
-            }
-
-            for (QName pn : undeployed) {
-                fireEvent(new ProcessStoreEvent(ProcessStoreEvent.Type.UNDEPLOYED, pn, du.getName()));
-                __log.info(__msgs.msgProcessUndeployed(pn));
-            }
-
-            _processes.keySet().removeAll(undeployed);
-        } finally {
-            _rw.writeLock().unlock();
-        }
-
-        return undeployed;
+        return undeployProcesses(duName);
     }
 
     public Collection<String> getPackages() {
@@ -900,8 +872,19 @@ public class ProcessStoreImpl implements ProcessStore {
         }
     }
 
-    protected Map<QName, ProcessConfImpl> getProcessesMap() {
-        return _processes;
+    protected Pattern getPreviousPackageVersionPattern(String duName) {
+        //retire all the other versions of the same DU
+        String[] nameParts = duName.split("/");
+        /* Replace the version number (if any) with regexp to match any version number */
+        nameParts[0] = nameParts[0].replaceAll("([-\\Q.\\E](\\d)+)?\\z", "");
+        nameParts[0] += "([-\\Q.\\E](\\d)+)?";
+        StringBuilder duNameRegExp = new StringBuilder(duName.length() * 2);
+        for (int i = 0, n = nameParts.length; i < n; i++) {
+            if (i > 0) duNameRegExp.append("/");
+            duNameRegExp.append(nameParts[i]);
+        }
+        Pattern duNamePattern = Pattern.compile(duNameRegExp.toString());
+        return duNamePattern;
     }
 
     protected  Collection<QName> undeployProcesses(final String duName) {

http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index beba779..42a3169 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -30,6 +30,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import org.apache.ode.bpel.clapi.ClusterManager;
+import org.apache.ode.bpel.clapi.ProcessStoreClusterEvent;
 import org.apache.ode.bpel.clapi.ProcessStoreDeployedEvent;
 import org.apache.ode.bpel.clapi.ProcessStoreUndeployedEvent;
 import org.apache.ode.store.ClusterProcessStoreImpl;
@@ -43,7 +44,6 @@ public class HazelcastClusterImpl implements ClusterManager {
     private HazelcastInstance _hazelcastInstance;
     private boolean isMaster = false;
     private Member leader;
-    private Member eventInitiator;
     private IMap<String, String> lock_map;
     private ITopic<Object> clusterMessageTopic;
     private ClusterProcessStoreImpl _clusterProcessStore;
@@ -81,27 +81,23 @@ public class HazelcastClusterImpl implements ClusterManager {
         }
     }
 
+    public void putIfAbsent(String key, String keyVal) {
+        lock_map.putIfAbsent(key, keyVal);
+    }
+
     public boolean lock(String key) {
-        lock_map.putIfAbsent(key, key);
         lock_map.lock(key);
-        boolean state = lock_map.isLocked(key);
-        __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
-        return state;
+        __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + true);
+        return true;
     }
 
     public boolean unlock(String key) {
         lock_map.unlock(key);
-        try {
-            Thread.sleep(10);
-        } catch (InterruptedException e) {
-        }
-        boolean state = lock_map.isLocked(key);
-        __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + state);
-        return state;
+        __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + false);
+        return true;
     }
 
     public boolean tryLock(String key) {
-        lock_map.putIfAbsent(key, key);
         boolean state = lock_map.tryLock(key);
         __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
         return state;
@@ -125,8 +121,11 @@ public class HazelcastClusterImpl implements ClusterManager {
     }
 
     public void publishProcessStoreEvent(Object event) {
-        eventInitiator = _hazelcastInstance.getCluster().getLocalMember();
-        clusterMessageTopic.publish(event);
+        if (event instanceof ProcessStoreClusterEvent) {
+            ProcessStoreClusterEvent e = (ProcessStoreClusterEvent) event;
+        e.setUuid(_hazelcastInstance.getCluster().getLocalMember().getUuid());
+        clusterMessageTopic.publish(e);
+        }
     }
 
 
@@ -141,21 +140,21 @@ public class HazelcastClusterImpl implements ClusterManager {
         if (message instanceof ProcessStoreDeployedEvent) {
             ProcessStoreDeployedEvent event = (ProcessStoreDeployedEvent) message;
 
-            if (_hazelcastInstance.getCluster().getLocalMember() != eventInitiator) {
-                String duName = event.deploymentUnit;
+            if (_hazelcastInstance.getCluster().getLocalMember().getUuid() != event.getUuid()) {
+                String duName = event.getDuName();
                 __log.info("Receive deployment msg to " + _hazelcastInstance.getCluster().getLocalMember() + " for " + duName);
                 _clusterProcessStore.publishService(duName);
-            } else eventInitiator = null;
+            }
         }
 
         else if (message instanceof ProcessStoreUndeployedEvent) {
             ProcessStoreUndeployedEvent event = (ProcessStoreUndeployedEvent) message;
 
-            if (_hazelcastInstance.getCluster().getLocalMember() != eventInitiator) {
-                String duName = event.deploymentUnit;
+            if (_hazelcastInstance.getCluster().getLocalMember().getUuid() != event.getUuid()) {
+                String duName = event.getDuName();
                 __log.info("Receive undeployment msg to " + _hazelcastInstance.getCluster().getLocalMember() + " for " + duName);
                 _clusterProcessStore.undeployProcesses(duName);
-            } else eventInitiator = null;
+            }
         }
 
     }

http://git-wip-us.apache.org/repos/asf/ode/blob/0afb7c4d/dependencies.rb
----------------------------------------------------------------------
diff --git a/dependencies.rb b/dependencies.rb
index 33da5e4..f85e38a 100644
--- a/dependencies.rb
+++ b/dependencies.rb
@@ -75,7 +75,7 @@ GERONIMO            = struct(
   :transaction      =>"org.apache.geronimo.components:geronimo-transaction:jar:2.0.1",
   :connector        =>"org.apache.geronimo.components:geronimo-connector:jar:2.0.1"
 )
-HAZELCAST           ="com.hazelcast:hazelcast:jar:3.4.2"
+HAZELCAST           ="com.hazelcast:hazelcast:jar:3.5"
 HIBERNATE           = [ "org.hibernate:hibernate-core:jar:3.3.2.GA", "javassist:javassist:jar:3.9.0.GA", "antlr:antlr:jar:2.7.6",
                         "asm:asm:jar:3.3.1", "cglib:cglib:jar:2.2", "net.sf.ehcache:ehcache:jar:1.2.3" ]
 HSQLDB              = "hsqldb:hsqldb:jar:1.8.0.7"


[14/30] ode git commit: completed improvements-1

Posted by sa...@apache.org.
completed improvements-1


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

Branch: refs/heads/ODE-563
Commit: 82143f4736a4063eda0a467532ae1188cb00cbbe
Parents: ca74e00
Author: suba <su...@cse.mrt.ac.lk>
Authored: Tue Jun 30 00:04:23 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Tue Jun 30 00:04:23 2015 +0530

----------------------------------------------------------------------
 .../ode/axis2/deploy/DeploymentPoller.java      | 39 +++++++++++++++-----
 .../ode/store/ClusterProcessStoreImpl.java      | 32 ++++++++--------
 .../org/apache/ode/store/ProcessStoreImpl.java  |  4 +-
 .../hazelcast/HazelcastClusterImpl.java         | 16 +++++---
 .../hazelcast/HazelcastConstants.java           |  4 +-
 5 files changed, 63 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/82143f47/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index ed84f35..7912db6 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -140,7 +140,9 @@ public class DeploymentPoller {
         if (isDeploymentFromODEFileSystemAllowed() && files != null) {
             for (File file : files) {
                 String duName = file.getName();
-                __log.info("Trying to acquire the lock for " + duName);
+                if (__log.isDebugEnabled()) {
+                __log.debug("Trying to acquire the lock for " + duName);
+                }
                 duLocked = pollerTryLock(duName);
 
                 if (duLocked) {
@@ -187,7 +189,9 @@ public class DeploymentPoller {
                             __log.error("Deployment of " + file.getName() + " failed, aborting for now.", e);
                         }
                     } finally {
-                        __log.info("Trying to release the lock for " + file.getName());
+                        if (__log.isDebugEnabled()) {
+                        __log.debug("Trying to release the lock for " + file.getName());
+                        }
                         unlock(file.getName());
                     }
                 }
@@ -200,16 +204,33 @@ public class DeploymentPoller {
             String pkg = file.getName().substring(0, file.getName().length() - ".deployed".length());
             File deployDir = new File(_deployDir, pkg);
             if (!deployDir.exists()) {
-                Collection<QName> undeployed = _odeServer.getProcessStore().undeploy(deployDir);
-                boolean isDeleted = file.delete();
-                if (!isDeleted) {
-                    __log.error("Error while deleting file "
+                String duName = deployDir.getName();
+
+                if (__log.isDebugEnabled()) {
+                    __log.debug("Trying to acquire the lock for " + duName);
+                }
+
+                duLocked = pollerTryLock(duName);
+
+                if (duLocked) {
+                    try {
+                        Collection<QName> undeployed = _odeServer.getProcessStore().undeploy(deployDir);
+                        boolean isDeleted = file.delete();
+                        if (!isDeleted) {
+                            __log.error("Error while deleting file "
                                     + file.getName()
                                     + ".deployed , please check if file is locked or if it really exist");
+                        }
+                        disposeDeployXmlWatchDog(deployDir);
+                        if (undeployed.size() > 0)
+                            __log.info("Successfully undeployed " + pkg);
+                    } finally {
+                        if (__log.isDebugEnabled()) {
+                            __log.debug("Trying to release the lock for " + duName);
+                        }
+                        unlock(duName);
+                    }
                 }
-                disposeDeployXmlWatchDog(deployDir);
-                if (undeployed.size() > 0)
-                    __log.info("Successfully undeployed " + pkg);
             }
         }
 

http://git-wip-us.apache.org/repos/asf/ode/blob/82143f47/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
index f36ea69..51fea5a 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ClusterProcessStoreImpl.java
@@ -24,6 +24,7 @@ import org.apache.ode.bpel.clapi.ClusterManager;
 import org.apache.ode.bpel.clapi.ClusterProcessStore;
 import org.apache.ode.bpel.clapi.ProcessStoreDeployedEvent;
 import org.apache.ode.bpel.clapi.ProcessStoreUndeployedEvent;
+import org.apache.ode.bpel.iapi.ContextException;
 import org.apache.ode.bpel.iapi.ProcessState;
 import org.apache.ode.bpel.iapi.EndpointReferenceContext;
 import org.apache.ode.il.config.OdeConfigProperties;
@@ -67,13 +68,20 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl implements Cluster
 
         Pattern duNamePattern = getPreviousPackageVersionPattern(duName);
 
-        for (QName key : _processes.keySet()) {
-            ProcessConfImpl pconf = _processes.get(key);
-            Matcher matcher = duNamePattern.matcher(pconf.getPackage());
-            if (matcher.matches() && pconf.getState().equals(state)) {
-                  pconf.setState(ProcessState.RETIRED);
-                __log.info("Set state of " +pconf.getProcessId() +"to " +pconf.getState());
-                  confs.add(pconf);
+        for (String packageName : _deploymentUnits.keySet()) {
+            Matcher matcher = duNamePattern.matcher(packageName);
+            if (matcher.matches()) {
+                DeploymentUnitDir duDir = _deploymentUnits.get(packageName);
+                if (duDir == null) throw new ContextException("Could not find package " + packageName);
+                for (QName processName : duDir.getProcessNames()) {
+                    QName pid = toPid(processName, duDir.getVersion());
+                    ProcessConfImpl pconf = _processes.get(pid);
+                    if (pconf.getState().equals(state)) {
+                        pconf.setState(ProcessState.RETIRED);
+                        __log.info("Set state of " + pconf.getProcessId() + "to " + pconf.getState());
+                        confs.add(pconf);
+                    }
+                }
             }
         }
 
@@ -84,9 +92,6 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl implements Cluster
                     if (dudao != null) {
                         List<ProcessConfImpl> load = load(dudao);
                         __log.info("Loading DU from store: " + duName);
-                        for(ProcessConfImpl p : load) {
-                        _processes.put(p.getProcessId(),p);
-                        }
                         confs.addAll(load);
                     }
                     return null;
@@ -98,19 +103,17 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl implements Cluster
 
         for (ProcessConfImpl p : confs) {
             try {
-                __log.info("Fire event of " + p.getProcessId()  +" " +p.getState());
+                __log.info("Fire event of " + p.getProcessId() + " " + p.getState());
                 fireStateChange(p.getProcessId(), p.getState(), p.getDeploymentUnit().getName());
             } catch (Exception except) {
-                __log.error("Error with process retiring or activating : pid=" + p.getProcessId() + " package="+p.getDeploymentUnit().getName(), except);
+                __log.error("Error with process retiring or activating : pid=" + p.getProcessId() + " package=" + p.getDeploymentUnit().getName(), except);
             }
         }
     }
 
 
-
     public Collection<QName> undeploy(final File dir) {
         Collection<QName> undeployed = super.undeploy(dir);
-        _processes.keySet().removeAll(undeployed);
         publishProcessStoreUndeployedEvent(dir.getName());
         return undeployed;
     }
@@ -128,7 +131,6 @@ public class ClusterProcessStoreImpl extends ProcessStoreImpl implements Cluster
      */
     public Collection<QName> undeployProcesses(final String duName) {
         Collection<QName> undeployed = super.undeployProcesses(duName);
-        _processes.keySet().removeAll(undeployed);
         return undeployed;
     }
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/82143f47/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
index 0658b66..91f0bff 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ProcessStoreImpl.java
@@ -73,7 +73,7 @@ public class ProcessStoreImpl implements ProcessStore {
 
     protected Map<QName, ProcessConfImpl> _processes = new HashMap<QName, ProcessConfImpl>();
 
-    private Map<String, DeploymentUnitDir> _deploymentUnits = new HashMap<String, DeploymentUnitDir>();
+    protected Map<String, DeploymentUnitDir> _deploymentUnits = new HashMap<String, DeploymentUnitDir>();
 
     /** Guards access to the _processes and _deploymentUnits */
     private final ReadWriteLock _rw = new ReentrantReadWriteLock();
@@ -849,7 +849,7 @@ public class ProcessStoreImpl implements ProcessStore {
         return result;
     }
 
-    private QName toPid(QName processType, long version) {
+    protected QName toPid(QName processType, long version) {
         return new QName(processType.getNamespaceURI(), processType.getLocalPart() + "-" + version);
     }
 

http://git-wip-us.apache.org/repos/asf/ode/blob/82143f47/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index 89469e3..c721373 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -70,8 +70,8 @@ public class HazelcastClusterImpl implements ClusterManager {
             Member localMember = _hazelcastInstance.getCluster().getLocalMember();
             __log.info("Registering HZ localMember ID " + localMember);
             markAsMaster();
-            lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_LOCK_MAP);
-            clusterMessageTopic = _hazelcastInstance.getTopic("deployedMsg");
+            lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_LOCK);
+            clusterMessageTopic = _hazelcastInstance.getTopic(HazelcastConstants.ODE_CLUSTER_MSG);
         }
     }
 
@@ -81,19 +81,25 @@ public class HazelcastClusterImpl implements ClusterManager {
 
     public boolean lock(String key) {
         lock_map.lock(key);
-        __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + true);
+        if (__log.isDebugEnabled()) {
+        __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + true);
+        }
         return true;
     }
 
     public boolean unlock(String key) {
         lock_map.unlock(key);
-        __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + false);
+        if (__log.isDebugEnabled()) {
+        __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + false);
+        }
         return true;
     }
 
     public boolean tryLock(String key) {
         boolean state = lock_map.tryLock(key);
-        __log.info("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
+        if (__log.isDebugEnabled()) {
+        __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
+        }
         return state;
     }
 

http://git-wip-us.apache.org/repos/asf/ode/blob/82143f47/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
index f9d1004..76e7341 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastConstants.java
@@ -21,7 +21,9 @@ package org.apache.ode.clustering.hazelcast;
  * Constants used in Hazelcast based clustering implementation
  */
 public final class HazelcastConstants {
-    public static final String ODE_CLUSTER_LOCK_MAP = "ODE_LOCK_MAP";
+    public static final String ODE_CLUSTER_DEPLOYMENT_LOCK = "DEPLOYMENT_LOCK";
+    public static final String ODE_CLUSTER_PROCESS_INSTANCE_LOCK  = "PROCESS_INSTANCE_LOCK ";
+    public static final String ODE_CLUSTER_MSG = "CLUSTER_MSG";
 
     private HazelcastConstants() {
     }


[15/30] ode git commit: Included all the changes to create patch-1

Posted by sa...@apache.org.
Included all the changes to create patch-1


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

Branch: refs/heads/ODE-563
Commit: 224dc217ba34a27a3df5f0453481f41996b92271
Parents: 82143f4
Author: suba <su...@cse.mrt.ac.lk>
Authored: Tue Jun 30 22:24:41 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Tue Jun 30 22:24:41 2015 +0530

----------------------------------------------------------------------
 .../hazelcast/HazelcastClusterImpl.java         | 22 ++++++++++++--------
 1 file changed, 13 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/224dc217/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index c721373..11e1313 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -40,6 +40,8 @@ public class HazelcastClusterImpl implements ClusterManager {
 
     private HazelcastInstance _hazelcastInstance;
     private boolean isMaster = false;
+    private String nodeID;
+    private String uuid;
     private Member leader;
     private IMap<String, String> lock_map;
     private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
@@ -68,7 +70,9 @@ public class HazelcastClusterImpl implements ClusterManager {
             // Registering this node in the cluster.
             _hazelcastInstance.getCluster().addMembershipListener(new ClusterMemberShipListener());
             Member localMember = _hazelcastInstance.getCluster().getLocalMember();
-            __log.info("Registering HZ localMember ID " + localMember);
+            nodeID = localMember.getInetSocketAddress().getHostName() +":" +localMember.getInetSocketAddress().getPort();
+            uuid = localMember.getUuid();
+            __log.info("Registering HZ localMember ID " + nodeID);
             markAsMaster();
             lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_LOCK);
             clusterMessageTopic = _hazelcastInstance.getTopic(HazelcastConstants.ODE_CLUSTER_MSG);
@@ -122,8 +126,8 @@ public class HazelcastClusterImpl implements ClusterManager {
     }
 
     public void publishProcessStoreClusterEvent(ProcessStoreClusterEvent clusterEvent) {
-        clusterEvent.setUuid(_hazelcastInstance.getCluster().getLocalMember().getUuid());
-        __log.info("Send " +clusterEvent.getInfo() +"Cluster Message " +"for " +clusterEvent.getDuName());
+        clusterEvent.setUuid(uuid);
+        __log.info("Send " +clusterEvent.getInfo() +" Cluster Message " +"for " +clusterEvent.getDuName() +" [" +nodeID +"]");
         clusterMessageTopic.publish(clusterEvent);
     }
 
@@ -138,20 +142,20 @@ public class HazelcastClusterImpl implements ClusterManager {
     private void handleEvent(ProcessStoreClusterEvent message) {
         if (message instanceof ProcessStoreDeployedEvent) {
             ProcessStoreDeployedEvent event = (ProcessStoreDeployedEvent) message;
-
-            if (!_hazelcastInstance.getCluster().getLocalMember().getUuid().equals(event.getUuid())) {
+            String eventUuid =  event.getUuid();
+            if (!uuid.equals(eventUuid)) {
                 String duName = event.getDuName();
-                __log.info("Receive " +event.getInfo() +"Cluster Message " +"for " +event.getDuName());
+                __log.info("Receive " +event.getInfo() +" Cluster Message " +"for " +event.getDuName() +" [" +nodeID +"]");
                 _clusterProcessStore.deployProcesses(duName);
             }
         }
 
         else if (message instanceof ProcessStoreUndeployedEvent) {
             ProcessStoreUndeployedEvent event = (ProcessStoreUndeployedEvent) message;
-
-            if (!_hazelcastInstance.getCluster().getLocalMember().getUuid().equals(event.getUuid())) {
+            String eventUuid =  event.getUuid();
+            if (!uuid.equals(eventUuid)) {
                 String duName = event.getDuName();
-                __log.info("Receive " +event.getInfo() +"Cluster Message " +"for " +event.getDuName());
+                __log.info("Receive " +event.getInfo() +"  Cluster Message " +"for " +event.getDuName() +" [" +nodeID +"]");
                 _clusterProcessStore.undeployProcesses(duName);
             }
         }


[16/30] ode git commit: Initialization of cluster enabled instance lock manager

Posted by sa...@apache.org.
Initialization of cluster enabled instance lock manager


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

Branch: refs/heads/ODE-563
Commit: 94f19ed6168b81b8db067bd510c3a7e99aaecc28
Parents: 224dc21
Author: suba <su...@cse.mrt.ac.lk>
Authored: Wed Jul 8 11:30:17 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Wed Jul 8 11:30:17 2015 +0530

----------------------------------------------------------------------
 .../java/org/apache/ode/axis2/ODEServer.java    |  10 +-
 .../ode/axis2/deploy/DeploymentPoller.java      |  10 +-
 .../ode/axis2/service/DeploymentWebService.java |  10 +-
 .../org/apache/ode/bpel/clapi/ClusterLock.java  |  43 +++++++-
 .../apache/ode/bpel/clapi/ClusterManager.java   |  35 ++----
 .../engine/AbstractInstanceLockManager.java     |  38 +++++++
 .../apache/ode/bpel/engine/BpelEngineImpl.java  |   8 +-
 .../hazelcast/HazelcastClusterImpl.java         |  49 ++++-----
 .../hazelcast/HazelcastDeploymentLock.java      |  60 ++++++++++
 .../hazelcast/HazelcastInstanceLock.java        | 109 +++++++++++++++++++
 10 files changed, 298 insertions(+), 74 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
index 9b133fc..34e245a 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
@@ -384,8 +384,14 @@ public class ODEServer {
             }
 
             if (_clusterManager != null) {
-                __log.debug("shutting down cluster manager.");
-                _clusterManager = null;
+                try {
+                    __log.debug("shutting down cluster manager.");
+                    _clusterManager.shutdown();
+                    _clusterManager = null;
+                } catch (Exception ex) {
+                    __log.debug("Cluster manager shutdown failed.", ex);
+
+                }
             }
 
             if (_connector != null) {

http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index 7912db6..98f5f82 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -41,7 +41,7 @@ package org.apache.ode.axis2.deploy;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.ode.axis2.ODEServer;
-import org.apache.ode.bpel.clapi.ClusterManager;
+import org.apache.ode.bpel.clapi.ClusterLock;
 import org.apache.ode.bpel.engine.cron.CronScheduler;
 import org.apache.ode.bpel.engine.cron.SystemSchedulesConfig;
 import org.apache.ode.utils.WatchDog;
@@ -367,16 +367,16 @@ public class DeploymentPoller {
      */
     private boolean pollerTryLock(String key) {
         if(clusterEnabled) {
-            ClusterManager cm = _odeServer.getBpelServer().getContexts().clusterManager;
-            cm.putIfAbsent(key,key);
-            return _odeServer.getBpelServer().getContexts().clusterManager.tryLock(key);
+            ClusterLock clusterLock = _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock();
+            clusterLock.putIfAbsent(key,key);
+            return clusterLock.tryLockMap(key);
         }
         else return true;
     }
 
     private boolean unlock(String key) {
         if(clusterEnabled) {
-            return _odeServer.getBpelServer().getContexts().clusterManager.unlock(key);
+            return _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock().unlockMap(key);
         }
         else return true;
     }

http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
index 66221dc..7e4b347 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/service/DeploymentWebService.java
@@ -45,7 +45,7 @@ import org.apache.axiom.om.OMText;
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axis2.AxisFault;
-import org.apache.ode.bpel.clapi.ClusterManager;
+import org.apache.ode.bpel.clapi.ClusterLock;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.AxisOperation;
@@ -387,9 +387,9 @@ public class DeploymentWebService {
      */
     private boolean lock(String key) {
         if(clusterEnabled) {
-            ClusterManager cm = _odeServer.getBpelServer().getContexts().clusterManager;
-            cm.putIfAbsent(key,key);
-            return cm.lock(key);
+            ClusterLock clusterLock = _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock();
+            clusterLock.putIfAbsent(key,key);
+            return clusterLock.lockMap(key);
         }
         else return true;
     }
@@ -399,7 +399,7 @@ public class DeploymentWebService {
      */
     private boolean unlock(String key) {
         if(clusterEnabled) {
-            return _odeServer.getBpelServer().getContexts().clusterManager.unlock(key);
+            return _odeServer.getBpelServer().getContexts().clusterManager.getDeploymentLock().unlockMap(key);
         }
         else return true;
     }

http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
index ff17188..9eaf705 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterLock.java
@@ -1,5 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.ode.bpel.clapi;
 
+import java.util.concurrent.TimeUnit;
+
 public interface ClusterLock {
     /**
      * Acquire the lock for each file in the file system
@@ -7,7 +27,7 @@ public interface ClusterLock {
      * @param key
      * @return
      */
-    boolean lock(String key);
+    boolean lockMap(String key);
 
     /**
      * Release the lock acquired by each file
@@ -15,13 +35,28 @@ public interface ClusterLock {
      * @param key
      * @return
      */
-    boolean unlock(String key);
+    boolean unlockMap(String key);
+
+    /**
+     * Tries to acquire the lock for the specified key ant time period.
+     * @param key
+     * @return
+     */
+    boolean tryLockMap(String key);
 
     /**
-     * Tries to acquire the lock for the specified key.
      *
      * @param key
+     * @param time
+     * @param tu
      * @return
      */
-    boolean tryLock(String key);
+    boolean tryLockMap(String key, int time, TimeUnit tu);
+
+    /**
+     * Check whether the map has a value for given key, if absent put the value to map
+     * @param key
+     * @param keyVal
+     */
+    void putIfAbsent(String key, String keyVal);
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
index c57358c..6f610a4 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/clapi/ClusterManager.java
@@ -19,7 +19,6 @@
 package org.apache.ode.bpel.clapi;
 
 import java.io.File;
-import java.util.List;
 
 public interface ClusterManager {
 
@@ -30,31 +29,15 @@ public interface ClusterManager {
     void init(File file);
 
     /**
-     * Return whether the local member is Master or not
-     * @return
+     * shutdown the cluster instance
      */
-    boolean getIsMaster();
+    void shutdwon();
 
     /**
-     * Acquire the lock for each file in the file system
-     * @param key
-     * @return
-     */
-    boolean lock(String key);
-
-    /**
-     * Release the lock acquired by each file
-     * @param key
-     * @return
-     */
-    boolean unlock(String key);
-
-    /**
-     * Tries to acquire the lock for the specified key.
-     * @param key
+     * Return whether the local member is Master or not
      * @return
      */
-    boolean tryLock(String key);
+    boolean getIsMaster();
 
     /**
      * Set the Process Store object which uses for clustering
@@ -69,14 +52,10 @@ public interface ClusterManager {
     void publishProcessStoreClusterEvent(ProcessStoreClusterEvent clusterEvent);
 
     /**
-     * Check whether the map has a value for given key, if absent put the value to map
-     * @param key
-     * @param keyVal
-     */
-    void putIfAbsent(String key, String keyVal);
-
-    /**
      * Register the cluster for message listener
      */
     void registerClusterProcessStoreMessageListener();
+
+    ClusterLock getDeploymentLock();
+    ClusterLock getInstanceLock();
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/AbstractInstanceLockManager.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/AbstractInstanceLockManager.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/AbstractInstanceLockManager.java
new file mode 100644
index 0000000..a534e11
--- /dev/null
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/AbstractInstanceLockManager.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ode.bpel.engine;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Abstract class to implement an instance lock manager. Instance lock provide process instance isolation from
+ * concurrent access when entering jacob
+ */
+public abstract class AbstractInstanceLockManager {
+    abstract void unlock(Long iid);
+
+    abstract void lock(Long iid, int i, TimeUnit microseconds) throws InterruptedException,
+            TimeoutException;
+
+    /** Exception class indicating a time-out occured  while obtaining a lock. */
+    public static final class TimeoutException extends Exception {
+        private static final long serialVersionUID = 7247629086692580285L;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
index 19bf53e..81d8a4c 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
@@ -115,7 +115,7 @@ public class BpelEngineImpl implements BpelEngine {
     private SharedEndpoints _sharedEps;
 
     /** Manage instance-level locks. */
-    private final InstanceLockManager _instanceLockManager = new InstanceLockManager();
+    private final AbstractInstanceLockManager _instanceLockManager;
 
     final Contexts _contexts;
 
@@ -124,8 +124,14 @@ public class BpelEngineImpl implements BpelEngine {
 
     public BpelEngineImpl(Contexts contexts) {
         _contexts = contexts;
+        if(_contexts.clusterManager != null) {
+            _instanceLockManager = _contexts.clusterManager.getInstanceLock();
+        }
+
+        else _instanceLockManager = new InstanceLockManager();
         _sharedEps = new SharedEndpoints();
         _sharedEps.init();
+
     }
 
     public SharedEndpoints getSharedEndpoints() {

http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index 11e1313..aa24947 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -43,9 +43,12 @@ public class HazelcastClusterImpl implements ClusterManager {
     private String nodeID;
     private String uuid;
     private Member leader;
-    private IMap<String, String> lock_map;
+    private IMap<String, String> deployment_lock_map;
+    private IMap<String, String> instance_lock_map;
     private ITopic<ProcessStoreClusterEvent> clusterMessageTopic;
     private ClusterProcessStore _clusterProcessStore;
+    private ClusterLock _hazelcastDeploymentLock;
+    private ClusterLock _hazelcastInstanceLock;
 
     public void init(File configRoot) {
 
@@ -74,37 +77,13 @@ public class HazelcastClusterImpl implements ClusterManager {
             uuid = localMember.getUuid();
             __log.info("Registering HZ localMember ID " + nodeID);
             markAsMaster();
-            lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_LOCK);
+            deployment_lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_DEPLOYMENT_LOCK);
+            instance_lock_map = _hazelcastInstance.getMap(HazelcastConstants.ODE_CLUSTER_PROCESS_INSTANCE_LOCK);
             clusterMessageTopic = _hazelcastInstance.getTopic(HazelcastConstants.ODE_CLUSTER_MSG);
-        }
-    }
-
-    public void putIfAbsent(String key, String keyVal) {
-        lock_map.putIfAbsent(key, keyVal);
-    }
-
-    public boolean lock(String key) {
-        lock_map.lock(key);
-        if (__log.isDebugEnabled()) {
-        __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + true);
-        }
-        return true;
-    }
-
-    public boolean unlock(String key) {
-        lock_map.unlock(key);
-        if (__log.isDebugEnabled()) {
-        __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + false);
-        }
-        return true;
-    }
 
-    public boolean tryLock(String key) {
-        boolean state = lock_map.tryLock(key);
-        if (__log.isDebugEnabled()) {
-        __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
+            _hazelcastDeploymentLock = (ClusterLock) new HazelcastDeploymentLock(deployment_lock_map);
+            _hazelcastInstanceLock = (ClusterLock) new HazelcastInstanceLock(instance_lock_map);
         }
-        return state;
     }
 
     class ClusterMemberShipListener implements MembershipListener {
@@ -181,5 +160,17 @@ public class HazelcastClusterImpl implements ClusterManager {
     public void registerClusterProcessStoreMessageListener() {
         clusterMessageTopic.addMessageListener(new ClusterMessageListener());
     }
+
+    public void shutdown() {
+        if(_hazelcastInstance != null) _hazelcastInstance.getLifecycleService().shutdown();
+    }
+
+    public ClusterLock getDeplymentLock(){
+        return _hazelcastDeploymentLock;
+    }
+
+    public ClusterLock getInstanceLock(){
+        return _hazelcastInstanceLock;
+    }
 }
 

http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
new file mode 100644
index 0000000..4d0aac1
--- /dev/null
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastDeploymentLock.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ode.clustering.hazelcast;
+
+import com.hazelcast.core.IMap;
+import org.apache.ode.bpel.clapi.ClusterLock;
+
+public class HazelcastDeploymentLock implements ClusterLock{
+    private static final Log __log = LogFactory.getLog(HazelcastDeploymentLock.class);
+
+    private IMap<String, String> _lock_map;
+
+    HazelcastDeploymentLock(IMap<String, String> lock_map) {
+        _lock_map = lock_map;
+    }
+
+    public void putIfAbsent(String key, String keyVal) {
+        _lock_map.putIfAbsent(key, keyVal);
+    }
+
+    public boolean lockMap(String key) {
+        _lock_map.lock(key);
+        if (__log.isDebugEnabled()) {
+            __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + true);
+        }
+        return true;
+    }
+
+    public boolean unlockMap(String key) {
+        _lock_map.unlock(key);
+        if (__log.isDebugEnabled()) {
+            __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + false);
+        }
+        return true;
+    }
+
+    public boolean tryLockMap(String key) {
+        boolean state = _lock_map.tryLock(key);
+        if (__log.isDebugEnabled()) {
+            __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
+        }
+        return state;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/94f19ed6/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
new file mode 100644
index 0000000..3b8ab41
--- /dev/null
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastInstanceLock.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ode.clustering.hazelcast;
+
+import com.hazelcast.core.IMap;
+import org.apache.ode.bpel.clapi.ClusterLock;
+import org.apache.ode.bpel.engine.AbstractInstnaceLockManager;
+
+import java.util.concurrent.TimeUnit;
+
+public class HazelcastInstanceLock extends AbstractInstnaceLockManager implements ClusterLock {
+    private static final Log __log = LogFactory.getLog(HazelcastInstanceLock.class);
+
+    private IMap<String, String> _lock_map;
+
+
+    HazelcastInstanceLock(IMap<String, String> lock_map) {
+        _lock_map = lock_map;
+    }
+
+    private void putIfAbsent(String key, String keyVal) {
+        _lock_map.putIfAbsent(key, keyVal);
+    }
+
+    public void lock(Long iid, int time, TimeUnit tu) throws InterruptedException,
+            AbstractInstanceLockManager.TimeoutException {
+        if (iid == null) {
+            if(__log.isDebugEnabled()) {
+                __log.debug(" Instance Id null at lock[]");
+            }
+            return;
+        }
+
+        String thrd = Thread.currentThread().toString();
+
+        if(__log.isDebugEnabled()) {
+            __log.debug(thrd + ": lock(iid=" + iid + ", time=" + time + tu + ")");
+        }
+
+        putIfAbsent(iid.toString(),iid.toString());
+
+        if (!tryLockMap(iid.toString(),time, tu)) {
+
+            if(__log.isDebugEnabled()) {
+                __log.debug(thrd + ": lock(iid=" + iid + ", " +
+                        "time=" + time + tu + ")-->TIMEOUT");
+            }
+            throw new AbstractInstanceLockManager.TimeoutException();
+        }
+
+    }
+
+    public void unlock(Long iid) {
+        if (iid == null) {
+            if(__log.isDebugEnabled()) {
+                __log.debug(" unlock, instance id is null");
+            }
+            return;
+        }
+
+        String thrd = Thread.currentThread().toString();
+
+        unlockMap(iid.toString());
+
+        if(__log.isDebugEnabled()) {
+            __log.debug(thrd + " unlock(iid=" + iid + ")");
+        }
+    }
+
+    private boolean lockMap(String key) {
+        _lock_map.lock(key);
+        return true;
+    }
+
+    private boolean unlockMap(String key) {
+        if (_lock_map.get(key) == "true") {
+            _lock_map.unlock(key);
+            _lock_map.replace(key,"false");
+        }
+        return true;
+    }
+
+    private boolean tryLockMap(String key) {
+        boolean state = _lock_map.tryLock(key);
+        return state;
+    }
+
+    private boolean tryLockMap(String key,int time, TimeUnit tu) {
+        boolean state = _lock_map.tryLock(key,time,tu);
+        _lock_map.replace(key,"" +state);
+        return state;
+    }
+}


[03/30] ode git commit: Third commit

Posted by sa...@apache.org.
Third commit


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

Branch: refs/heads/ODE-563
Commit: 764bf642f5b37f134ca6a4c505a80f7b0d81d1f2
Parents: 79c0b16
Author: suba <su...@cse.mrt.ac.lk>
Authored: Tue Jun 9 23:29:43 2015 +0530
Committer: suba <su...@cse.mrt.ac.lk>
Committed: Tue Jun 9 23:29:43 2015 +0530

----------------------------------------------------------------------
 .../org/apache/ode/axis2/deploy/DeploymentPoller.java |  8 ++++----
 .../clustering/hazelcast/HazelcastClusterImpl.java    | 14 ++++++++++++--
 2 files changed, 16 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/764bf642/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
----------------------------------------------------------------------
diff --git a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
index 057c0fb..25d7f20 100644
--- a/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
+++ b/axis2/src/main/java/org/apache/ode/axis2/deploy/DeploymentPoller.java
@@ -341,15 +341,15 @@ public class DeploymentPoller {
     //Implementation of IMap key Lock
     public boolean lock(String key) {
         if(clusterEnabled) {
-            _odeServer.getBpelServer().getContexts().hazelcastClusterImpl.lock(key);
+            return _odeServer.getBpelServer().getContexts().hazelcastClusterImpl.lock(key);
         }
-        return true;
+        else return true;
     }
 
     public boolean unlock(String key) {
         if(clusterEnabled) {
-            _odeServer.getBpelServer().getContexts().hazelcastClusterImpl.unlock(key);
+            return _odeServer.getBpelServer().getContexts().hazelcastClusterImpl.unlock(key);
         }
-        return true;
+        else return true;
     }
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/764bf642/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
----------------------------------------------------------------------
diff --git a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
index 2cff4c8..c387b74 100644
--- a/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
+++ b/clustering/src/main/java/org/apache/ode/clustering/hazelcast/HazelcastClusterImpl.java
@@ -69,12 +69,22 @@ public class HazelcastClusterImpl implements HazelcastCluster{
         return hostName + ":" + port;
     }
 
-    public void lock(String key) {
+    public boolean lock(String key) {
         lock_map.lock(key);
+        boolean state = lock_map.isLocked(key);
+        if (__log.isDebugEnabled()) {
+        __log.debug ("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after locking: " + state);
+        }
+        return state;
     }
 
-    public void unlock(String key) {
+    public boolean unlock(String key) {
         lock_map.unlock(key);
+        boolean state = lock_map.isLocked(key);
+        if (__log.isDebugEnabled()) {
+        __log.debug("ThreadID:" + Thread.currentThread().getId() + " duLocked value for " + key + " file" + " after unlocking: " + state);
+        }
+        return state;
     }
 
     class ClusterMemberShipListener implements MembershipListener {