You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@directory.apache.org by "John E. Conlon" <jc...@verticon.com> on 2006/12/08 00:55:11 UTC

Help on OSGi modularizing

Have run into a couple of issues bundling(modularizing) the backend
subsystem (core) and and the protocol provider (protocol-ldap)
subprojects for OSGi and can use some guidance. 

Basically the Apacheds OSGi effort (as it exists now) is one of
realizing the 'What is it?' modular graphic that we show on our home
page. Consider the outer dashed line in the graphic the OSGi runtime,
the backend subsystem as a single bundle that exports an
InitialContextFactory service; and all protocol providers, and user apps
in separate bundles as consumers of that jndi service. (There are some
support bundles as well - but I just want to give a high level intro
here.)

To date Enrique's effort and my follow on efforts have been rather crude
in regards to dealing with the initial core and ldap bootstrap
configuration within the modules, we hard coded it in our bundles. With
the 2.1 version of spring (aka spring-osgi) we now can provide spring
configuration for our bundles that is similar to how spring used in
ApacheDS today. 

I have two questions:

1. Mysterious package net.sf.cglib.proxy.*
When the apacheDS backend system (core) bundle starts up, the Felix OSGi
runtime is logging the following message:

WARNING: *** Class 'net.sf.cglib.proxy.Enhancer' was not found. Bundle
21 does not import package 'net.sf.cglib.proxy', nor is the package
exported by any other bundle or available from the system class loader.
*** (java.lang.ClassNotFoundException: *** Class
'net.sf.cglib.proxy.Enhancer' was not found. Bundle 21 does not import
package 'net.sf.cglib.proxy', nor is the package e xported by any other
bundle or available from the system class loader. ***)

I can't determine where we use this package in ApacheDS and who calls
this class. 

Does anyone know if we are using it and if so where we are using the
net.sf.cglib.proxy package within ApacheDS?


2. LDAP Configuration
In splitting up the backend from the ldap protocol provider I have
separated the the server.xml into two modules (bundles) with a spring
configuration for the backend and a second one for a default ldap
server. In testing I can see I don't quite have things correctly
configured on the ldap side because when I disconnect my ldap client I
get a stack trace. 

Any ideas what configuration properties I may have missed?

Here is a printout of the properties being set on my
LDAPProtocolProvider:

java.naming.factory.initial=org.apache.ldap.server.jndi.CoreContextFactory, 
asn.1.berlib.provider=org.apache.ldap.common.berlib.asn1.SnickersProvider, 
denormalizeOpAttrsEnabled=false, 
server.use.factory.instance=org.apache.directory.osgi.backend.InitialContextFactoryImpl@b57e9a, 
java.naming.ldap.attributes.binary=photo personalSignature audio
jpegPhoto javaSerializedData userPassword userCertificate cACertificate
authorityRevocationList certificateRevocationList crossCertificatePair
x500UniqueIdentifier krb5Key,
server.net.ldaps.port=10636, 
server.net.ldap.port=10389, 
java.naming.provider.url=uid=admin,ou=system, 
server.disable.anonymous=true


And here is the felix stacktrace when I disconnect a client:

07 Dec 2006 16:48:44,973 ERROR
org.apache.directory.server.ldap.support.UnbindHandler
messageReceived.69  
	failed to unbind session properly

org.apache.directory.shared.ldap.exception.LdapNameNotFoundException:
uid=admin,ou=system
	at
org.apache.directory.server.core.partition.DefaultPartitionNexus.getBackend(DefaultPartitionNexus.java:993)
	at
org.apache.directory.server.core.partition.DefaultPartitionNexus.unbind
(DefaultPartitionNexus.java:660)
	at org.apache.directory.server.core.interceptor.InterceptorChain
$1.unbind(InterceptorChain.java:209)
	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
$1.unbind(InterceptorChain.java:1450)
	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
(BaseInterceptor.java:233)
	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
$1.unbind(InterceptorChain.java:1450)
	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
(BaseInterceptor.java:233)
	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
$1.unbind(InterceptorChain.java:1450)
	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
