Author: indika
Date: Fri Jan  9 09:12:58 2009
New Revision: 733089

URL: http://svn.apache.org/viewvc?rev=733089&view=rev
Log:
fix reloading issue after cache expired for endpoint in the regsitry

add host and ip as entries so that using get-property function can access sever 
host and ip 

add check for auto commit prior to call commit 



Modified:
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseInitializationModule.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/IndirectEndpoint.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/DBReportMediator.java
    
synapse/trunk/java/modules/utils/src/main/java/org/apache/synapse/commons/util/datasource/factory/DataSourceFactory.java

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java?rev=733089&r1=733088&r2=733089&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
 Fri Jan  9 09:12:58 2009
@@ -305,6 +305,11 @@
    
     public static String SYNAPSE_STARTUP_TASK_DESCRIPTIONS_REPOSITORY = 
"synapse.startup.taskdescriptions.repository";
 
+    // host and ip synapse is running 
+    public static String SERVER_HOST = "SERVER_HOST";
+
+    public static String SERVER_IP = "SERVER_IP";
+
     // Known transport error codes
     public static final int RCV_IO_ERROR_SENDING     = 101000;
     public static final int RCV_IO_ERROR_RECEIVING   = 101001;
@@ -333,4 +338,7 @@
     public static final int ENDPOINT_LB_FAIL_OVER    = 303100;
     public static final int ENDPOINT_FO_FAIL_OVER    = 304100;
 
+    // referring real endpoint is null
+    public static final int ENDPOINT_IN_DIRECT_NOT_READY = 305100;
+
 }

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java?rev=733089&r1=733088&r2=733089&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java
 Fri Jan  9 09:12:58 2009
@@ -60,7 +60,7 @@
         * The remote registry made available to the Synapse configuration. 
Only one
         * is supported
         */
