You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by th...@apache.org on 2012/04/26 16:47:47 UTC
svn commit: r1330887 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/core/
main/java/org/apache/jackrabbit/oak/osgi/
test/java/org/apache/jackrabbit/oak/plugins/name/
Author: thomasm
Date: Thu Apr 26 14:47:47 2012
New Revision: 1330887
URL: http://svn.apache.org/viewvc?rev=1330887&view=rev
Log:
OAK-28 Query implementation (make index provider osgiable)
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexProvider.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/name/NamespaceMappingsTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java?rev=1330887&r1=1330886&r2=1330887&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java Thu Apr 26 14:47:47 2012
@@ -62,11 +62,14 @@ public class ContentRepositoryImpl imple
this(new MicroKernelImpl());
}
- public ContentRepositoryImpl(MicroKernel mk) {
+ private ContentRepositoryImpl(MicroKernel mk) {
+ this(mk, new Indexer(mk));
+ }
+
+ public ContentRepositoryImpl(MicroKernel mk, QueryIndexProvider indexProvider) {
microKernel = mk;
valueFactory = new CoreValueFactoryImpl(microKernel);
nodeStore = new KernelNodeStore(microKernel, valueFactory);
- QueryIndexProvider indexProvider = new Indexer(mk);
queryEngine = new QueryEngineImpl(microKernel, valueFactory, indexProvider);
// FIXME: workspace setup must be done elsewhere...
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java?rev=1330887&r1=1330886&r2=1330887&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java Thu Apr 26 14:47:47 2012
@@ -36,6 +36,8 @@ public class Activator implements Bundle
private ServiceTracker tracker;
+ private OsgiIndexProvider indexProvider;
+
private final Map<ServiceReference, ServiceRegistration> services =
new HashMap<ServiceReference, ServiceRegistration>();
@@ -47,11 +49,14 @@ public class Activator implements Bundle
tracker = new ServiceTracker(
context, MicroKernel.class.getName(), this);
tracker.open();
+ indexProvider = new OsgiIndexProvider();
+ indexProvider.start(bundleContext);
}
@Override
public void stop(BundleContext bundleContext) throws Exception {
- tracker.open();
+ tracker.close();
+ indexProvider.stop();
}
//-------------------------------------------< ServiceTrackerCustomizer >---
@@ -63,7 +68,7 @@ public class Activator implements Bundle
MicroKernel kernel = (MicroKernel) service;
services.put(reference, context.registerService(
ContentRepository.class.getName(),
- new ContentRepositoryImpl(kernel),
+ new ContentRepositoryImpl(kernel, indexProvider),
new Properties()));
return service;
} else {
@@ -74,11 +79,12 @@ public class Activator implements Bundle
@Override
public void modifiedService(ServiceReference reference, Object service) {
+ // nothing to do
}
@Override
public void removedService(ServiceReference reference, Object service) {
- ServiceRegistration registration = services.get(reference);
+ ServiceRegistration registration = services.remove(reference);
registration.unregister();
context.ungetService(reference);
}
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexProvider.java?rev=1330887&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexProvider.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexProvider.java Thu Apr 26 14:47:47 2012
@@ -0,0 +1,76 @@
+package org.apache.jackrabbit.oak.osgi;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.oak.query.index.QueryIndex;
+import org.apache.jackrabbit.oak.query.index.QueryIndexProvider;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+
+public class OsgiIndexProvider implements ServiceTrackerCustomizer, QueryIndexProvider {
+
+ private BundleContext context;
+
+ private ServiceTracker tracker;
+
+ private final Map<ServiceReference, QueryIndexProvider> providers =
+ new HashMap<ServiceReference, QueryIndexProvider>();
+
+ public void start(BundleContext bundleContext) throws Exception {
+ context = bundleContext;
+ tracker = new ServiceTracker(
+ bundleContext, QueryIndexProvider.class.getName(), this);
+ tracker.open();
+ }
+
+ public void stop() throws Exception {
+ tracker.close();
+ }
+
+ @Override
+ public Object addingService(ServiceReference reference) {
+ Object service = context.getService(reference);
+ if (service instanceof QueryIndexProvider) {
+ QueryIndexProvider provider = (QueryIndexProvider) service;
+ providers.put(reference, provider);
+ return service;
+ } else {
+ context.ungetService(reference);
+ return null;
+ }
+ }
+
+ @Override
+ public void modifiedService(ServiceReference reference, Object service) {
+ // nothing to do
+ }
+
+ @Override
+ public void removedService(ServiceReference reference, Object service) {
+ providers.remove(reference);
+ context.ungetService(reference);
+ }
+
+ @Override
+ public void init() {
+ // nothing to do
+ }
+
+ @Override
+ public List<QueryIndex> getQueryIndexes(MicroKernel mk) {
+ if (providers.size() == 0) {
+ return Collections.emptyList();
+ } else if (providers.size() == 1) {
+ return providers.get(0).getQueryIndexes(mk);
+ } else {
+ // TODO combine indexes
+ return null;
+ }
+ }
+
+}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/name/NamespaceMappingsTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/name/NamespaceMappingsTest.java?rev=1330887&r1=1330886&r2=1330887&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/name/NamespaceMappingsTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/name/NamespaceMappingsTest.java Thu Apr 26 14:47:47 2012
@@ -16,19 +16,17 @@
*/
package org.apache.jackrabbit.oak.plugins.name;
-import org.apache.jackrabbit.mk.core.MicroKernelImpl;
+import static org.junit.Assert.assertEquals;
import org.apache.jackrabbit.oak.api.ContentRepository;
import org.apache.jackrabbit.oak.api.ContentSession;
import org.apache.jackrabbit.oak.core.ContentRepositoryImpl;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-
public class NamespaceMappingsTest {
@Test
public void testMappings() throws Exception {
- ContentRepository repository = new ContentRepositoryImpl(new MicroKernelImpl());
+ ContentRepository repository = new ContentRepositoryImpl();
ContentSession session = repository.login(null, "default");
NamespaceMappings r = new NamespaceMappings(session);