(BaseInterceptor.java:233)
	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
$1.unbind(InterceptorChain.java:1450)
	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
(BaseInterceptor.java:233)
	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
$1.unbind(InterceptorChain.java:1450)
	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
(BaseInterceptor.java:233)
	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
$1.unbind(InterceptorChain.java:1450)
	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
(BaseInterceptor.java:233)
	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
$1.unbind(InterceptorChain.java:1450)
	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
(BaseInterceptor.java:233)
	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
$1.unbind(InterceptorChain.java:1450)
	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
(BaseInterceptor.java:233)
	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
$1.unbind(InterceptorChain.java:1450)
	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
(BaseInterceptor.java:233)
	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
$1.unbind(InterceptorChain.java:1450)
	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
(BaseInterceptor.java:233)
	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
$1.unbind(InterceptorChain.java:1450)
	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
(BaseInterceptor.java:233)
	at org.apache.directory.server.core.interceptor.InterceptorChain.unbind
(InterceptorChain.java:746)
	at
org.apache.directory.server.core.partition.PartitionNexusProxy.unbind
(PartitionNexusProxy.java:689)
	at
org.apache.directory.server.core.partition.PartitionNexusProxy.unbind
(PartitionNexusProxy.java:706)
	at org.apache.directory.server.core.jndi.ServerLdapContext.ldapUnbind
(ServerLdapContext.java:181)
	at
org.apache.directory.server.ldap.support.UnbindHandler.messageReceived
(UnbindHandler.java:60)
	at org.apache.mina.handler.demux.DemuxingIoHandler.messageReceived
(DemuxingIoHandler.java:144)
	at org.apache.directory.server.ldap.LdapProtocolProvider
$LdapProtocolHandler.messageReceived(LdapProtocolProvider.java:403)
	at org.apache.mina.common.support.AbstractIoFilterChain
$TailFilter.messageReceived(AbstractIoFilterChain.java:703)
	at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:362)
	at org.apache.mina.common.support.AbstractIoFilterChain.access$1100
(AbstractIoFilterChain.java:54)
	at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl
$1.messageReceived(AbstractIoFilterChain.java:800)
	at
org.apache.mina.filter.codec.support.SimpleProtocolDecoderOutput.flush
(SimpleProtocolDecoderOutput.java:62)
	at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived
(ProtocolCodecFilter.java:186)
	at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:362)
	at org.apache.mina.common.support.AbstractIoFilterChain.access$1100
(AbstractIoFilterChain.java:54)
	at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl
$1.messageReceived(AbstractIoFilterChain.java:800)
	at org.apache.mina.filter.executor.ExecutorFilter.processEvent
(ExecutorFilter.java:231)
	at org.apache.mina.filter.executor.ExecutorFilter
$ProcessEventsRunnable.run(ExecutorFilter.java:286)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask
(ThreadPoolExecutor.java:650)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run
(ThreadPoolExecutor.java:675)
	at java.lang.Thread.run(Thread.java:595)



thanks,

John


Re: Help on OSGi modularizing