-       Registry registry = null;
+       private Registry registry = null;
 
     /**
      * This holds the default QName of the configuration.
@@ -193,21 +193,24 @@
         * @return the sequence referenced by the key
         */
        public Mediator getSequence(String key) {
-               Object o = localRegistry.get(key);
+        Object o = getEntry(key);
                if (o != null && o instanceof Mediator) {
                        return (Mediator) o;
                }
 
-               Entry entry;
-               if (o != null && o instanceof Entry) {
-                       entry = (Entry) o;
-               } else {
-                       entry = new Entry(key);
-                       entry.setType(Entry.REMOTE_ENTRY);
-                       entry.setMapper(MediatorFactoryFinder.getInstance());
-               }
+        Entry entry;
+        if (o != null && o instanceof Entry) {
+            entry = (Entry) o;
+            if (entry.getMapper() == null) {
+                entry.setMapper(MediatorFactoryFinder.getInstance());
+            }
+        } else {
+            entry = new Entry(key);
+            entry.setType(Entry.REMOTE_ENTRY);
+            entry.setMapper(MediatorFactoryFinder.getInstance());
+        }
 
-               if (registry != null) {
+        if (registry != null) {
                        o = registry.getResource(entry);
                        if (o != null && o instanceof Mediator) {
                                localRegistry.put(key, entry);
@@ -369,10 +372,12 @@
                                return entry;
                        }
                        return (Entry) o;
-               } else {
-                       handleException("Invalid local registry entry : " + 
key);
-                       return null;
-               }
+        } else {
+            if (log.isDebugEnabled()) {
+                log.debug("There is no local registry entry for key : " + key);
+            }
+            return null;
+        }
        }
 
        /**
@@ -392,7 +397,7 @@
      */
     public void clearCachedEntry(String key) {
         Entry entry = getEntryDefinition(key);
-        if (entry.isDynamic() && entry.isCached()) {
+        if (entry != null && entry.isDynamic() && entry.isCached()) {
             entry.clearCache();
         }
     }
@@ -466,22 +471,25 @@
         * @return the endpoint definition
         */
        public Endpoint getEndpoint(String key) {
-        
-        Object o = localRegistry.get(key);
+
+        Object o = getEntry(key);
                if (o != null && o instanceof Endpoint) {
                        return (Endpoint) o;
                }
 
-               Entry entry;
-               if (o != null && o instanceof Entry) {
-                       entry = (Entry) o;
-               } else {
-                       entry = new Entry(key);
-                       entry.setType(Entry.REMOTE_ENTRY);
-                       entry.setMapper(XMLToEndpointMapper.getInstance());
-               }
+        Entry entry;
+        if (o != null && o instanceof Entry) {
+            entry = (Entry) o;
+            if (entry.getMapper() == null) {
+                entry.setMapper(XMLToEndpointMapper.getInstance());
+            }
+        } else {
+            entry = new Entry(key);
+            entry.setType(Entry.REMOTE_ENTRY);
+            entry.setMapper(XMLToEndpointMapper.getInstance());
+        }
 
-               if (registry != null) {
+        if (registry != null) {
                        o = registry.getResource(entry);
                        if (o != null && o instanceof Endpoint) {
                                localRegistry.put(key, entry);

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseInitializationModule.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseInitializationModule.java?rev=733089&r1=733088&r2=733089&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseInitializationModule.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseInitializationModule.java
 Fri Jan  9 09:12:58 2009
@@ -39,6 +39,7 @@
 import org.apache.synapse.config.SynapseConfiguration;
 import org.apache.synapse.config.SynapseConfigurationBuilder;
 import org.apache.synapse.config.SynapsePropertiesLoader;
+import org.apache.synapse.config.Entry;
 import org.apache.synapse.eventing.SynapseEventSource;
 
 import java.net.InetAddress;
@@ -59,25 +60,27 @@
     public void init(ConfigurationContext configurationContext,
                      AxisModule axisModule) throws AxisFault {
 
+        String ipAddress = "";
+        String hostName = "";
         log.info("Initializing Synapse at : " + new Date());
         try {
             InetAddress addr = InetAddress.getLocalHost();
             if (addr != null) {
                 // Get IP Address
-                String ipAddr = addr.getHostAddress();
-                if (ipAddr != null) {
-                    MDC.put("ip", ipAddr);
+                ipAddress = addr.getHostAddress();
+                if (ipAddress != null) {
+                    MDC.put("ip", ipAddress);
                 }
 
-                // Get hostname
-                String hostname = addr.getHostName();
-                if (hostname == null) {
-                    hostname = ipAddr;
+                // Get hostName
+                hostName = addr.getHostName();
+                if (hostName == null) {
+                    hostName = ipAddress;
                 }
-                MDC.put("host", hostname);
+                MDC.put("host", hostName);
             }
         } catch (UnknownHostException e) {
-            log.warn("Unable to determine hostname or IP address of the server 
for logging", e);
+            log.warn("Unable to determine hostName or IP address of the server 
for logging", e);
         }
 
         // incase of an existing running axis2 instance is used to deploy 
synapse
@@ -95,6 +98,18 @@
         log.info("Initializing the Synapse configuration ...");
         synCfg = getConfiguration(configurationContext);
 
+        if (hostName != null && !"".equals(hostName)) {
+            Entry entry = new Entry(SynapseConstants.SERVER_HOST);
+            entry.setValue(hostName);
+            synCfg.addEntry(SynapseConstants.SERVER_HOST, entry);
+        }
+
+        if (ipAddress != null && !"".equals(ipAddress)) {
+            Entry entry = new Entry(SynapseConstants.SERVER_IP);
+            entry.setValue(ipAddress);
+            synCfg.addEntry(SynapseConstants.SERVER_IP, entry);
+        }
+        
         log.info("Deploying the Synapse service..");
         // Dynamically initialize the Synapse Service and deploy it into Axis2
         AxisConfiguration axisCfg = 
configurationContext.getAxisConfiguration();

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/IndirectEndpoint.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/IndirectEndpoint.java?rev=733089&r1=733088&r2=733089&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/IndirectEndpoint.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/IndirectEndpoint.java
 Fri Jan  9 09:12:58 2009
@@ -23,7 +23,9 @@
 import org.apache.axis2.description.Parameter;
 import org.apache.synapse.MessageContext;
 import org.apache.synapse.SynapseConstants;
+import org.apache.synapse.core.axis2.Axis2MessageContext;
 import org.apache.synapse.config.SynapseConfiguration;
+import org.apache.synapse.config.Entry;
 
 import java.util.List;
 
@@ -41,7 +43,15 @@
      * @param synCtx the message to send
      */
     public void send(MessageContext synCtx) {
-        realEndpoint.send(synCtx);
+
+        reLoadAndInitEndpoint(((Axis2MessageContext) 
synCtx).getAxis2MessageContext().getConfigurationContext());
+
+        if (realEndpoint != null) {
+            realEndpoint.send(synCtx);
+        } else {
+            informFailure(synCtx, 
SynapseConstants.ENDPOINT_IN_DIRECT_NOT_READY,
+                    "Couldn't find the endpoint with the key : " + key);
+        }
     }
 
     public String getKey() {
@@ -89,21 +99,47 @@
      * Figure out the real endpoint we proxy for, and make sure its initialized
      */
     public synchronized void init(ConfigurationContext cc) {
-        Parameter param = 
cc.getAxisConfiguration().getParameter(SynapseConstants.SYNAPSE_CONFIG);
-        if (param != null && param.getValue() instanceof SynapseConfiguration) 
{
-            SynapseConfiguration synCfg = (SynapseConfiguration) 
param.getValue();
-            realEndpoint = synCfg.getEndpoint(key);
-        }
-        if (realEndpoint == null) {
-            handleException("Unable to load endpoint with key : " + key);
-        }
-        if (!realEndpoint.isInitialized()) {
-            realEndpoint.init(cc);
-        }
+       reLoadAndInitEndpoint(cc);
     }
 
     @Override
     public String toString() {
         return "[Indirect Endpoint [ " + key + "]]";
     }
+
+    /**
+     * Reload as needed , either from registry , local entries or predefined 
endpoints 
+     * @param cc ConfigurationContext
+     */
+    private synchronized void reLoadAndInitEndpoint(ConfigurationContext cc) {
+
+        Parameter parameter = 
cc.getAxisConfiguration().getParameter(SynapseConstants.SYNAPSE_CONFIG);
+        if (parameter != null && parameter.getValue() instanceof 
SynapseConfiguration) {
+            SynapseConfiguration synCfg = (SynapseConfiguration) 
parameter.getValue();
+
+            boolean reLoad = (realEndpoint == null);
+            if (!reLoad) {
+
+                Entry entry = synCfg.getEntryDefinition(key);
+                if (entry != null && entry.isDynamic()) {
+
+                    if (!entry.isCached() || entry.isExpired()) {
+                        reLoad = true;
+                    }
+                }
+            }
+
+            if (reLoad) {
+
+                if (log.isDebugEnabled()) {
+                    log.debug("Loading real endpoint with key : " + key);
+                }
+
+                realEndpoint = synCfg.getEndpoint(key);
+                if (realEndpoint != null && !realEndpoint.isInitialized()) {
+                    realEndpoint.init(cc);
+                }
+            }
+        }
+    }
 }

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/DBReportMediator.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/DBReportMediator.java?rev=733089&r1=733088&r2=733089&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/DBReportMediator.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/DBReportMediator.java
 Fri Jan  9 09:12:58 2009
@@ -52,7 +52,10 @@
                         "No rows were inserted for statement : " + 
stmnt.getRawStatement());
                 }
             }
-            con.commit();
+            
+            if (!con.getAutoCommit()) {
+                con.commit();
+            }
 
         } catch (SQLException e) {
             handleException("Error execuring insert statement : " + 
stmnt.getRawStatement() +

Modified: 
synapse/trunk/java/modules/utils/src/main/java/org/apache/synapse/commons/util/datasource/factory/DataSourceFactory.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/utils/src/main/java/org/apache/synapse/commons/util/datasource/factory/DataSourceFactory.java?rev=733089&r1=733088&r2=733089&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/utils/src/main/java/org/apache/synapse/commons/util/datasource/factory/DataSourceFactory.java
 (original)
+++ 
synapse/trunk/java/modules/utils/src/main/java/org/apache/synapse/commons/util/datasource/factory/DataSourceFactory.java
 Fri Jan  9 09:12:58 2009
@@ -133,7 +133,7 @@
             try {
                 adapterCPDS.setDriver(driver);
             } catch (ClassNotFoundException e) {
-                handleException("Error setting driver : " + driver + " 
DriverAdapterCPDS");
+                handleException("Error setting driver : " + driver + " in 
DriverAdapterCPDS", e);
             }
 
             adapterCPDS.setUrl(url);
@@ -191,4 +191,9 @@
         log.error(msg);
         throw new SynapseUtilException(msg);
     }
+
+    private static void handleException(String msg, Throwable throwable) {
+        log.error(msg, throwable);
+        throw new SynapseUtilException(msg, throwable);
+    }
 }


Reply via email to