You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2005/11/27 01:44:59 UTC

svn commit: r349160 - /directory/sandbox/ersiner/apacheds-with-storedprocs/core/src/main/java/org/apache/ldap/server/jndi/ServerLdapContext.java

Author: akarasulu
Date: Sat Nov 26 16:44:56 2005
New Revision: 349160

URL: http://svn.apache.org/viewcvs?rev=349160&view=rev
Log:
added executeProcedure() method

Modified:
    directory/sandbox/ersiner/apacheds-with-storedprocs/core/src/main/java/org/apache/ldap/server/jndi/ServerLdapContext.java

Modified: directory/sandbox/ersiner/apacheds-with-storedprocs/core/src/main/java/org/apache/ldap/server/jndi/ServerLdapContext.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/ersiner/apacheds-with-storedprocs/core/src/main/java/org/apache/ldap/server/jndi/ServerLdapContext.java?rev=349160&r1=349159&r2=349160&view=diff
==============================================================================
--- directory/sandbox/ersiner/apacheds-with-storedprocs/core/src/main/java/org/apache/ldap/server/jndi/ServerLdapContext.java (original)
+++ directory/sandbox/ersiner/apacheds-with-storedprocs/core/src/main/java/org/apache/ldap/server/jndi/ServerLdapContext.java Sat Nov 26 16:44:56 2005
@@ -17,6 +17,7 @@
 package org.apache.ldap.server.jndi;
 
 
+import java.lang.reflect.InvocationTargetException;
 import java.util.Hashtable;
 
 import javax.naming.Name;
@@ -27,9 +28,15 @@
 import javax.naming.ldap.LdapContext;
 
 import org.apache.ldap.common.NotImplementedException;
+import org.apache.ldap.common.exception.LdapNamingException;
+import org.apache.ldap.common.message.ResultCodeEnum;
+import org.apache.ldap.common.name.LdapName;
 import org.apache.ldap.server.DirectoryService;
 import org.apache.ldap.server.authn.LdapPrincipal;
 import org.apache.ldap.server.partition.DirectoryPartitionNexus;
+import org.apache.ldap.server.storedprocs.JavaStoredProcedure;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 /**
@@ -40,6 +47,7 @@
  */
 public class ServerLdapContext extends ServerDirContext implements LdapContext
 {
+	private static final Logger log = LoggerFactory.getLogger( ServerLdapContext.class );
     private static final Control[] EMPTY_CONTROLS = new Control[0];
     private Control[] requestControls = EMPTY_CONTROLS;
     private Control[] responseControls = EMPTY_CONTROLS;
@@ -75,6 +83,9 @@
 
 
     /**
+     * @todo Once the POJO for a stored procedure extended request is defined this method will only make sure 
+     * requests of that type are executed for now.
+     * 
      * @see javax.naming.ldap.LdapContext#extendedOperation(
      * javax.naming.ldap.ExtendedRequest)
      */
@@ -83,6 +94,55 @@
         throw new NotImplementedException();
     }
 
+    
+    /**
+     * Executes a stored procedure within the server.
+     * 
+     * @param qualifiedProcedure the fully qualified name of the stored procedure
+     * @param paramTypes the parameters types in order
+     * @param params the parameter values in order
+     * @return the return value object
+     * @throws NamingException if there is a problem invoking the procedure
+     */
+    public Object executeProcedure( String qualifiedProcedure, Class[] paramTypes, Object[] params ) throws NamingException
+    {
+    	ServerLdapContext root = new ServerLdapContext( getPrincipal(), getNexusProxy(), getEnvironment(), new LdapName() );
+    	root.setRequestControls( getRequestControls() );
+    	JavaStoredProcedure procedure = null;
+    	
+    	// @todo figure out the ldap exceptions and result codes that correspond to these exceptions
+    	
+		try 
+		{
+			procedure = new JavaStoredProcedure( root, qualifiedProcedure, paramTypes );
+		} 
+		catch ( SecurityException e1 ) 
+		{
+			e1.printStackTrace();
+		} 
+		catch ( ClassNotFoundException e1 ) 
+		{
+			e1.printStackTrace();
+		} 
+		catch ( NoSuchMethodException e1 ) 
+		{
+			e1.printStackTrace();
+		}
+    	
+        try
+        {
+        	return procedure.call( params );
+        }
+        catch( InvocationTargetException e )
+        {
+        	String msg = "procedure call failed while executing";
+        	log.error( msg, e );
+        	NamingException wrapper = new LdapNamingException( msg, ResultCodeEnum.OPERATIONSERROR );
+        	wrapper.setRootCause( e.getCause() );
+        	throw wrapper;
+        }
+    }
+    
 
     /**
      * @see javax.naming.ldap.LdapContext#newInstance(