You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2013/12/05 00:42:37 UTC
svn commit: r1547965 - in /manifoldcf/branches/CONNECTORS-781/framework:
agents/src/main/java/org/apache/manifoldcf/agents/interfaces/
agents/src/main/java/org/apache/manifoldcf/agents/outputconnectorpool/
core/src/main/java/org/apache/manifoldcf/core/...
Author: kwright
Date: Wed Dec 4 23:42:37 2013
New Revision: 1547965
URL: http://svn.apache.org/r1547965
Log:
Peel out pool logic from OutputConnectorFactory and embed it locally in OutputConnectorPool.
Modified:
manifoldcf/branches/CONNECTORS-781/framework/agents/src/main/java/org/apache/manifoldcf/agents/interfaces/OutputConnectorFactory.java
manifoldcf/branches/CONNECTORS-781/framework/agents/src/main/java/org/apache/manifoldcf/agents/outputconnectorpool/OutputConnectorPool.java
manifoldcf/branches/CONNECTORS-781/framework/core/src/main/java/org/apache/manifoldcf/core/connectorpool/ConnectorPool.java
manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/editjob.jsp
manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/execute.jsp
manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/viewjob.jsp
manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/viewoutput.jsp
Modified: manifoldcf/branches/CONNECTORS-781/framework/agents/src/main/java/org/apache/manifoldcf/agents/interfaces/OutputConnectorFactory.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-781/framework/agents/src/main/java/org/apache/manifoldcf/agents/interfaces/OutputConnectorFactory.java?rev=1547965&r1=1547964&r2=1547965&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-781/framework/agents/src/main/java/org/apache/manifoldcf/agents/interfaces/OutputConnectorFactory.java (original)
+++ manifoldcf/branches/CONNECTORS-781/framework/agents/src/main/java/org/apache/manifoldcf/agents/interfaces/OutputConnectorFactory.java Wed Dec 4 23:42:37 2013
@@ -135,73 +135,4 @@ public class OutputConnectorFactory exte
return thisFactory.getThisConnectorNoCheck(className);
}
- /** Get multiple output connectors, all at once. Do this in a particular order
- * so that any connector exhaustion will not cause a deadlock.
- */
- public static IOutputConnector[] grabMultiple(IThreadContext threadContext,
- String[] orderingKeys, String[] classNames, ConfigParams[] configInfos, int[] maxPoolSizes)
- throws ManifoldCFException
- {
- return thisFactory.grabThisMultiple(threadContext,IOutputConnector.class,orderingKeys,classNames,configInfos,maxPoolSizes);
- }
-
- /** Get an output connector.
- * The connector is specified by its class and its parameters.
- *@param threadContext is the current thread context.
- *@param className is the name of the class to get a connector for.
- *@param configInfo are the name/value pairs constituting configuration info
- * for this class.
- */
- public static IOutputConnector grab(IThreadContext threadContext,
- String className, ConfigParams configInfo, int maxPoolSize)
- throws ManifoldCFException
- {
- return thisFactory.grabThis(threadContext,className,configInfo,maxPoolSize);
- }
-
- /** Release multiple output connectors.
- */
- public static void releaseMultiple(IOutputConnector[] connectors)
- throws ManifoldCFException
- {
- thisFactory.releaseThisMultiple(connectors);
- }
-
- /** Release an output connector.
- *@param connector is the connector to release.
- */
- public static void release(IOutputConnector connector)
- throws ManifoldCFException
- {
- thisFactory.releaseThis(connector);
- }
-
- /** Idle notification for inactive output connector handles.
- * This method polls all inactive handles.
- */
- public static void pollAllConnectors(IThreadContext threadContext)
- throws ManifoldCFException
- {
- thisFactory.pollThisAllConnectors(threadContext);
- }
-
- /** Flush only those connector handles that are currently unused.
- */
- public static void flushUnusedConnectors(IThreadContext threadContext)
- throws ManifoldCFException
- {
- thisFactory.flushThisUnusedConnectors(threadContext);
- }
-
- /** Clean up all open output connector handles.
- * This method is called when the connector pool needs to be flushed,
- * to free resources.
- *@param threadContext is the local thread context.
- */
- public static void closeAllConnectors(IThreadContext threadContext)
- throws ManifoldCFException
- {
- thisFactory.closeThisAllConnectors(threadContext);
- }
-
}
Modified: manifoldcf/branches/CONNECTORS-781/framework/agents/src/main/java/org/apache/manifoldcf/agents/outputconnectorpool/OutputConnectorPool.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-781/framework/agents/src/main/java/org/apache/manifoldcf/agents/outputconnectorpool/OutputConnectorPool.java?rev=1547965&r1=1547964&r2=1547965&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-781/framework/agents/src/main/java/org/apache/manifoldcf/agents/outputconnectorpool/OutputConnectorPool.java (original)
+++ manifoldcf/branches/CONNECTORS-781/framework/agents/src/main/java/org/apache/manifoldcf/agents/outputconnectorpool/OutputConnectorPool.java Wed Dec 4 23:42:37 2013
@@ -32,6 +32,9 @@ public class OutputConnectorPool impleme
{
public static final String _rcsid = "@(#)$Id$";
+ /** Local connector pool */
+ protected final static LocalPool localPool = new LocalPool();
+
// This implementation is a place-holder for the real one, which will likely fold in the pooling code
// as we strip it out of OutputConnectorFactory.
@@ -66,7 +69,7 @@ public class OutputConnectorPool impleme
configInfos[i] = outputConnections[i].getConfigParams();
maxPoolSizes[i] = outputConnections[i].getMaxConnections();
}
- return OutputConnectorFactory.grabMultiple(threadContext,
+ return localPool.grabMultiple(threadContext,
orderingKeys, classNames, configInfos, maxPoolSizes);
}
@@ -78,7 +81,7 @@ public class OutputConnectorPool impleme
public IOutputConnector grab(IOutputConnection outputConnection)
throws ManifoldCFException
{
- return OutputConnectorFactory.grab(threadContext, outputConnection.getClassName(),
+ return localPool.grab(threadContext, outputConnection.getClassName(),
outputConnection.getConfigParams(), outputConnection.getMaxConnections());
}
@@ -89,7 +92,7 @@ public class OutputConnectorPool impleme
public void releaseMultiple(IOutputConnector[] connectors)
throws ManifoldCFException
{
- OutputConnectorFactory.releaseMultiple(connectors);
+ localPool.releaseMultiple(connectors);
}
/** Release an output connector.
@@ -99,7 +102,7 @@ public class OutputConnectorPool impleme
public void release(IOutputConnector connector)
throws ManifoldCFException
{
- OutputConnectorFactory.release(connector);
+ localPool.release(connector);
}
/** Idle notification for inactive output connector handles.
@@ -109,7 +112,7 @@ public class OutputConnectorPool impleme
public void pollAllConnectors()
throws ManifoldCFException
{
- OutputConnectorFactory.pollAllConnectors(threadContext);
+ localPool.pollAllConnectors(threadContext);
}
/** Flush only those connector handles that are currently unused.
@@ -118,7 +121,7 @@ public class OutputConnectorPool impleme
public void flushUnusedConnectors()
throws ManifoldCFException
{
- OutputConnectorFactory.flushUnusedConnectors(threadContext);
+ localPool.flushUnusedConnectors(threadContext);
}
/** Clean up all open output connector handles.
@@ -129,7 +132,30 @@ public class OutputConnectorPool impleme
public void closeAllConnectors()
throws ManifoldCFException
{
- OutputConnectorFactory.closeAllConnectors(threadContext);
+ localPool.closeAllConnectors(threadContext);
}
+ /** Actual static output connector pool */
+ protected static class LocalPool extends org.apache.manifoldcf.core.connectorpool.ConnectorPool<IOutputConnector>
+ {
+ public LocalPool()
+ {
+ }
+
+ @Override
+ protected boolean isInstalled(IThreadContext tc, String className)
+ throws ManifoldCFException
+ {
+ IOutputConnectorManager connectorManager = OutputConnectorManagerFactory.make(tc);
+ return connectorManager.isInstalled(className);
+ }
+
+ public IOutputConnector[] grabMultiple(IThreadContext tc, String[] orderingKeys, String[] classNames, ConfigParams[] configInfos, int[] maxPoolSizes)
+ throws ManifoldCFException
+ {
+ return grabMultiple(tc,IOutputConnector.class,orderingKeys,classNames,configInfos,maxPoolSizes);
+ }
+
+ }
+
}
Modified: manifoldcf/branches/CONNECTORS-781/framework/core/src/main/java/org/apache/manifoldcf/core/connectorpool/ConnectorPool.java
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-781/framework/core/src/main/java/org/apache/manifoldcf/core/connectorpool/ConnectorPool.java?rev=1547965&r1=1547964&r2=1547965&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-781/framework/core/src/main/java/org/apache/manifoldcf/core/connectorpool/ConnectorPool.java (original)
+++ manifoldcf/branches/CONNECTORS-781/framework/core/src/main/java/org/apache/manifoldcf/core/connectorpool/ConnectorPool.java Wed Dec 4 23:42:37 2013
@@ -41,11 +41,89 @@ public abstract class ConnectorPool<T ex
// Protected methods
- /** Override this method to instantiate a connector.
+ /** Override this method to hook into a connector manager.
*/
- protected abstract T createConnectorInstance(IThreadContext tc, String className)
+ protected abstract boolean isInstalled(IThreadContext tc, String className)
throws ManifoldCFException;
+ /** Get a connector instance.
+ *@param className is the class name.
+ *@return the instance.
+ */
+ protected T createConnectorInstance(IThreadContext threadContext, String className)
+ throws ManifoldCFException
+ {
+ if (!isInstalled(threadContext,className))
+ return null;
+
+ try
+ {
+ Class theClass = ManifoldCF.findClass(className);
+ Class[] argumentClasses = new Class[0];
+ // Look for a constructor
+ Constructor c = theClass.getConstructor(argumentClasses);
+ Object[] arguments = new Object[0];
+ Object o = c.newInstance(arguments);
+ try
+ {
+ return (T)o;
+ }
+ catch (ClassCastException e)
+ {
+ throw new ManifoldCFException("Class '"+className+"' does not implement IConnector.");
+ }
+ }
+ catch (InvocationTargetException e)
+ {
+ Throwable z = e.getTargetException();
+ if (z instanceof Error)
+ throw (Error)z;
+ else if (z instanceof RuntimeException)
+ throw (RuntimeException)z;
+ else if (z instanceof ManifoldCFException)
+ throw (ManifoldCFException)z;
+ else
+ throw new RuntimeException("Unknown exception type: "+z.getClass().getName()+": "+z.getMessage(),z);
+ }
+ catch (ClassNotFoundException e)
+ {
+ // Equivalent to the connector not being installed
+ return null;
+ //throw new ManifoldCFException("No connector class '"+className+"' was found.",e);
+ }
+ catch (NoSuchMethodException e)
+ {
+ throw new ManifoldCFException("No appropriate constructor for IConnector implementation '"+
+ className+"'. Need xxx(ConfigParams).",
+ e);
+ }
+ catch (SecurityException e)
+ {
+ throw new ManifoldCFException("Protected constructor for IConnector implementation '"+className+"'",
+ e);
+ }
+ catch (IllegalAccessException e)
+ {
+ throw new ManifoldCFException("Unavailable constructor for IConnector implementation '"+className+"'",
+ e);
+ }
+ catch (IllegalArgumentException e)
+ {
+ throw new ManifoldCFException("Shouldn't happen!!!",e);
+ }
+ catch (InstantiationException e)
+ {
+ throw new ManifoldCFException("InstantiationException for IConnector implementation '"+className+"'",
+ e);
+ }
+ catch (ExceptionInInitializerError e)
+ {
+ throw new ManifoldCFException("ExceptionInInitializerError for IConnector implementation '"+className+"'",
+ e);
+ }
+
+ }
+
/** Get multiple connectors, all at once. Do this in a particular order
* so that any connector exhaustion will not cause a deadlock.
*/
@@ -185,7 +263,7 @@ public abstract class ConnectorPool<T ex
/** Idle notification for inactive output connector handles.
* This method polls all inactive handles.
*/
- protected void pollAllConnectors(IThreadContext threadContext)
+ public void pollAllConnectors(IThreadContext threadContext)
throws ManifoldCFException
{
// System.out.println("Pool stats:");
@@ -205,7 +283,7 @@ public abstract class ConnectorPool<T ex
/** Flush only those connector handles that are currently unused.
*/
- protected void flushUnusedConnectors(IThreadContext threadContext)
+ public void flushUnusedConnectors(IThreadContext threadContext)
throws ManifoldCFException
{
closeAllConnectors(threadContext);
@@ -216,7 +294,7 @@ public abstract class ConnectorPool<T ex
* to free resources.
*@param threadContext is the local thread context.
*/
- protected void closeAllConnectors(IThreadContext threadContext)
+ public void closeAllConnectors(IThreadContext threadContext)
throws ManifoldCFException
{
// Go through the whole pool and clean it out
Modified: manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/editjob.jsp
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/editjob.jsp?rev=1547965&r1=1547964&r2=1547965&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/editjob.jsp (original)
+++ manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/editjob.jsp Wed Dec 4 23:42:37 2013
@@ -36,6 +36,8 @@
IOutputConnectionManager outputMgr = OutputConnectionManagerFactory.make(threadContext);
IOutputConnection[] outputList = outputMgr.getAllConnections();
+ IOutputConnectorPool outputConnectorPool = OutputConnectorPoolFactory.make(threadContext);
+
// Figure out tab name
String tabName = variableContext.getParameter("tabname");
if (tabName == null || tabName.length() == 0)
@@ -404,8 +406,7 @@
<%
if (outputConnection != null)
{
- IOutputConnector outputConnector = OutputConnectorFactory.grab(threadContext,outputConnection.getClassName(),outputConnection.getConfigParams(),
- outputConnection.getMaxConnections());
+ IOutputConnector outputConnector = outputConnectorPool.grab(outputConnection);
if (outputConnector != null)
{
try
@@ -414,7 +415,7 @@
}
finally
{
- OutputConnectorFactory.release(outputConnector);
+ outputConnectorPool.release(outputConnector);
}
}
}
@@ -1272,8 +1273,7 @@
if (outputConnection != null)
{
- IOutputConnector outputConnector = OutputConnectorFactory.grab(threadContext,outputConnection.getClassName(),outputConnection.getConfigParams(),
- outputConnection.getMaxConnections());
+ IOutputConnector outputConnector = outputConnectorPool.grab(outputConnection);
if (outputConnector != null)
{
try
@@ -1282,7 +1282,7 @@
}
finally
{
- OutputConnectorFactory.release(outputConnector);
+ outputConnectorPool.release(outputConnector);
}
%>
<input type="hidden" name="outputpresent" value="true"/>
Modified: manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/execute.jsp
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/execute.jsp?rev=1547965&r1=1547964&r2=1547965&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/execute.jsp (original)
+++ manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/execute.jsp Wed Dec 4 23:42:37 2013
@@ -51,6 +51,8 @@
IMappingConnectionManager mappingConnManager = MappingConnectionManagerFactory.make(threadContext);
IOutputConnectionManager outputManager = OutputConnectionManagerFactory.make(threadContext);
+ IOutputConnectorPool outputConnectorPool = OutputConnectorPoolFactory.make(threadContext);
+
String type = variableContext.getParameter("type");
String op = variableContext.getParameter("op");
if (type != null && op != null && type.equals("connection"))
@@ -1028,8 +1030,7 @@
if (outputPresent && outputConnection != null)
{
- IOutputConnector outputConnector = OutputConnectorFactory.grab(threadContext,
- outputConnection.getClassName(),outputConnection.getConfigParams(),outputConnection.getMaxConnections());
+ IOutputConnector outputConnector = outputConnectorPool.grab(outputConnection);
if (outputConnector != null)
{
try
@@ -1046,7 +1047,7 @@
}
finally
{
- OutputConnectorFactory.release(outputConnector);
+ outputConnectorPool.release(outputConnector);
}
}
}
Modified: manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/viewjob.jsp
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/viewjob.jsp?rev=1547965&r1=1547964&r2=1547965&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/viewjob.jsp (original)
+++ manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/viewjob.jsp Wed Dec 4 23:42:37 2013
@@ -70,6 +70,9 @@
IJobManager manager = JobManagerFactory.make(threadContext);
IOutputConnectionManager outputManager = OutputConnectionManagerFactory.make(threadContext);
IRepositoryConnectionManager connManager = RepositoryConnectionManagerFactory.make(threadContext);
+
+ IOutputConnectorPool outputConnectorPool = OutputConnectorPoolFactory.make(threadContext);
+
String jobID = variableContext.getParameter("jobid");
IJobDescription job = manager.load(new Long(jobID));
if (job == null)
@@ -631,8 +634,7 @@
<%
if (outputConnection != null)
{
- IOutputConnector outputConnector = OutputConnectorFactory.grab(threadContext,outputConnection.getClassName(),outputConnection.getConfigParams(),
- outputConnection.getMaxConnections());
+ IOutputConnector outputConnector = outputConnectorPool.grab(outputConnection);
if (outputConnector != null)
{
try
@@ -641,7 +643,7 @@
}
finally
{
- OutputConnectorFactory.release(outputConnector);
+ outputConnectorPool.release(outputConnector);
}
}
}
Modified: manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/viewoutput.jsp
URL: http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/viewoutput.jsp?rev=1547965&r1=1547964&r2=1547965&view=diff
==============================================================================
--- manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/viewoutput.jsp (original)
+++ manifoldcf/branches/CONNECTORS-781/framework/crawler-ui/src/main/webapp/viewoutput.jsp Wed Dec 4 23:42:37 2013
@@ -78,6 +78,7 @@
IOutputConnectorManager connectorManager = OutputConnectorManagerFactory.make(threadContext);
// Get the connection manager handle
IOutputConnectionManager connManager = OutputConnectionManagerFactory.make(threadContext);
+ IOutputConnectorPool outputConnectorPool = OutputConnectorPoolFactory.make(threadContext);
String connectionName = variableContext.getParameter("connname");
IOutputConnection connection = connManager.load(connectionName);
if (connection == null)
@@ -104,7 +105,7 @@
String connectionStatus;
try
{
- IOutputConnector c = OutputConnectorFactory.grab(threadContext,className,parameters,maxCount);
+ IOutputConnector c = outputConnectorPool.grab(connection);
if (c == null)
connectionStatus = Messages.getString(pageContext.getRequest().getLocale(),"viewoutput.Connectorisnotinstalled");
else
@@ -115,7 +116,7 @@
}
finally
{
- OutputConnectorFactory.release(c);
+ outputConnectorPool.release(c);
}
}
}