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);
+ }
}