Author: uswick
Date: Mon Feb 6 07:24:57 2012
New Revision: 1240901
URL: http://svn.apache.org/viewvc?rev=1240901&view=rev
Log:
committing synapse lib changes wrt classloading. enable to load lib based
classes on demand
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/xml/ClassMediatorFactory.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/LibraryArtifactDeployer.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/ArtifactFile.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/Library.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/LibraryArtifact.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/SynapseLibrary.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/util/LibDeployerUtils.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=1240901&r1=1240900&r2=1240901&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
Mon Feb 6 07:24:57 2012
@@ -135,6 +135,9 @@ public final class SynapseConstants {
public static final String SYNAPSE_XML = "synapse.xml";
/** The name of the system property used to specify/override the Synapse
properties location */
public static final String SYNAPSE_PROPERTIES = "synapse.properties";
+
+ /** the name of the property used for synapse library based class loading
*/
+ public static final String SYNAPSE_LIB_LOADER = "synapse.lib.classloader";
/** conf directory name **/
public static final String CONF_DIRECTORY = "conf";
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ClassMediatorFactory.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ClassMediatorFactory.java?rev=1240901&r1=1240900&r2=1240901&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ClassMediatorFactory.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/ClassMediatorFactory.java
Mon Feb 6 07:24:57 2012
@@ -23,6 +23,7 @@ import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMNode;
import org.apache.synapse.Mediator;
+import org.apache.synapse.SynapseConstants;
import org.apache.synapse.SynapseException;
import org.apache.synapse.commons.util.PropertyHelper;
import org.apache.synapse.mediators.ext.ClassMediator;
@@ -59,7 +60,13 @@ public class ClassMediatorFactory extend
Class clazz = null;
Mediator m = null;
try {
- clazz = getClass().getClassLoader().loadClass(
+ ClassLoader classMediatorLoader = null;
+ if(properties != null){
+ classMediatorLoader = (ClassLoader)
properties.get(SynapseConstants.SYNAPSE_LIB_LOADER);
+ }
+ classMediatorLoader = classMediatorLoader != null ?
classMediatorLoader :
+ getClass().getClassLoader();
+ clazz = classMediatorLoader.loadClass(
name.getAttributeValue());
m = (Mediator) clazz.newInstance();
} catch (Exception e) {
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/LibraryArtifactDeployer.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/LibraryArtifactDeployer.java?rev=1240901&r1=1240900&r2=1240901&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/LibraryArtifactDeployer.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/LibraryArtifactDeployer.java
Mon Feb 6 07:24:57 2012
@@ -18,7 +18,6 @@
package org.apache.synapse.deployers;
import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMException;
import org.apache.axis2.deployment.DeploymentException;
import org.apache.axis2.deployment.repository.util.DeploymentFileData;
import org.apache.commons.io.FilenameUtils;
@@ -27,7 +26,6 @@ import org.apache.commons.logging.LogFac
import org.apache.synapse.ServerState;
import org.apache.synapse.libraries.imports.SynapseImport;
import org.apache.synapse.libraries.model.Library;
-import org.apache.synapse.libraries.model.SynapseLibrary;
import org.apache.synapse.libraries.util.LibDeployerUtils;
import java.io.File;
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/ArtifactFile.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/ArtifactFile.java?rev=1240901&r1=1240900&r2=1240901&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/ArtifactFile.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/ArtifactFile.java
Mon Feb 6 07:24:57 2012
@@ -27,6 +27,7 @@ import org.apache.synapse.deployers.Syna
import javax.xml.stream.XMLStreamException;
import java.io.*;
+import java.util.Properties;
public abstract class ArtifactFile {
@@ -38,6 +39,8 @@ public abstract class ArtifactFile {
public abstract Object build();
+ protected Properties properties;
+
public ArtifactFile(String fileXmlPath){
fileName = fileXmlPath;
File f = new File(fileXmlPath);
@@ -63,5 +66,11 @@ public abstract class ArtifactFile {
}
}
+ public OMElement getConfigurationElement(){
+ return configurationElement;
+ }
+ public void setProperties(Properties properties) {
+ this.properties = properties;
+ }
}
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/Library.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/Library.java?rev=1240901&r1=1240900&r2=1240901&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/Library.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/Library.java
Mon Feb 6 07:24:57 2012
@@ -68,5 +68,11 @@ public interface Library extends Synapse
*/
public boolean unLoadLibrary();
+ /**
+ *
+ * @return the Class loader that can be used to load classes/resources
under this library
+ */
+ public ClassLoader getLibClassLoader();
+
}
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/LibraryArtifact.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/LibraryArtifact.java?rev=1240901&r1=1240900&r2=1240901&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/LibraryArtifact.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/LibraryArtifact.java
Mon Feb 6 07:24:57 2012
@@ -95,6 +95,7 @@ public class LibraryArtifact implements
for (String artifactName : subArtifacts.keySet()) {
LibraryArtifact artifact = subArtifacts.get(artifactName);
if (artifact.isLeafArtifact()) {
+ delegateClassLoading(artifact, library);
//this is where actual artifact is constructed to it's ture
form
Object template = artifact.file.build();
if (artifact.file instanceof TemplateArtifactFile) {
@@ -120,6 +121,12 @@ public class LibraryArtifact implements
}
}
+ private void delegateClassLoading(LibraryArtifact artifact, SynapseLibrary
library) {
+ Properties classLoadingProperties = new Properties();
+ classLoadingProperties.put(SynapseConstants.SYNAPSE_LIB_LOADER,
library.getLibClassLoader());
+ artifact.file.setProperties(classLoadingProperties);
+ }
+
private String getQualifiedName(String aPackage, String templateName) {
return aPackage + "." + templateName;
}
@@ -168,7 +175,7 @@ public class LibraryArtifact implements
if (element != null) {
String name = element.getAttributeValue(new
QName(XMLConfigConstants.NULL_NAMESPACE, "name"));
try {
- templateObject =
MediatorFactoryFinder.getInstance().getMediator(configurationElement, new
Properties());
+ templateObject =
MediatorFactoryFinder.getInstance().getMediator(configurationElement,
properties);
} catch (Exception e) {
String msg = "Template configuration : " + name + " cannot
be built" +
"for Synapse Library artifact : " +
LibraryArtifact.this.name;;
@@ -185,7 +192,7 @@ public class LibraryArtifact implements
"name"));
try {
templateObject =
templateFactory.createEndpointTemplate(configurationElement,
-
new Properties());
+
properties);
} catch (Exception e) {
String msg = "Endpoint Template: " + name +
"configuration cannot be built " +
"for Synapse Library artifact : " +
LibraryArtifact.this.name;
@@ -213,7 +220,7 @@ public class LibraryArtifact implements
}
public boolean resolveWith(LibraryArtifact artifact) {
- return markAsResolved == name.equals(artifact.name);
+ return markAsResolved = name.equals(artifact.name);
}
public boolean isResolved() {
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/SynapseLibrary.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/SynapseLibrary.java?rev=1240901&r1=1240900&r2=1240901&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/SynapseLibrary.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/model/SynapseLibrary.java
Mon Feb 6 07:24:57 2012
@@ -44,6 +44,8 @@ public class SynapseLibrary implements L
private boolean isLoaded = false;
+ private ClassLoader libClassLoader = null ;
+
public SynapseLibrary(String name, String packageName) {
this.packageN = packageName;
if (packageName != null && !"".equals(packageName)) {
@@ -144,6 +146,10 @@ public class SynapseLibrary implements L
return true;
}
+ public ClassLoader getLibClassLoader() {
+ return libClassLoader; //To change body of implemented methods use
File | Settings | File Templates.
+ }
+
public void clear() {
depNameToArtifactIndex.clear();
libArtifactDetails.clear();
@@ -178,4 +184,8 @@ public class SynapseLibrary implements L
public String getDescription() {
return description;
}
+
+ public void setLibClassLoader(ClassLoader libClassLoader) {
+ this.libClassLoader = libClassLoader;
+ }
}
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/util/LibDeployerUtils.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/util/LibDeployerUtils.java?rev=1240901&r1=1240900&r2=1240901&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/util/LibDeployerUtils.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/libraries/util/LibDeployerUtils.java
Mon Feb 6 07:24:57 2012
@@ -21,6 +21,8 @@ package org.apache.synapse.libraries.uti
import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axis2.deployment.DeploymentException;
+import org.apache.axis2.deployment.util.Utils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.SynapseException;
@@ -58,7 +60,18 @@ public class LibDeployerUtils {
//extract
String extractPath = LibDeployerUtils.extractSynapseLib(libFilePath);
//create synapse lib metadata
- SynapseLibrary synapseLib =
LibDeployerUtils.populateDependencies(extractPath +
LibDeployerConstants.ARTIFACTS_XML);
+ SynapseLibrary synapseLib =
LibDeployerUtils.populateDependencies(extractPath +
+
LibDeployerConstants.ARTIFACTS_XML);
+
+ //create a ClassLoader for loading this synapse lib classes/resources
+ try {
+ ClassLoader libLoader =
Utils.getClassLoader(LibDeployerUtils.class.getClassLoader(),
+ extractPath, false);
+ synapseLib.setLibClassLoader(libLoader);
+ } catch (DeploymentException e) {
+ throw new SynapseArtifactDeploymentException("Error setting up lib
classpath for Synapse" +
+ " Library : " +
libFilePath, e);
+ }
//resolve synapse lib artifacts
LibDeployerUtils.searchAndResolveDependencies(extractPath, synapseLib);
return synapseLib;