Posted by "John E. Conlon" <jc...@verticon.com>.
Let me answer at least one of my own questions:
> 2. LDAP Configuration
> In splitting up the backend from the ldap protocol provider I have
> separated the the server.xml into two modules (bundles) with a spring
> configuration for the backend and a second one for a default ldap
> server. In testing I can see I don't quite have things correctly
> configured on the ldap side because when I disconnect my ldap client I
> get a stack trace. 
> 
> Any ideas what configuration properties I may have missed?
Yep it was an environment property that was causing Enrique's old ldap
protocol provider bundle to generate the same error I had with the
updated one. His bundle was so old it had:
env.put
( Context.INITIAL_CONTEXT_FACTORY,"org.apache.ldap.server.jndi.CoreContextFactory"

instead of:
env.put
( Context.INITIAL_CONTEXT_FACTORY,"org.apache.directory.server.core.jndi.CoreContextFactory" );
     
The new spring enabled ldap protocol provider is also working now and no longer exhibiting this problem.
Will commit it to my sandbox today.


As far as:  

> 1. Mysterious package net.sf.cglib.proxy.*

Still getting the error message from the runtime but see no side effects
from it.  (Felix is very noisy regarding classloading failures. Combined
with a reflection oriented library like Spring-OSGi and there are a lot
of messages that are superfluous.)

cheers,
John

On Thu, 2006-12-07 at 17:55 -0600, John E. Conlon wrote:
> Have run into a couple of issues bundling(modularizing) the backend
> subsystem (core) and and the protocol provider (protocol-ldap)
> subprojects for OSGi and can use some guidance. 
> 
> Basically the Apacheds OSGi effort (as it exists now) is one of
> realizing the 'What is it?' modular graphic that we show on our home
> page. Consider the outer dashed line in the graphic the OSGi runtime,
> the backend subsystem as a single bundle that exports an
> InitialContextFactory service; and all protocol providers, and user apps
> in separate bundles as consumers of that jndi service. (There are some
> support bundles as well - but I just want to give a high level intro
> here.)
> 
> To date Enrique's effort and my follow on efforts have been rather crude
> in regards to dealing with the initial core and ldap bootstrap
> configuration within the modules, we hard coded it in our bundles. With
> the 2.1 version of spring (aka spring-osgi) we now can provide spring
> configuration for our bundles that is similar to how spring used in
> ApacheDS today. 
> 
> I have two questions:
> 
> 1. Mysterious package net.sf.cglib.proxy.*
> When the apacheDS backend system (core) bundle starts up, the Felix OSGi
> runtime is logging the following message:
> 
> WARNING: *** Class 'net.sf.cglib.proxy.Enhancer' was not found. Bundle
> 21 does not import package 'net.sf.cglib.proxy', nor is the package
> exported by any other bundle or available from the system class loader.
> *** (java.lang.ClassNotFoundException: *** Class
> 'net.sf.cglib.proxy.Enhancer' was not found. Bundle 21 does not import
> package 'net.sf.cglib.proxy', nor is the package e xported by any other
> bundle or available from the system class loader. ***)
> 
> I can't determine where we use this package in ApacheDS and who calls
> this class. 
> 
> Does anyone know if we are using it and if so where we are using the
> net.sf.cglib.proxy package within ApacheDS?
> 
> 
> 2. LDAP Configuration
> In splitting up the backend from the ldap protocol provider I have
> separated the the server.xml into two modules (bundles) with a spring
> configuration for the backend and a second one for a default ldap
> server. In testing I can see I don't quite have things correctly
> configured on the ldap side because when I disconnect my ldap client I
> get a stack trace. 
> 
> Any ideas what configuration properties I may have missed?
> 
> Here is a printout of the properties being set on my
> LDAPProtocolProvider:
> 
> java.naming.factory.initial=org.apache.ldap.server.jndi.CoreContextFactory, 
> asn.1.berlib.provider=org.apache.ldap.common.berlib.asn1.SnickersProvider, 
> denormalizeOpAttrsEnabled=false, 
> server.use.factory.instance=org.apache.directory.osgi.backend.InitialContextFactoryImpl@b57e9a, 
> java.naming.ldap.attributes.binary=photo personalSignature audio
> jpegPhoto javaSerializedData userPassword userCertificate cACertificate
> authorityRevocationList certificateRevocationList crossCertificatePair
> x500UniqueIdentifier krb5Key,
> server.net.ldaps.port=10636, 
> server.net.ldap.port=10389, 
> java.naming.provider.url=uid=admin,ou=system, 
> server.disable.anonymous=true
> 
> 
> And here is the felix stacktrace when I disconnect a client:
> 
> 07 Dec 2006 16:48:44,973 ERROR
> org.apache.directory.server.ldap.support.UnbindHandler
> messageReceived.69  
> 	failed to unbind session properly
> 
> org.apache.directory.shared.ldap.exception.LdapNameNotFoundException:
> uid=admin,ou=system
> 	at
> org.apache.directory.server.core.partition.DefaultPartitionNexus.getBackend(DefaultPartitionNexus.java:993)
> 	at
> org.apache.directory.server.core.partition.DefaultPartitionNexus.unbind
> (DefaultPartitionNexus.java:660)
> 	at org.apache.directory.server.core.interceptor.InterceptorChain
> $1.unbind(InterceptorChain.java:209)
> 	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
> $1.unbind(InterceptorChain.java:1450)
> 	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
> (BaseInterceptor.java:233)
> 	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
> $1.unbind(InterceptorChain.java:1450)
> 	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
> (BaseInterceptor.java:233)
> 	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
> $1.unbind(InterceptorChain.java:1450)
> 	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
> (BaseInterceptor.java:233)
> 	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
> $1.unbind(InterceptorChain.java:1450)
> 	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
> (BaseInterceptor.java:233)
> 	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
> $1.unbind(InterceptorChain.java:1450)
> 	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
> (BaseInterceptor.java:233)
> 	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
> $1.unbind(InterceptorChain.java:1450)
> 	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
> (BaseInterceptor.java:233)
> 	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
> $1.unbind(InterceptorChain.java:1450)
> 	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
> (BaseInterceptor.java:233)
> 	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
> $1.unbind(InterceptorChain.java:1450)
> 	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
> (BaseInterceptor.java:233)
> 	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
> $1.unbind(InterceptorChain.java:1450)
> 	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
> (BaseInterceptor.java:233)
> 	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
> $1.unbind(InterceptorChain.java:1450)
> 	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
> (BaseInterceptor.java:233)
> 	at org.apache.directory.server.core.interceptor.InterceptorChain$Entry
> $1.unbind(InterceptorChain.java:1450)
> 	at org.apache.directory.server.core.interceptor.BaseInterceptor.unbind
> (BaseInterceptor.java:233)
> 	at org.apache.directory.server.core.interceptor.InterceptorChain.unbind
> (InterceptorChain.java:746)
> 	at
> org.apache.directory.server.core.partition.PartitionNexusProxy.unbind
> (PartitionNexusProxy.java:689)
> 	at
> org.apache.directory.server.core.partition.PartitionNexusProxy.unbind
> (PartitionNexusProxy.java:706)
> 	at org.apache.directory.server.core.jndi.ServerLdapContext.ldapUnbind
> (ServerLdapContext.java:181)
> 	at
> org.apache.directory.server.ldap.support.UnbindHandler.messageReceived
> (UnbindHandler.java:60)
> 	at org.apache.mina.handler.demux.DemuxingIoHandler.messageReceived
> (DemuxingIoHandler.java:144)
> 	at org.apache.directory.server.ldap.LdapProtocolProvider
> $LdapProtocolHandler.messageReceived(LdapProtocolProvider.java:403)
> 	at org.apache.mina.common.support.AbstractIoFilterChain
> $TailFilter.messageReceived(AbstractIoFilterChain.java:703)
> 	at
> org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:362)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.access$1100
> (AbstractIoFilterChain.java:54)
> 	at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl
> $1.messageReceived(AbstractIoFilterChain.java:800)
> 	at
> org.apache.mina.filter.codec.support.SimpleProtocolDecoderOutput.flush
> (SimpleProtocolDecoderOutput.java:62)
> 	at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived
> (ProtocolCodecFilter.java:186)
> 	at
> org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:362)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.access$1100
> (AbstractIoFilterChain.java:54)
> 	at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl
> $1.messageReceived(AbstractIoFilterChain.java:800)
> 	at org.apache.mina.filter.executor.ExecutorFilter.processEvent
> (ExecutorFilter.java:231)
> 	at org.apache.mina.filter.executor.ExecutorFilter
> $ProcessEventsRunnable.run(ExecutorFilter.java:286)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask
> (ThreadPoolExecutor.java:650)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run
> (ThreadPoolExecutor.java:675)
> 	at java.lang.Thread.run(Thread.java:595)
> 
> 
> 
> thanks,
> 
> John
>