Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 55281 invoked from network); 18 Nov 2005 21:44:38 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 18 Nov 2005 21:44:38 -0000 Received: (qmail 27691 invoked by uid 500); 18 Nov 2005 21:44:36 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 27651 invoked by uid 500); 18 Nov 2005 21:44:36 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 27640 invoked by uid 99); 18 Nov 2005 21:44:36 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 18 Nov 2005 13:44:36 -0800 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.29) with SMTP; Fri, 18 Nov 2005 13:46:09 -0800 Received: (qmail 55060 invoked by uid 65534); 18 Nov 2005 21:44:15 -0000 Message-ID: <20051118214415.55059.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r345581 - /directory/sandbox/ersiner/apacheds-with-storedprocs/core/src/main/java/org/apache/ldap/server/storedprocs/JNDIClassLoader.java Date: Fri, 18 Nov 2005 21:44:14 -0000 To: commits@directory.apache.org From: akarasulu@apache.org X-Mailer: svnmailer-1.0.5 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N 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(); } }