You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by go...@apache.org on 2012/01/05 18:29:40 UTC
svn commit: r1227714 - in
/directory/apacheds/branches/apacheds-osgi/component-hub: ./
src/main/java/org/apache/directory/server/component/hub/
src/main/java/org/apache/directory/server/component/utilities/
Author: gokturk
Date: Thu Jan 5 17:29:39 2012
New Revision: 1227714
URL: http://svn.apache.org/viewvc?rev=1227714&view=rev
Log:
* ADSOSGIEventsHelper is created as OSGI Event Handling helper on topics.
* Activator is added for BundleContext retrieval
* Code Reorgs.
Added:
directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/Activator.java (with props)
directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/utilities/ADSOSGIEventsHelper.java (with props)
Modified:
directory/apacheds/branches/apacheds-osgi/component-hub/pom.xml
directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentHub.java
directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java
Modified: directory/apacheds/branches/apacheds-osgi/component-hub/pom.xml
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/component-hub/pom.xml?rev=1227714&r1=1227713&r2=1227714&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/component-hub/pom.xml (original)
+++ directory/apacheds/branches/apacheds-osgi/component-hub/pom.xml Thu Jan 5 17:29:39 2012
@@ -94,6 +94,7 @@
<manifestLocation>META-INF</manifestLocation>
<instructions>
<Bundle-SymbolicName>${project.groupId}.component.hub</Bundle-SymbolicName>
+ <Bundle-Activator>org.apache.directory.server.component.hub.Activator</Bundle-Activator>
</instructions>
</configuration>
</plugin>
Added: directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/Activator.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/Activator.java?rev=1227714&view=auto
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/Activator.java (added)
+++ directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/Activator.java Thu Jan 5 17:29:39 2012
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.server.component.hub;
+
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+
+/**
+ * Activator for apacheds-component-hub.
+ * Keeping BundleContext reference for OSGI Event handling.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class Activator implements BundleActivator
+{
+
+ @Override
+ public void start( BundleContext context ) throws Exception
+ {
+ ComponentHub.bundleContext = context;
+ }
+
+
+ @Override
+ public void stop( BundleContext context ) throws Exception
+ {
+ ComponentHub.bundleContext = null;
+ }
+
+}
\ No newline at end of file
Propchange: directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/Activator.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentHub.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentHub.java?rev=1227714&r1=1227713&r2=1227714&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentHub.java (original)
+++ directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentHub.java Thu Jan 5 17:29:39 2012
@@ -20,6 +20,8 @@
package org.apache.directory.server.component.hub;
+import java.util.Dictionary;
+import java.util.Hashtable;
import java.util.Properties;
import org.apache.directory.server.component.ADSComponent;
@@ -28,6 +30,7 @@ import org.apache.directory.server.compo
import org.apache.directory.server.component.schema.DefaultComponentSchemaGenerator;
import org.apache.directory.server.component.utilities.ADSComponentHelper;
import org.apache.directory.server.component.utilities.ADSConstants;
+import org.apache.directory.server.component.utilities.ADSOSGIEventsHelper;
import org.apache.directory.server.core.api.DirectoryService;
import org.apache.directory.server.core.api.interceptor.Interceptor;
import org.apache.directory.server.core.api.partition.Partition;
@@ -36,13 +39,20 @@ import org.apache.directory.server.core.
import org.apache.directory.shared.ipojo.helpers.IPojoHelper;
import org.apache.felix.ipojo.Factory;
import org.apache.felix.ipojo.annotations.Component;
+import org.apache.felix.ipojo.annotations.Instantiate;
import org.apache.felix.ipojo.annotations.Invalidate;
import org.apache.felix.ipojo.annotations.Property;
+import org.apache.felix.ipojo.annotations.Provides;
import org.apache.felix.ipojo.annotations.Requires;
import org.apache.felix.ipojo.annotations.Validate;
import org.apache.felix.ipojo.whiteboard.Wbp;
import org.apache.felix.ipojo.whiteboard.Whiteboards;
+import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
+import org.osgi.service.event.Event;
+import org.osgi.service.event.EventAdmin;
+import org.osgi.service.event.EventConstants;
+import org.osgi.service.event.EventHandler;
import org.osgi.service.log.LogService;
@@ -63,14 +73,25 @@ import org.osgi.service.log.LogService;
onDeparture = "onInstanceDeparture",
filter = "(objectClass=org.apache.felix.ipojo.architecture.Architecture)")
})
-public class ComponentHub
+public class ComponentHub implements EventHandler
{
+
+ /*
+ * BundleContext reference for event handling
+ */
+ public static BundleContext bundleContext;
+
/*
* DirectoryService reference
*/
private DirectoryService ads;
/*
+ * Relative path name of the ApacheDS instance
+ */
+ private String instanceDir;
+
+ /*
* Schema Partition reference.
*/
private SchemaPartition schemaPartition;
@@ -93,12 +114,12 @@ public class ComponentHub
/*
* Used to manage component's schemas.
*/
- private ComponentSchemaManager componentSchemaManager = new ComponentSchemaManager( schemaPartition );
+ private ComponentSchemaManager componentSchemaManager;
/*
* Used to manage config partition interactions.
*/
- private ConfigurationManager configManager = new ConfigurationManager( configPartition, componentSchemaManager );
+ private ConfigurationManager configManager;
/*
* Used to manage instances' DIT hooks.
@@ -108,7 +129,7 @@ public class ComponentHub
/*
* Used to manage components.
*/
- private ComponentManager componentManager = new ComponentManager( configManager );
+ private ComponentManager componentManager;
/*
* Allowed interfaces for components.
@@ -130,37 +151,39 @@ public class ComponentHub
* @param configPartition config partition reference
* @return reference to a wrapped ComponentHub IPojo component
*/
- public static ComponentHub createIPojoInstance( DirectoryService ads, SchemaPartition schemaPartition,
+ public static ComponentHub createIPojoInstance( String instanceDir, SchemaPartition schemaPartition,
SingleFileLdifPartition configPartition )
{
- String adsInstance = ads.getInstanceId();
- String hubInstanceId = ADSConstants.ADS_HUB_FACTORY_NAME + "-" + adsInstance;
+ String hubInstanceId = ADSConstants.ADS_HUB_FACTORY_NAME + "-" + instanceDir;
Properties conf = new Properties();
- conf.put( "ads-hub-arg-ads", ads );
+ conf.put( "ads-hub-arg-insdir", instanceDir );
conf.put( "ads-hub-arg-schpart", schemaPartition );
conf.put( "ads-hub-arg-confpart", configPartition );
ComponentHub componentHubInstance = ( ComponentHub ) IPojoHelper.createIPojoComponent(
- ADSConstants.ADS_HUB_FACTORY_NAME, hubInstanceId, null );
+ ADSConstants.ADS_HUB_FACTORY_NAME, hubInstanceId, conf );
return componentHubInstance;
}
public ComponentHub(
- @Property(name = "ads-hub-arg-ads") DirectoryService ads,
-
+ @Property(name = "ads-hub-arg-insdir") String instanceDir,
@Property(name = "ads-hub-arg-schpart") SchemaPartition schemaPartition,
-
@Property(name = "ads-hub-arg-confpart") SingleFileLdifPartition configPartition )
{
- this.ads = ads;
+ this.instanceDir = instanceDir;
this.schemaPartition = schemaPartition;
this.configPartition = configPartition;
+
+ componentSchemaManager = new ComponentSchemaManager( schemaPartition );
+ configManager = new ConfigurationManager( configPartition, componentSchemaManager );
+ // Initialized here because of the IPojo's object initialization routine !
componentSchemaManager.addSchemaGenerator( Interceptor.class.getName(), new DefaultComponentSchemaGenerator() );
componentSchemaManager.addSchemaGenerator( Partition.class.getName(), new DefaultComponentSchemaGenerator() );
+ componentManager = new ComponentManager( configManager );
componentManager.addInstanceGenerator( Interceptor.class.getName(), new DefaultComponentInstanceGenerator() );
componentManager.addInstanceGenerator( Partition.class.getName(), new DefaultComponentInstanceGenerator() );
@@ -172,9 +195,8 @@ public class ComponentHub
/**
* Register the DirectoryListener of InstanceManager with ADS
*
- * @param ads DirectoryService reference to register listener with.
*/
- public void RegisterWithDS( DirectoryService ads )
+ private void RegisterWithDS()
{
instanceManager.registerWithDirectoryService( ads );
}
@@ -188,6 +210,17 @@ public class ComponentHub
public void hubValidated()
{
logger.log( LogService.LOG_INFO, "ADSComponentHub validated." );
+
+ // Register the class for OSGI Event handling
+ String[] topics = new String[]
+ {
+ ADSOSGIEventsHelper.getTopic_DSInitialized( instanceDir )
+ };
+
+ Dictionary props = new Hashtable();
+ props.put( EventConstants.EVENT_TOPIC, topics );
+
+ bundleContext.registerService( EventHandler.class.getName(), this, props );
}
@@ -390,4 +423,28 @@ public class ComponentHub
{
eventManager.removeListener( listener );
}
+
+
+ /**
+ * OSGI Event handler.
+ * Used for pairing component-hub with the DirectoryService reference.
+ */
+ @Override
+ public void handleEvent( Event event )
+ {
+ String topic = event.getTopic();
+ if ( topic.equals( ADSOSGIEventsHelper.getTopic_DSInitialized( instanceDir ) ) )
+ {
+ DirectoryService createdDS = ( DirectoryService ) event.getProperty( ADSOSGIEventsHelper.ADS_EVENT_ARG_DS );
+ if ( createdDS == null )
+ {
+ logger.log( LogService.LOG_INFO,
+ "DSInitialized event does not contain created DirectoryServiceReference" );
+ return;
+ }
+
+ ads = createdDS;
+ RegisterWithDS();
+ }
+ }
}
Modified: directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java?rev=1227714&r1=1227713&r2=1227714&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java (original)
+++ directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/hub/ComponentSchemaManager.java Thu Jan 5 17:29:39 2012
@@ -20,6 +20,7 @@
package org.apache.directory.server.component.hub;
+import java.io.InputStream;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.List;
@@ -195,7 +196,8 @@ public class ComponentSchemaManager
{
try
{
- LdifReader reader = new LdifReader( this.getClass().getResourceAsStream( "componenthub.ldif" ) );
+ InputStream is = this.getClass().getResourceAsStream( "componenthub.ldif" );
+ LdifReader reader = new LdifReader( is );
for ( LdifEntry le : reader )
{
Added: directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/utilities/ADSOSGIEventsHelper.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/utilities/ADSOSGIEventsHelper.java?rev=1227714&view=auto
==============================================================================
--- directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/utilities/ADSOSGIEventsHelper.java (added)
+++ directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/utilities/ADSOSGIEventsHelper.java Thu Jan 5 17:29:39 2012
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.directory.server.component.utilities;
+
+
+public class ADSOSGIEventsHelper
+{
+ /** Header for all events under ComponentHub */
+ private static final String eventHeader = "org/apache/directory/server/";
+
+ /** DirectoryService reference argument name for ComponentHub OSGI Events. */
+ public static final String ADS_EVENT_ARG_DS = "org/apache/directory/server/dsreference";
+
+
+ public static String getTopic_CoreInterceptorsReady( String instanceDir )
+ {
+ return eventHeader + instanceDir + "/CoreInterceptorsReady";
+ }
+
+
+ public static String getTopic_CorePartitionsReady( String instanceDir )
+ {
+ return eventHeader + instanceDir + "/CorePartitionsReady";
+ }
+
+
+ public static String getTopic_DSInitialized( String instanceDir )
+ {
+ return eventHeader + instanceDir + "/DSInitialized";
+ }
+}
Propchange: directory/apacheds/branches/apacheds-osgi/component-hub/src/main/java/org/apache/directory/server/component/utilities/ADSOSGIEventsHelper.java
------------------------------------------------------------------------------
svn:mime-type = text/plain