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/18 22:44:14 UTC
svn commit: r345581 -
/directory/sandbox/ersiner/apacheds-with-storedprocs/core/src/main/java/org/apache/ldap/server/storedprocs/JNDIClassLoader.java
Author: akarasulu
Date: Fri Nov 18 13:44:10 2005
New Revision: 345581
URL: http://svn.apache.org/viewcvs?rev=345581&view=rev
Log:
added some code to JNDIClassLoader to search the directory for classes
Modified:
directory/sandbox/ersiner/apacheds-with-storedprocs/core/src/main/java/org/apache/ldap/server/storedprocs/JNDIClassLoader.java
Modified: directory/sandbox/ersiner/apacheds-with-storedprocs/core/src/main/java/org/apache/ldap/server/storedprocs/JNDIClassLoader.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/ersiner/apacheds-with-storedprocs/core/src/main/java/org/apache/ldap/server/storedprocs/JNDIClassLoader.java?rev=345581&r1=345580&r2=345581&view=diff
==============================================================================
--- directory/sandbox/ersiner/apacheds-with-storedprocs/core/src/main/java/org/apache/ldap/server/storedprocs/JNDIClassLoader.java (original)
+++ directory/sandbox/ersiner/apacheds-with-storedprocs/core/src/main/java/org/apache/ldap/server/storedprocs/JNDIClassLoader.java Fri Nov 18 13:44:10 2005
@@ -14,17 +14,22 @@
* limitations under the License.
*
*/
-
-
package org.apache.ldap.server.storedprocs;
-import java.io.IOException;
-
+import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.DirContext;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
+
+import org.apache.ldap.common.filter.BranchNode;
+import org.apache.ldap.common.filter.LeafNode;
+import org.apache.ldap.common.filter.SimpleNode;
+import org.apache.ldap.common.name.LdapName;
+import org.apache.ldap.server.jndi.ServerLdapContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
@@ -36,38 +41,50 @@
*/
public class JNDIClassLoader extends ClassLoader
{
- DirContext ctx;
- String dn;
+ private static final Logger log = LoggerFactory.getLogger( JNDIClassLoader.class );
+ private ServerLdapContext ctx;
- public JNDIClassLoader( DirContext ctx, String dn )
+
+ public JNDIClassLoader( ServerLdapContext ctx, String dn )
{
this.ctx = ctx;
- this.dn = dn;
}
+
public Class findClass( String name )
{
byte[] b = null;
- try
- {
- b = loadClassData( name );
- } catch ( IOException e )
- {
- e.printStackTrace();
- }
- catch ( NamingException e )
- {
- e.printStackTrace();
- }
+ BranchNode filter = new BranchNode( BranchNode.AND );
+ filter.addNode( new SimpleNode( "fqcn", "HelloWorld", LeafNode.EQUALITY ) );
+ filter.addNode( new SimpleNode( "objectClass", "javaClass", LeafNode.EQUALITY ) );
+ SearchControls controls = new SearchControls();
+ controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
+
+ NamingEnumeration list = null;
+ try
+ {
+ list = ctx.search( new LdapName(), filter, controls );
+ if ( list.hasMore() )
+ {
+ SearchResult result = ( SearchResult ) list.next();
+ Attribute byteCode = result.getAttributes().get( "byteCode" );
+ b = ( byte[] ) byteCode.get();
+ }
+ else
+ {
+ log.warn( "Class " + name + " not found in DIT." );
+ }
+ }
+ catch ( NamingException e )
+ {
+ log.error( "encountered JNDI failure while searching directory for class: " + name, e );
+ }
+ finally
+ {
+ if ( list != null ) { try { list.close(); } catch( Exception e ) {} };
+ }
return defineClass( name, b, 0, b.length );
- }
-
- private byte[] loadClassData( String name ) throws IOException, NamingException
- {
- Attributes javaClassEntry = ctx.getAttributes( "fqcn=" + name + "," + dn );
- Attribute javaByteCode = javaClassEntry.get( "byteCode" );
- return ( byte[] ) javaByteCode.get();
}
}