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 to...@apache.org on 2014/03/13 16:21:00 UTC
svn commit: r1577192 [1/2] - in /jackrabbit/oak/trunk: ./ oak-solr-core/
oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/
oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/
oak-solr-co...
Author: tommaso
Date: Thu Mar 13 15:20:59 2014
New Revision: 1577192
URL: http://svn.apache.org/r1577192
Log:
OAK-1537 - merge oak-solr-* into oak-solr-core
Added:
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/EmbeddedSolrServerConfiguration.java (with props)
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/RemoteSolrServerConfiguration.java (with props)
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/EmbeddedSolrServerConfigurationProvider.java (with props)
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/OakSolrConfigurationProviderService.java (with props)
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/RemoteSolrServerConfigurationProvider.java (with props)
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrServerProviderService.java (with props)
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/EmbeddedSolrServerProvider.java (with props)
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProvider.java (with props)
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfigurationTest.java (with props)
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/server/
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/server/EmbeddedSolrServerProviderTest.java (with props)
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProviderIT.java (with props)
Removed:
jackrabbit/oak/trunk/oak-solr-embedded/
jackrabbit/oak/trunk/oak-solr-remote/
Modified:
jackrabbit/oak/trunk/oak-solr-core/pom.xml
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/OakSolrNodeStateConfiguration.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfiguration.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfigurationProvider.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/package-info.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexEditor.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrIndexEditorProviderService.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrQueryIndexProviderService.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/package-info.java
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/util/package-info.java
jackrabbit/oak/trunk/oak-solr-core/src/main/resources/solr/oak/conf/schema.xml
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/FixedNodeStateConfigurationTest.java
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/UpToDateNodeStateConfigurationTest.java
jackrabbit/oak/trunk/pom.xml
Modified: jackrabbit/oak/trunk/oak-solr-core/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/pom.xml?rev=1577192&r1=1577191&r2=1577192&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-solr-core/pom.xml Thu Mar 13 15:20:59 2014
@@ -17,282 +17,186 @@
limitations under the License.
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd ">
- <modelVersion>4.0.0</modelVersion>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd ">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-parent</artifactId>
+ <version>0.19-SNAPSHOT</version>
+ <relativePath>../oak-parent/pom.xml</relativePath>
+ </parent>
+
+ <artifactId>oak-solr-core</artifactId>
+ <name>Oak Solr core</name>
+ <description>Oak support for Apache Solr indexing and search</description>
+ <packaging>bundle</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <configuration>
+ <instructions>
+ <Export-Package>
+ org.apache.jackrabbit.oak.plugins.index.solr.configuration,
+ org.apache.jackrabbit.oak.plugins.index.solr.index,
+ org.apache.jackrabbit.oak.plugins.index.solr.query,
+ org.apache.jackrabbit.oak.plugins.index.solr.server,
+ org.apache.jackrabbit.oak.plugins.index.solr.util
+ </Export-Package>
+ </instructions>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-scr-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>integration-test</goal>
+ <goal>verify</goal>
+ </goals>
+ <configuration>
+ <includes>
+ <include>**/*IT.java</include>
+ </includes>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <!-- TEST -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-core</artifactId>
+ <version>${project.version}</version>
+ <classifier>tests</classifier>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.5</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-mk</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>log4j-over-slf4j</artifactId>
+ <optional>true</optional>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl-over-slf4j</artifactId>
+ <optional>true</optional>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-classic</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <version>1.9.5</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.lucene</groupId>
+ <artifactId>lucene-test-framework</artifactId>
+ <version>4.7.0</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.lucene</groupId>
+ <artifactId>lucene-core</artifactId>
+ <version>4.7.0</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.lucene</groupId>
+ <artifactId>lucene-analyzers-common</artifactId>
+ <version>4.7.0</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>com.google.code.findbugs</groupId>
+ <artifactId>jsr305</artifactId>
+ </dependency>
+ <!-- Optional OSGi dependencies, used only when running within OSGi -->
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <scope>provided</scope>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ <scope>provided</scope>
+ <optional>true</optional>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-core</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Solr -->
+ <dependency>
+ <groupId>org.apache.solr</groupId>
+ <artifactId>solr-core</artifactId>
+ <version>${lucene.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-jdk14</artifactId>
+ </exclusion>
+ </exclusions>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.solr</groupId>
+ <artifactId>solr-solrj</artifactId>
+ <version>${lucene.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.scr.annotations</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>biz.aQute.bnd</groupId>
+ <artifactId>bndlib</artifactId>
+ <scope>provided</scope>
+ </dependency>
- <parent>
- <groupId>org.apache.jackrabbit</groupId>
- <artifactId>oak-parent</artifactId>
- <version>0.19-SNAPSHOT</version>
- <relativePath>../oak-parent/pom.xml</relativePath>
- </parent>
-
- <artifactId>oak-solr-core</artifactId>
- <name>Oak Solr core</name>
- <description>Oak support for Apache Solr indexing and search</description>
- <packaging>bundle</packaging>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <configuration>
- <instructions>
- <Export-Package>
- org.apache.jackrabbit.oak.plugins.index.solr.configuration,
- org.apache.jackrabbit.oak.plugins.index.solr.index,
- org.apache.jackrabbit.oak.plugins.index.solr.query,
- org.apache.jackrabbit.oak.plugins.index.solr.server,
- org.apache.jackrabbit.oak.plugins.index.solr.util
- </Export-Package>
- <_exportcontents>
- org.apache.solr.*;version=${solr.version},
- </_exportcontents>
- <Import-Package>
- org.slf4j.impl;resolution:=optional,
- com.ibm.icu.*;resolution:=optional,
- org.apache.log4j.jmx;resolution:=optional,
- org.apache.log4j.spi;resolution:=optional,
- org.jboss.netty.*;resolution:=optional,
- jline.*;resolution:=optional,
- org.eclipse.jetty.*;resolution:=optional,
- javax.servlet.*; version="[2.5.0,4.0.0)",
- org.tartarus.snowball;resolution:=optional,
- org.restlet;resolution:=optional,
- org.restlet.*;resolution:=optional,
- org.apache.hadoop.*;resolution:=optional,
- com.carrotsearch.hppc.*;resolution:=optional,
- com.googlecode.concurrentlinkedhashmap.*;resolution:=optional,
- com.spatial4j.core.*;resolution:=optional,
- org.apache.log4j.*;resolution:=optional,
- org.apache.zookeeper.server.quorum.flexible.*;resolution:=optional,
- org.joda.time.*;resolution:=optional,
- org.apache.lucene.queries.*;resolution:=optional,
- org.apache.lucene.queryparser.*;resolution:=optional,
- org.apache.lucene.search.grouping.*;resolution:=optional,
- org.apache.lucene.search.highlight.*;resolution:=optional,
- org.apache.lucene.search.postingshighlight.*;resolution:=optional,
- org.apache.lucene.search.spell.*;resolution:=optional,
- org.apache.lucene.search.suggest.*;resolution:=optional,
- org.apache.lucene.search.vectorhighlight.*;resolution:=optional,
- org.apache.lucene.spatial.*;resolution:=optional,
- *
- </Import-Package>
- <DynamicImport-Package>*</DynamicImport-Package>
- <Embed-Dependency>solr-solrj,solr-core,org.noggit</Embed-Dependency>
- </instructions>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-scr-plugin</artifactId>
- </plugin>
- <plugin>
- <artifactId>maven-failsafe-plugin</artifactId>
- <executions>
- <execution>
- <goals>
- <goal>integration-test</goal>
- <goal>verify</goal>
- </goals>
- <configuration>
- <includes>
- <include>**/*IT.java</include>
- </includes>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-
- <dependencies>
- <!-- TEST -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.jackrabbit</groupId>
- <artifactId>oak-core</artifactId>
- <version>${project.version}</version>
- <classifier>tests</classifier>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- <version>2.5</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.jackrabbit</groupId>
- <artifactId>oak-mk</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>log4j-over-slf4j</artifactId>
- <optional>true</optional>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- <optional>true</optional>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-classic</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-core</artifactId>
- <version>1.9.5</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.lucene</groupId>
- <artifactId>lucene-test-framework</artifactId>
- <version>4.7.0</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.lucene</groupId>
- <artifactId>lucene-core</artifactId>
- <version>4.7.0</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.lucene</groupId>
- <artifactId>lucene-analyzers-common</artifactId>
- <version>4.7.0</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>com.google.code.findbugs</groupId>
- <artifactId>jsr305</artifactId>
- </dependency>
- <!-- Optional OSGi dependencies, used only when running within OSGi -->
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
- <scope>provided</scope>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- <scope>provided</scope>
- <optional>true</optional>
- </dependency>
-
- <dependency>
- <groupId>org.apache.jackrabbit</groupId>
- <artifactId>oak-core</artifactId>
- <version>${project.version}</version>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
- <groupId>org.apache.solr</groupId>
- <artifactId>solr-core</artifactId>
- <version>${solr.version}</version>
- <scope>runtime</scope>
- <exclusions>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-jdk14</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.apache.solr</groupId>
- <artifactId>solr-solrj</artifactId>
- <version>${solr.version}</version>
- </dependency>
- <dependency>
- <groupId>org.noggit</groupId>
- <artifactId>noggit</artifactId>
- <version>0.5</version>
- <scope>runtime</scope>
- </dependency>
-
- <!-- sorlj dependencies needed for OSGi deployments -->
- <dependency>
- <groupId>org.apache.zookeeper</groupId>
- <artifactId>zookeeper</artifactId>
- <exclusions>
- <exclusion>
- <groupId>javax.jms</groupId>
- <artifactId>jms</artifactId>
- </exclusion>
- <exclusion>
- <groupId>com.sun.jmx</groupId>
- <artifactId>jmxri</artifactId>
- </exclusion>
- <exclusion>
- <groupId>com.sun.jdmk</groupId>
- <artifactId>jmxtools</artifactId>
- </exclusion>
- <exclusion>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- </exclusion>
- </exclusions>
- <version>3.3.6</version>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>jline</groupId>
- <artifactId>jline</artifactId>
- <version>0.9.1</version>
- <scope>runtime</scope>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpclient</artifactId>
- <version>4.2.6</version>
- <scope>runtime</scope>
- <optional>true</optional>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpmime</artifactId>
- <version>4.2.6</version>
- <scope>runtime</scope>
- <optional>true</optional>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.scr.annotations</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>biz.aQute.bnd</groupId>
- <artifactId>bndlib</artifactId>
- <scope>provided</scope>
- </dependency>
-
- </dependencies>
+ </dependencies>
</project>
Added: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/EmbeddedSolrServerConfiguration.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/EmbeddedSolrServerConfiguration.java?rev=1577192&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/EmbeddedSolrServerConfiguration.java (added)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/EmbeddedSolrServerConfiguration.java Thu Mar 13 15:20:59 2014
@@ -0,0 +1,99 @@
+/*
+ * 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.jackrabbit.oak.plugins.index.solr.configuration;
+
+import org.apache.jackrabbit.oak.plugins.index.solr.server.EmbeddedSolrServerProvider;
+
+/**
+ * Configuration parameters for starting a {@link org.apache.solr.client.solrj.SolrServer}
+ */
+public class EmbeddedSolrServerConfiguration extends SolrServerConfiguration<EmbeddedSolrServerProvider> {
+
+ private final String solrHomePath;
+ private final String solrConfigPath;
+ private final String coreName;
+ private HttpConfiguration httpConfiguration;
+
+ public EmbeddedSolrServerConfiguration(String solrHomePath, String solrConfigPath, String coreName) {
+ this.solrHomePath = solrHomePath;
+ this.solrConfigPath = solrConfigPath;
+ this.coreName = coreName;
+ }
+
+ public EmbeddedSolrServerConfiguration withHttpConfiguration(String context, Integer httpPort) {
+ if (context != null && context.length() > 0 && httpPort != null && httpPort > 0) {
+ this.httpConfiguration = new HttpConfiguration(context, httpPort);
+ }
+ return this;
+ }
+
+ /**
+ * get the Solr home path where all the configuration files are stored
+ *
+ * @return a <code>String</code> representing a path to the Solr home.
+ */
+ public String getSolrHomePath() {
+ return solrHomePath;
+ }
+
+ /**
+ * get the name of the main Solr configuration file (solr.xml for multicore
+ * deployments or solrconfig.xml for single core deployments).
+ *
+ * @return a <code>String</code> representing a path to the main Solr config file.
+ */
+ public String getSolrConfigPath() {
+ return solrConfigPath;
+ }
+
+ /**
+ * get the default core name to use for the Solr server
+ *
+ * @return a <code>String</code> representing the core name
+ */
+ public String getCoreName() {
+ return coreName;
+ }
+
+ /**
+ * get the {@link org.apache.jackrabbit.oak.plugins.index.solr.configuration.EmbeddedSolrServerConfiguration.HttpConfiguration} holding parameters for enabling Solr
+ * server with HTTP bindings
+ *
+ * @return a {@link org.apache.jackrabbit.oak.plugins.index.solr.configuration.EmbeddedSolrServerConfiguration.HttpConfiguration} or <code>null</code> if not set
+ */
+ public HttpConfiguration getHttpConfiguration() {
+ return httpConfiguration;
+ }
+
+ public class HttpConfiguration {
+ private String context;
+ private Integer httpPort;
+
+ HttpConfiguration(String context, Integer httpPort) {
+ this.context = context;
+ this.httpPort = httpPort;
+ }
+
+ public String getContext() {
+ return context;
+ }
+
+ public Integer getHttpPort() {
+ return httpPort;
+ }
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/EmbeddedSolrServerConfiguration.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/OakSolrNodeStateConfiguration.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/OakSolrNodeStateConfiguration.java?rev=1577192&r1=1577191&r2=1577192&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/OakSolrNodeStateConfiguration.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/OakSolrNodeStateConfiguration.java Thu Mar 13 15:20:59 2014
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak.plugin
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.plugins.index.solr.server.EmbeddedSolrServerProvider;
import org.apache.jackrabbit.oak.spi.query.Filter;
import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -30,7 +31,7 @@ import org.apache.jackrabbit.oak.spi.sta
* Subclasses of this should at least provide the {@link org.apache.jackrabbit.oak.spi.state.NodeState} which holds
* the configuration.
*/
-public abstract class OakSolrNodeStateConfiguration implements OakSolrConfiguration, SolrServerConfigurationProvider {
+public abstract class OakSolrNodeStateConfiguration implements OakSolrConfiguration, SolrServerConfigurationProvider<EmbeddedSolrServerProvider> {
/**
* get the {@link org.apache.jackrabbit.oak.spi.state.NodeState} which contains the properties for the Oak -
@@ -50,11 +51,6 @@ public abstract class OakSolrNodeStateCo
}
@Override
- public String getFieldForPropertyRestriction(Filter.PropertyRestriction propertyRestriction) {
- return null;
- }
-
- @Override
public String getPathField() {
return getStringValueFor(Properties.PATH_FIELD, SolrServerConfigurationDefaults.PATH_FIELD_NAME);
}
@@ -94,6 +90,11 @@ public abstract class OakSolrNodeStateCo
}
@Override
+ public String getFieldForPropertyRestriction(Filter.PropertyRestriction propertyRestriction) {
+ return null;
+ }
+
+ @Override
public CommitPolicy getCommitPolicy() {
return CommitPolicy.valueOf(getStringValueFor(Properties.COMMIT_POLICY, CommitPolicy.SOFT.toString()));
}
@@ -114,7 +115,7 @@ public abstract class OakSolrNodeStateCo
}
@Override
- public SolrServerConfiguration getSolrServerConfiguration() {
+ public SolrServerConfiguration<EmbeddedSolrServerProvider> getSolrServerConfiguration() {
String solrHomePath = getStringValueFor(Properties.SOLRHOME_PATH, SolrServerConfigurationDefaults.SOLR_HOME_PATH);
String solrConfigPath = getStringValueFor(Properties.SOLRCONFIG_PATH, SolrServerConfigurationDefaults.SOLR_CONFIG_PATH);
String coreName = getStringValueFor(Properties.CORE_NAME, SolrServerConfigurationDefaults.CORE_NAME);
@@ -122,7 +123,7 @@ public abstract class OakSolrNodeStateCo
String context = getStringValueFor(Properties.CONTEXT, SolrServerConfigurationDefaults.CONTEXT);
Integer httpPort = Integer.valueOf(getStringValueFor(Properties.HTTP_PORT, SolrServerConfigurationDefaults.HTTP_PORT));
- return new SolrServerConfiguration(solrHomePath,
+ return new EmbeddedSolrServerConfiguration(solrHomePath,
solrConfigPath, coreName).withHttpConfiguration(context, httpPort);
}
Added: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/RemoteSolrServerConfiguration.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/RemoteSolrServerConfiguration.java?rev=1577192&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/RemoteSolrServerConfiguration.java (added)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/RemoteSolrServerConfiguration.java Thu Mar 13 15:20:59 2014
@@ -0,0 +1,65 @@
+/*
+ * 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.jackrabbit.oak.plugins.index.solr.configuration;
+
+import org.apache.jackrabbit.oak.plugins.index.solr.server.RemoteSolrServerProvider;
+
+/**
+ * {@link org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfiguration} for the {@link org.apache.jackrabbit.oak.plugins.index.solr.server.RemoteSolrServerProvider}
+ */
+public class RemoteSolrServerConfiguration extends SolrServerConfiguration<RemoteSolrServerProvider> {
+
+ private final String solrConfDir;
+ private final String[] solrHttpUrls;
+ private final String solrZkHost;
+ private final String solrCollection;
+ private final int solrShardsNo;
+ private final int solrReplicationFactor;
+
+ public RemoteSolrServerConfiguration(String solrZkHost, String solrCollection, int solrShardsNo, int solrReplicationFactor, String solrConfDir, String... solrHttpUrls) {
+ this.solrHttpUrls = solrHttpUrls;
+ this.solrZkHost = solrZkHost;
+ this.solrCollection = solrCollection;
+ this.solrShardsNo = solrShardsNo;
+ this.solrConfDir = solrConfDir;
+ this.solrReplicationFactor = solrReplicationFactor;
+ }
+
+ public String[] getSolrHttpUrls() {
+ return solrHttpUrls;
+ }
+
+ public String getSolrZkHost() {
+ return solrZkHost;
+ }
+
+ public String getSolrCollection() {
+ return solrCollection;
+ }
+
+ public int getSolrShardsNo() {
+ return solrShardsNo;
+ }
+
+ public int getSolrReplicationFactor() {
+ return solrReplicationFactor;
+ }
+
+ public String getSolrConfDir() {
+ return solrConfDir;
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/RemoteSolrServerConfiguration.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfiguration.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfiguration.java?rev=1577192&r1=1577191&r2=1577192&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfiguration.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfiguration.java Thu Mar 13 15:20:59 2014
@@ -16,82 +16,50 @@
*/
package org.apache.jackrabbit.oak.plugins.index.solr.configuration;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import org.apache.jackrabbit.oak.plugins.index.solr.server.SolrServerProvider;
+
/**
* Configuration parameters for starting a {@link org.apache.solr.client.solrj.SolrServer}
*/
-public class SolrServerConfiguration {
+public abstract class SolrServerConfiguration<S extends SolrServerProvider> {
- private final String solrHomePath;
- private final String solrConfigPath;
- private final String coreName;
- private HttpConfiguration httpConfiguration;
-
- public SolrServerConfiguration(String solrHomePath, String solrConfigPath, String coreName) {
- this.solrHomePath = solrHomePath;
- this.solrConfigPath = solrConfigPath;
- this.coreName = coreName;
- }
+ private final Type type;
+ private volatile Constructor<?> constructor;
- public SolrServerConfiguration withHttpConfiguration(String context, Integer httpPort) {
- if (context != null && context.length() > 0 && httpPort != null && httpPort > 0) {
- this.httpConfiguration = new HttpConfiguration(context, httpPort);
+ protected SolrServerConfiguration() {
+ Type superclass = getClass().getGenericSuperclass();
+ if (superclass instanceof Class) {
+ throw new RuntimeException("Missing type parameter.");
}
- return this;
- }
-
- /**
- * get the Solr home path where all the configuration files are stored
- *
- * @return a <code>String</code> representing a path to the Solr home.
- */
- public String getSolrHomePath() {
- return solrHomePath;
+ this.type = ((ParameterizedType) superclass).getActualTypeArguments()[0];
}
- /**
- * get the name of the main Solr configuration file (solr.xml for multicore
- * deployments or solrconfig.xml for single core deployments).
- *
- * @return a <code>String</code> representing a path to the main Solr config file.
- */
- public String getSolrConfigPath() {
- return solrConfigPath;
+ public Type getType() {
+ return this.type;
}
- /**
- * get the default core name to use for the Solr server
- *
- * @return a <code>String</code> representing the core name
- */
- public String getCoreName() {
- return coreName;
- }
-
- /**
- * get the {@link org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfiguration.HttpConfiguration} holding parameters for enabling Solr
- * server with HTTP bindings
- *
- * @return a {@link org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfiguration.HttpConfiguration} or <code>null</code> if not set
- */
- public HttpConfiguration getHttpConfiguration() {
- return httpConfiguration;
- }
-
- public class HttpConfiguration {
- private String context;
- private Integer httpPort;
-
- HttpConfiguration(String context, Integer httpPort) {
- this.context = context;
- this.httpPort = httpPort;
- }
-
- public String getContext() {
- return context;
- }
-
- public Integer getHttpPort() {
- return httpPort;
+ public S newInstance()
+ throws NoSuchMethodException, IllegalAccessException,
+ InvocationTargetException, InstantiationException {
+ if (constructor == null) {
+ Class<?> rawType = type instanceof Class<?>
+ ? (Class<?>) type
+ : (Class<?>) ((ParameterizedType) type).getRawType();
+ Constructor<?>[] constructors = rawType.getConstructors();
+ for (Constructor<?> c: constructors) {
+ if (c.getParameterTypes().length == 1 && c.getParameterTypes()[0].equals(this.getClass())) {
+ constructor = c;
+ }
+ }
+ if (constructor == null) {
+ throw new InstantiationException("missing constructor SolrServerProvider(SolrServerConfiguration) for type "+ rawType);
+ }
}
+ return (S) constructor.newInstance(this); // TODO : each SolrServerProvider impl. is forced to have a constructor with a SolrServerConfiguration, fix?
}
+
}
Modified: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfigurationProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfigurationProvider.java?rev=1577192&r1=1577191&r2=1577192&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfigurationProvider.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfigurationProvider.java Thu Mar 13 15:20:59 2014
@@ -16,16 +16,18 @@
*/
package org.apache.jackrabbit.oak.plugins.index.solr.configuration;
+import org.apache.jackrabbit.oak.plugins.index.solr.server.SolrServerProvider;
+
/**
* {@link org.apache.solr.client.solrj.SolrServer} configuration provider.
*/
-public interface SolrServerConfigurationProvider {
+public interface SolrServerConfigurationProvider<S extends SolrServerProvider> {
/**
- * Provide a {@lin SolrServerConfiguration} to be used to initialize a specific
+ * Provide a {@link SolrServerConfiguration} to be used to initialize a specific
* {@link org.apache.solr.client.solrj.SolrServer} implementation.
*
* @return the {@link org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfiguration} holding the configuration parameters
*/
- public SolrServerConfiguration getSolrServerConfiguration();
+ public SolrServerConfiguration<S> getSolrServerConfiguration();
}
Modified: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/package-info.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/package-info.java?rev=1577192&r1=1577191&r2=1577192&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/package-info.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/package-info.java Thu Mar 13 15:20:59 2014
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-@Version("0.16")
+@Version("0.17")
@Export(optional = "provide:=true")
package org.apache.jackrabbit.oak.plugins.index.solr.configuration;
Modified: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexEditor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexEditor.java?rev=1577192&r1=1577191&r2=1577192&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexEditor.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexEditor.java Thu Mar 13 15:20:59 2014
@@ -23,8 +23,8 @@ import org.apache.jackrabbit.oak.api.Typ
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.plugins.index.IndexEditor;
import org.apache.jackrabbit.oak.plugins.index.IndexUpdateCallback;
+import org.apache.jackrabbit.oak.plugins.index.solr.configuration.CommitPolicy;
import org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfiguration;
-import org.apache.jackrabbit.oak.plugins.index.solr.util.OakSolrUtils;
import org.apache.jackrabbit.oak.spi.commit.Editor;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -111,8 +111,7 @@ public class SolrIndexEditor implements
if (parent == null) {
try {
- OakSolrUtils.commitByPolicy(
- solrServer, configuration.getCommitPolicy());
+ commitByPolicy(solrServer, configuration.getCommitPolicy());
} catch (SolrServerException e) {
throw new CommitFailedException(
"Solr", 3, "Failed to commit changes to Solr", e);
@@ -123,6 +122,22 @@ public class SolrIndexEditor implements
}
}
+ private void commitByPolicy(SolrServer solrServer, CommitPolicy commitPolicy) throws IOException, SolrServerException {
+ switch (commitPolicy) {
+ case HARD: {
+ solrServer.commit();
+ break;
+ }
+ case SOFT: {
+ solrServer.commit(false, false, true);
+ break;
+ }
+ case AUTO: {
+ break;
+ }
+ }
+ }
+
@Override
public void propertyAdded(PropertyState after) {
propertiesChanged = true;
Added: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/EmbeddedSolrServerConfigurationProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/EmbeddedSolrServerConfigurationProvider.java?rev=1577192&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/EmbeddedSolrServerConfigurationProvider.java (added)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/EmbeddedSolrServerConfigurationProvider.java Thu Mar 13 15:20:59 2014
@@ -0,0 +1,96 @@
+/*
+ * 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.jackrabbit.oak.plugins.index.solr.osgi;
+
+import java.io.File;
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.jackrabbit.oak.plugins.index.solr.configuration.EmbeddedSolrServerConfiguration;
+import org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfiguration;
+import org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfigurationDefaults;
+import org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfigurationProvider;
+import org.apache.jackrabbit.oak.plugins.index.solr.server.EmbeddedSolrServerProvider;
+import org.osgi.service.component.ComponentContext;
+
+/**
+ * An OSGi service {@link org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfigurationProvider}
+ */
+@Component(metatype = true, immediate = true,
+ label = "Oak Solr embedded server configuration")
+@Service(value = SolrServerConfigurationProvider.class)
+@Property(name = "name", value = "embedded", propertyPrivate = true)
+public class EmbeddedSolrServerConfigurationProvider implements SolrServerConfigurationProvider<EmbeddedSolrServerProvider> {
+
+ @Property(value = SolrServerConfigurationDefaults.SOLR_HOME_PATH)
+ private static final String SOLR_HOME_PATH = "solr.home.path";
+
+ @Property(value = SolrServerConfigurationDefaults.CORE_NAME)
+ private static final String SOLR_CORE_NAME = "solr.core.name";
+
+ @Property(value = SolrServerConfigurationDefaults.SOLR_CONFIG_PATH)
+ private static final String SOLR_CONFIG_FILE = "solr.config.path";
+
+ @Property(value = SolrServerConfigurationDefaults.HTTP_PORT)
+ private static final String SOLR_HTTP_PORT = "solr.http.port";
+
+ @Property(value = SolrServerConfigurationDefaults.CONTEXT)
+ private static final String SOLR_CONTEXT = "solr.context";
+
+ private String solrHome;
+ private String solrConfigFile;
+ private String solrCoreName;
+
+ private Integer solrHttpPort;
+ private String solrContext;
+
+ private SolrServerConfiguration<EmbeddedSolrServerProvider> solrServerConfiguration;
+
+
+ @Activate
+ protected void activate(ComponentContext componentContext) throws Exception {
+ solrHome = String.valueOf(componentContext.getProperties().get(SOLR_HOME_PATH));
+ File file = new File(solrHome);
+ if (!file.exists()) {
+ assert file.createNewFile();
+ }
+ solrConfigFile = String.valueOf(componentContext.getProperties().get(SOLR_CONFIG_FILE));
+ solrCoreName = String.valueOf(componentContext.getProperties().get(SOLR_CORE_NAME));
+
+ solrHttpPort = Integer.valueOf(String.valueOf(componentContext.getProperties().get(SOLR_HTTP_PORT)));
+ solrContext = String.valueOf(componentContext.getProperties().get(SOLR_CONTEXT));
+
+ solrServerConfiguration = new EmbeddedSolrServerConfiguration(solrHome, solrConfigFile, solrCoreName).
+ withHttpConfiguration(solrContext, solrHttpPort);
+ }
+
+ @Deactivate
+ protected void deactivate() throws Exception {
+ solrHome = null;
+ solrHttpPort = null;
+ solrConfigFile = null;
+ solrCoreName = null;
+ solrContext = null;
+ }
+
+ @Override
+ public SolrServerConfiguration<EmbeddedSolrServerProvider> getSolrServerConfiguration() {
+ return solrServerConfiguration;
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/EmbeddedSolrServerConfigurationProvider.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/OakSolrConfigurationProviderService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/OakSolrConfigurationProviderService.java?rev=1577192&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/OakSolrConfigurationProviderService.java (added)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/OakSolrConfigurationProviderService.java Thu Mar 13 15:20:59 2014
@@ -0,0 +1,145 @@
+/*
+ * 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.jackrabbit.oak.plugins.index.solr.osgi;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.PropertyOption;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.jackrabbit.oak.plugins.index.solr.configuration.CommitPolicy;
+import org.apache.jackrabbit.oak.plugins.index.solr.configuration.DefaultSolrConfiguration;
+import org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfiguration;
+import org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfigurationProvider;
+import org.apache.jackrabbit.oak.spi.query.Filter;
+import org.osgi.service.component.ComponentContext;
+
+/**
+ * OSGi service for {@link org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfigurationProvider}
+ */
+@Component(label = "Oak Solr indexing / search configuration", metatype = true, immediate = true)
+@Service(OakSolrConfigurationProvider.class)
+public class OakSolrConfigurationProviderService implements OakSolrConfigurationProvider {
+
+ private static final String DEFAULT_DESC_FIELD = "path_des";
+ private static final String DEFAULT_CHILD_FIELD = "path_child";
+ private static final String DEFAULT_PARENT_FIELD = "path_anc";
+ private static final String DEFAULT_PATH_FIELD = "path_exact";
+ private static final String DEFAULT_CATCHALL_FIELD = "catch_all";
+
+ @Property(value = DEFAULT_DESC_FIELD, label = "field for descendants search")
+ private static final String PATH_DESCENDANTS_FIELD = "path.desc.field";
+
+ @Property(value = DEFAULT_CHILD_FIELD, label = "field for children search")
+ private static final String PATH_CHILDREN_FIELD = "path.child.field";
+
+ @Property(value = DEFAULT_PARENT_FIELD, label = "field for parent search")
+ private static final String PATH_PARENT_FIELD = "path.parent.field";
+
+ @Property(value = DEFAULT_PATH_FIELD, label = "field for path search")
+ private static final String PATH_EXACT_FIELD = "path.exact.field";
+
+ @Property(value = DEFAULT_CATCHALL_FIELD,label = "catch all field")
+ private static final String CATCH_ALL_FIELD = "catch.all.field";
+
+ @Property(options = {
+ @PropertyOption(name = "HARD",
+ value = "Hard commit"
+ ),
+ @PropertyOption(name = "SOFT",
+ value = "Soft commit"
+ ),
+ @PropertyOption(name = "AUTO",
+ value = "Auto commit"
+ )},
+ value = "SOFT"
+ )
+ private static final String COMMIT_POLICY = "commit.policy";
+
+ private String pathChildrenFieldName;
+ private String pathParentFieldName;
+ private String pathDescendantsFieldName;
+ private String pathExactFieldName;
+ private String catchAllField;
+ private CommitPolicy commitPolicy;
+
+ private OakSolrConfiguration oakSolrConfiguration;
+
+ @Activate
+ protected void activate(ComponentContext componentContext) throws Exception {
+ pathChildrenFieldName = String.valueOf(componentContext.getProperties().get(PATH_CHILDREN_FIELD));
+ pathParentFieldName = String.valueOf(componentContext.getProperties().get(PATH_PARENT_FIELD));
+ pathExactFieldName = String.valueOf(componentContext.getProperties().get(PATH_EXACT_FIELD));
+ pathDescendantsFieldName = String.valueOf(componentContext.getProperties().get(PATH_DESCENDANTS_FIELD));
+ catchAllField = String.valueOf(componentContext.getProperties().get(CATCH_ALL_FIELD));
+ commitPolicy = CommitPolicy.valueOf(String.valueOf(componentContext.getProperties().get(COMMIT_POLICY)));
+ }
+
+ @Override
+ public OakSolrConfiguration getConfiguration() {
+ if (oakSolrConfiguration == null) {
+ // extend DefaultOakSolrConfiguration
+ oakSolrConfiguration = new DefaultSolrConfiguration() {
+
+ @Override
+ public String getPathField() {
+ return pathExactFieldName;
+ }
+
+ @Override
+ public String getFieldForPathRestriction(Filter.PathRestriction pathRestriction) {
+ String fieldName = null;
+ switch (pathRestriction) {
+ case ALL_CHILDREN: {
+ fieldName = pathDescendantsFieldName;
+ break;
+ }
+ case DIRECT_CHILDREN: {
+ fieldName = pathChildrenFieldName;
+ break;
+ }
+ case EXACT: {
+ fieldName = pathExactFieldName;
+ break;
+ }
+ case PARENT: {
+ fieldName = pathParentFieldName;
+ break;
+ }
+ case NO_RESTRICTION:
+ break;
+ default:
+ break;
+
+ }
+ return fieldName;
+ }
+
+ @Override
+ public CommitPolicy getCommitPolicy() {
+ return commitPolicy;
+ }
+
+ @Override
+ public String getCatchAllField() {
+ return catchAllField;
+ }
+ };
+ }
+ return oakSolrConfiguration;
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/OakSolrConfigurationProviderService.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/RemoteSolrServerConfigurationProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/RemoteSolrServerConfigurationProvider.java?rev=1577192&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/RemoteSolrServerConfigurationProvider.java (added)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/RemoteSolrServerConfigurationProvider.java Thu Mar 13 15:20:59 2014
@@ -0,0 +1,96 @@
+/*
+ * 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.jackrabbit.oak.plugins.index.solr.osgi;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.jackrabbit.oak.plugins.index.solr.configuration.RemoteSolrServerConfiguration;
+import org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfiguration;
+import org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfigurationProvider;
+import org.apache.jackrabbit.oak.plugins.index.solr.server.RemoteSolrServerProvider;
+import org.osgi.service.component.ComponentContext;
+
+/**
+ * {@link org.apache.jackrabbit.oak.plugins.index.solr.server.SolrServerProvider} for remote Solr installations.
+ */
+@Component(metatype = true, immediate = true, label = "Oak Solr remote server configuration")
+@Service(SolrServerConfigurationProvider.class)
+@Property(name = "name", value = "remote", propertyPrivate = true)
+public class RemoteSolrServerConfigurationProvider implements SolrServerConfigurationProvider<RemoteSolrServerProvider> {
+
+ private static final String DEFAULT_COLLECTION = "oak";
+ private static final String DEFAULT_HTTP_URL = "";
+ private static final String DEFAULT_ZK_HOST = "";
+ private static final int DEFAULT_SHARDS_NO = 2;
+ private static final int DEFAULT_REPLICATION_FACTOR = 2;
+
+ @Property(value = DEFAULT_HTTP_URL, label = "Solr HTTP URL")
+ private static final String SOLR_HTTP_URL = "solr.http.url";
+
+ @Property(value = DEFAULT_ZK_HOST, label = "ZooKeeper host")
+ private static final String SOLR_ZK_HOST = "solr.zk.host";
+
+ @Property(value = DEFAULT_COLLECTION, label = "Solr collection")
+ private static final String SOLR_COLLECTION = "solr.collection";
+
+ @Property(intValue = DEFAULT_SHARDS_NO, label = "No. of collection shards")
+ private static final String SOLR_SHARDS_NO = "solr.shards.no";
+
+ @Property(intValue = DEFAULT_REPLICATION_FACTOR, label = "Replication factor")
+ private static final String SOLR_REPLICATION_FACTOR = "solr.replication.factor";
+
+ @Property(value = "", label = "Solr configuration directory")
+ private static final String SOLR_CONF_DIR = "solr.conf.dir";
+
+ private String solrHttpUrl;
+ private String solrZkHost;
+ private String solrCollection;
+ private int solrShardsNo;
+ private int solrReplicationFactor;
+ private String solrConfDir;
+ private RemoteSolrServerConfiguration remoteSolrServerConfiguration;
+
+ @Activate
+ protected void activate(ComponentContext componentContext) throws Exception {
+ solrHttpUrl = String.valueOf(componentContext.getProperties().get(SOLR_HTTP_URL));
+ solrZkHost = String.valueOf(componentContext.getProperties().get(SOLR_ZK_HOST));
+ solrCollection = String.valueOf(componentContext.getProperties().get(SOLR_COLLECTION));
+ solrShardsNo = Integer.valueOf(componentContext.getProperties().get(SOLR_SHARDS_NO).toString());
+ solrReplicationFactor = Integer.valueOf(componentContext.getProperties().get(SOLR_REPLICATION_FACTOR).toString());
+ solrConfDir = String.valueOf(componentContext.getProperties().get(SOLR_CONF_DIR));
+ remoteSolrServerConfiguration = new RemoteSolrServerConfiguration(solrZkHost, solrCollection, solrShardsNo, solrReplicationFactor, solrConfDir, solrHttpUrl);
+ }
+
+ @Deactivate
+ protected void deactivate() throws Exception {
+ solrHttpUrl = null;
+ solrZkHost = null;
+ solrCollection = null;
+ solrShardsNo = 0;
+ solrReplicationFactor = 0;
+ solrConfDir = null;
+ }
+
+
+ @Override
+ public SolrServerConfiguration<RemoteSolrServerProvider> getSolrServerConfiguration() {
+ return remoteSolrServerConfiguration;
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/RemoteSolrServerConfigurationProvider.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrIndexEditorProviderService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrIndexEditorProviderService.java?rev=1577192&r1=1577191&r2=1577192&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrIndexEditorProviderService.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrIndexEditorProviderService.java Thu Mar 13 15:20:59 2014
@@ -33,32 +33,29 @@ import org.apache.jackrabbit.oak.spi.sta
/**
* Osgi Service that provides Solr based {@link org.apache.jackrabbit.oak.plugins.index.IndexEditor}s
- *
+ *
* @see org.apache.jackrabbit.oak.plugins.index.solr.index.SolrIndexEditorProvider
* @see org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider
*/
@Component(metatype = false, immediate = true)
@Service(value = IndexEditorProvider.class)
public class SolrIndexEditorProviderService implements IndexEditorProvider {
-
+
@Reference
private SolrServerProvider solrServerProvider;
@Reference
private OakSolrConfigurationProvider oakSolrConfigurationProvider;
- private SolrIndexEditorProvider solrIndexEditorProvider;
-
@Override
@CheckForNull
- public Editor getIndexEditor(@Nonnull String type, @Nonnull NodeBuilder definition,
- @Nonnull NodeState root, @Nonnull IndexUpdateCallback callback) throws CommitFailedException {
- Editor indexEditor = null;
- if (solrServerProvider != null && oakSolrConfigurationProvider != null && solrIndexEditorProvider == null) {
- solrIndexEditorProvider = new SolrIndexEditorProvider(solrServerProvider, oakSolrConfigurationProvider);
- indexEditor = solrIndexEditorProvider.getIndexEditor(type, definition, root, callback);
+ public Editor getIndexEditor(@Nonnull String type, @Nonnull NodeBuilder definition,
+ @Nonnull NodeState root, @Nonnull IndexUpdateCallback callback) throws CommitFailedException {
+ if (solrServerProvider != null && oakSolrConfigurationProvider != null) {
+ return new SolrIndexEditorProvider(solrServerProvider,
+ oakSolrConfigurationProvider).getIndexEditor(type, definition, root, callback);
+ } else {
+ return null;
}
- return indexEditor;
}
-
}
Modified: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrQueryIndexProviderService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrQueryIndexProviderService.java?rev=1577192&r1=1577191&r2=1577192&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrQueryIndexProviderService.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrQueryIndexProviderService.java Thu Mar 13 15:20:59 2014
@@ -31,7 +31,7 @@ import org.apache.jackrabbit.oak.spi.sta
/**
* Osgi Service that provides Solr based {@link org.apache.jackrabbit.oak.spi.query.QueryIndex}es
- *
+ *
* @see org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndexProvider
* @see QueryIndexProvider
*/
@@ -45,19 +45,15 @@ public class SolrQueryIndexProviderServi
@Reference
private OakSolrConfigurationProvider oakSolrConfigurationProvider;
- private SolrQueryIndexProvider solrQueryIndexProvider;
-
@Override
@Nonnull
public List<? extends QueryIndex> getQueryIndexes(NodeState nodeState) {
- List<? extends QueryIndex> queryIndexes = new ArrayList<QueryIndex>();
- if (solrServerProvider != null && oakSolrConfigurationProvider != null
- && solrQueryIndexProvider == null) {
- solrQueryIndexProvider = new SolrQueryIndexProvider(solrServerProvider,
- oakSolrConfigurationProvider);
- queryIndexes = solrQueryIndexProvider.getQueryIndexes(nodeState);
+ if (solrServerProvider != null && oakSolrConfigurationProvider != null) {
+ return new SolrQueryIndexProvider(solrServerProvider,
+ oakSolrConfigurationProvider).getQueryIndexes(nodeState);
+ } else {
+ return new ArrayList<QueryIndex>();
}
- return queryIndexes;
}
}
Added: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrServerProviderService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrServerProviderService.java?rev=1577192&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrServerProviderService.java (added)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrServerProviderService.java Thu Mar 13 15:20:59 2014
@@ -0,0 +1,132 @@
+package org.apache.jackrabbit.oak.plugins.index.solr.osgi;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.PropertyOption;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.ReferencePolicy;
+import org.apache.felix.scr.annotations.References;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfiguration;
+import org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfigurationProvider;
+import org.apache.jackrabbit.oak.plugins.index.solr.server.SolrServerProvider;
+import org.apache.solr.client.solrj.SolrServer;
+import org.osgi.service.component.ComponentContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * OSGi service for {@link org.apache.jackrabbit.oak.plugins.index.solr.server.SolrServerProvider}
+ */
+@Component(metatype = true, label = "Oak Solr server provider", immediate = true)
+@References({
+ @Reference(name = "solrServerConfigurationProvider",
+ referenceInterface = SolrServerConfigurationProvider.class,
+ cardinality = ReferenceCardinality.MANDATORY_MULTIPLE,
+ policy = ReferencePolicy.DYNAMIC,
+ bind = "bindSolrServerConfigurationProvider",
+ unbind = "unbindSolrServerConfigurationProvider",
+ updated = "updateSolrServerConfigurationProvider"
+ )
+})
+@Service(SolrServerProvider.class)
+public class SolrServerProviderService implements SolrServerProvider {
+
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ @Property(options = {
+ @PropertyOption(name = "none",
+ value = "None"
+ ),
+ @PropertyOption(name = "embedded",
+ value = "Embedded Solr"
+ ),
+ @PropertyOption(name = "remote",
+ value = "Remote Solr"
+ )},
+ value = "none"
+ )
+ private static final String SERVER_TYPE = "server.type";
+
+ private final Map<String, SolrServerConfigurationProvider> solrServerConfigurationProviders = new HashMap<String, SolrServerConfigurationProvider>();
+
+ private String serverType;
+
+ private SolrServer cachedSolrServer;
+
+ private SolrServerConfiguration cachedSolrServerConfiguration;
+
+ @Activate
+ protected void activate(ComponentContext context) throws Exception {
+ serverType = String.valueOf(context.getProperties().get(SERVER_TYPE));
+ }
+
+ @Deactivate
+ protected void deactivate() throws Exception {
+ solrServerConfigurationProviders.clear();
+ if (cachedSolrServer != null) {
+ try {
+ cachedSolrServer.shutdown();
+ } catch (Exception e) {
+ log.error("could not correctly shutdown Solr {} server {}", serverType, cachedSolrServer);
+ } finally {
+ cachedSolrServer = null;
+ }
+ }
+ }
+
+ protected void bindSolrServerConfigurationProvider(final SolrServerConfigurationProvider solrServerConfigurationProvider, Map<String, Object> properties) {
+ synchronized (solrServerConfigurationProviders) {
+ String name = String.valueOf(properties.get("name"));
+ solrServerConfigurationProviders.put(name, solrServerConfigurationProvider);
+ }
+ }
+
+ protected void unbindSolrServerConfigurationProvider(final SolrServerConfigurationProvider solrServerConfigurationProvider, Map<String, Object> properties) {
+ synchronized (solrServerConfigurationProviders) {
+ String name = String.valueOf(properties.get("name"));
+ solrServerConfigurationProviders.remove(name);
+ }
+ }
+
+ protected void updatedSolrServerConfigurationProvider(final SolrServerConfigurationProvider solrServerConfigurationProvider, Map<String, Object> properties) {
+ synchronized (solrServerConfigurationProviders) {
+ String name = String.valueOf(properties.get("name"));
+ solrServerConfigurationProviders.put(name, solrServerConfigurationProvider);
+ }
+ }
+
+ @Override
+ public SolrServer getSolrServer() throws Exception {
+ SolrServer solrServer = null;
+ synchronized (solrServerConfigurationProviders) {
+ if (serverType != null && !"none".equals(serverType)) {
+ SolrServerConfigurationProvider solrServerConfigurationProvider = solrServerConfigurationProviders.get(serverType);
+ try {
+ if (solrServerConfigurationProvider != null) {
+ SolrServerConfiguration solrServerConfiguration = solrServerConfigurationProvider.getSolrServerConfiguration();
+ if (solrServerConfiguration != cachedSolrServerConfiguration) {
+ SolrServerProvider solrServerProvider = solrServerConfiguration.newInstance();
+ cachedSolrServerConfiguration = solrServerConfiguration;
+ if (cachedSolrServer != null) {
+ cachedSolrServer.shutdown();
+ }
+ cachedSolrServer = solrServerProvider.getSolrServer();
+ } else {
+ solrServer = cachedSolrServer;
+ }
+ }
+ } catch (Exception e) {
+ log.error("could not get a SolrServerProvider of type {}, {}", serverType, e);
+ }
+ }
+ }
+ return solrServer;
+ }
+
+}
Propchange: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/osgi/SolrServerProviderService.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java?rev=1577192&r1=1577191&r2=1577192&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndex.java Thu Mar 13 15:20:59 2014
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak.plugin
import java.util.Collection;
import javax.annotation.CheckForNull;
+import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.oak.api.PropertyValue;
import org.apache.jackrabbit.oak.plugins.index.aggregate.NodeAggregator;
import org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfiguration;
@@ -68,7 +69,8 @@ public class SolrQueryIndex implements F
@Override
public double getCost(Filter filter, NodeState root) {
- if (filter.getFullTextConstraint() == null && filter.getFulltextConditions() == null) {
+ if (filter.getFullTextConstraint() == null && filter.getFulltextConditions() == null ||
+ (filter.getPropertyRestrictions() != null && filter.getPropertyRestrictions().size() == 1 && filter.getPropertyRestriction(JcrConstants.JCR_UUID) != null)) {
return Double.POSITIVE_INFINITY;
}
int cost = 10;
@@ -213,10 +215,13 @@ public class SolrQueryIndex implements F
private void setDefaults(SolrQuery solrQuery) {
solrQuery.setParam("q.op", "AND");
- solrQuery.setParam("df", configuration.getCatchAllField());
+ String catchAllField = configuration.getCatchAllField();
+ if (catchAllField != null && catchAllField.length() > 0) {
+ solrQuery.setParam("df", catchAllField);
+ }
// TODO : can we handle this better? e.g. with deep paging support?
- solrQuery.setParam("rows", String.valueOf(Integer.MAX_VALUE));
+ solrQuery.setParam("rows", "100000");
}
private static String createRangeQuery(String first, String last, boolean firstIncluding, boolean lastIncluding) {
Added: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/EmbeddedSolrServerProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/EmbeddedSolrServerProvider.java?rev=1577192&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/EmbeddedSolrServerProvider.java (added)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/EmbeddedSolrServerProvider.java Thu Mar 13 15:20:59 2014
@@ -0,0 +1,215 @@
+/*
+ * 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.jackrabbit.oak.plugins.index.solr.server;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+import org.apache.jackrabbit.oak.commons.IOUtils;
+import org.apache.jackrabbit.oak.plugins.index.solr.configuration.EmbeddedSolrServerConfiguration;
+import org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfigurationDefaults;
+import org.apache.solr.client.solrj.SolrServer;
+import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
+import org.apache.solr.client.solrj.embedded.JettySolrRunner;
+import org.apache.solr.client.solrj.impl.HttpSolrServer;
+import org.apache.solr.core.CoreContainer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Default implementation of {@link org.apache.jackrabbit.oak.plugins.index.solr.server.SolrServerProvider} which uses an
+ * {@link EmbeddedSolrServer} configured as per passed {@link org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfiguration}.
+ */
+public class EmbeddedSolrServerProvider implements SolrServerProvider {
+
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ private final EmbeddedSolrServerConfiguration solrServerConfiguration;
+
+ public EmbeddedSolrServerProvider(EmbeddedSolrServerConfiguration solrServerConfiguration) {
+ this.solrServerConfiguration = solrServerConfiguration;
+ }
+
+ private SolrServer solrServer;
+
+ private SolrServer createSolrServer() throws Exception {
+
+ String solrHomePath = solrServerConfiguration.getSolrHomePath();
+ String coreName = solrServerConfiguration.getCoreName();
+ String solrConfigPath = solrServerConfiguration.getSolrConfigPath();
+ EmbeddedSolrServerConfiguration.HttpConfiguration httpConfiguration = solrServerConfiguration.getHttpConfiguration();
+
+
+ if (solrConfigPath != null && solrHomePath != null && coreName != null) {
+ checkSolrConfiguration(solrHomePath, solrConfigPath, coreName);
+ if (httpConfiguration != null) {
+ if (log.isInfoEnabled()) {
+ log.info("starting embedded Solr server with http bindings");
+ }
+ ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(JettySolrRunner.class.getClassLoader());
+
+ Integer httpPort = httpConfiguration.getHttpPort();
+ String context = httpConfiguration.getContext();
+ JettySolrRunner jettySolrRunner = null;
+ try {
+ jettySolrRunner = new JettySolrRunner(solrHomePath, context, httpPort, "solrconfig.xml", "schema.xml", true);
+ if (log.isInfoEnabled()) {
+ log.info("Jetty runner instantiated");
+ }
+ jettySolrRunner.start(true);
+ if (log.isInfoEnabled()) {
+ log.info("Jetty runner started");
+ }
+ } catch (Exception t) {
+ if (log.isErrorEnabled()) {
+ log.error("an error has occurred while starting Solr Jetty", t);
+ }
+ } finally {
+ if (jettySolrRunner != null && !jettySolrRunner.isRunning()) {
+ try {
+ jettySolrRunner.stop();
+ if (log.isInfoEnabled()) {
+ log.info("Jetty runner stopped");
+ }
+ } catch (Exception e) {
+ if (log.isErrorEnabled()) {
+ log.error("error while stopping the Jetty runner", e);
+ }
+ }
+ }
+ Thread.currentThread().setContextClassLoader(classLoader);
+ }
+ if (log.isInfoEnabled()) {
+ log.info("starting HTTP Solr server");
+ }
+ HttpSolrServer httpSolrServer = new HttpSolrServer(new StringBuilder(
+ SolrServerConfigurationDefaults.LOCAL_BASE_URL).append(':')
+ .append(httpPort).append(context)
+ .append('/').append(coreName)
+ .toString());
+ return httpSolrServer;
+ } else {
+ ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(CoreContainer.class.getClassLoader());
+
+ CoreContainer coreContainer = new CoreContainer(solrHomePath);
+ try {
+ coreContainer.load();
+ } finally {
+ Thread.currentThread().setContextClassLoader(classLoader);
+ }
+
+ EmbeddedSolrServer server = new EmbeddedSolrServer(coreContainer, coreName);
+ if (server.ping().getStatus() == 0) {
+ return server;
+ } else {
+ throw new IOException("the embedded Solr server is not alive");
+ }
+ }
+ } else {
+ throw new Exception("SolrServer configuration proprties not set");
+ }
+ }
+
+ private void checkSolrConfiguration(String solrHomePath, String solrConfigPath, String coreName) throws IOException {
+
+ // check if solrHomePath exists
+ File solrHomePathFile = new File(solrHomePath);
+ if (!solrHomePathFile.exists()) {
+ if (!solrHomePathFile.mkdirs()) {
+ throw new IOException("could not create solrHomePath directory");
+ } else {
+ // copy all the needed files to the just created directory
+ copy("/solr/solr.xml", solrHomePath);
+ copy("/solr/zoo.cfg", solrHomePath);
+ if (!new File(solrHomePath + "/" + coreName + "/conf").mkdirs()) {
+ throw new IOException("could not create nested core directory in solrHomePath");
+ }
+ String coreDir = solrHomePath + "/" + coreName + "/conf/";
+ copy("/solr/oak/conf/currency.xml", coreDir);
+ copy("/solr/oak/conf/schema.xml", coreDir);
+ copy("/solr/oak/conf/solrconfig.xml", coreDir);
+ }
+ } else if (!solrHomePathFile.isDirectory()) {
+ throw new IOException("a non directory file with the specified name already exists for the given solrHomePath '"+solrHomePath);
+ }
+
+ // TODO : improve this check
+ // check if solrConfigPath exists
+// File solrConfigPathFile = new File(solrConfigPath);
+// if (!solrConfigPathFile.exists()) {
+// if (solrConfigPathFile.createNewFile()) {
+// copy("/solr/solr.xml", solrConfigPathFile.getAbsolutePath());
+// }
+// }
+
+ // check if the a core with the given coreName exists
+ // TODO : improve this check
+ String[] files = new File(solrHomePath).list();
+ Arrays.sort(files);
+ if (Arrays.binarySearch(files, coreName) < 0) {
+ throw new IOException("could not find a directory with the coreName '" + coreName
+ + "' in the solrHomePath '" + solrHomePath + "'");
+ }
+
+
+ }
+
+ private void copy(String resource, String dir) throws IOException {
+ String fileName = dir + resource.substring(resource.lastIndexOf("/"));
+ File outputFile = new File(fileName);
+ if (outputFile.createNewFile()) {
+ InputStream inputStream = null;
+ FileOutputStream outputStream = null;
+ try {
+ inputStream = getClass().getResourceAsStream(resource);
+ outputStream = new FileOutputStream(outputFile);
+ IOUtils.copy(inputStream, outputStream);
+ } finally {
+ if (inputStream != null) {
+ try {
+ inputStream.close();
+ } catch (Exception e) {
+ // do nothing
+ }
+ }
+ if (outputStream != null) {
+ try {
+ outputStream.close();
+ } catch (Exception e) {
+ // do nothing
+ }
+ }
+ }
+ }
+
+ }
+
+ @Override
+ public SolrServer getSolrServer() throws Exception {
+ synchronized (this) {
+ if (solrServer == null) {
+ solrServer = createSolrServer();
+ }
+ }
+ return solrServer;
+ }
+
+}
Propchange: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/EmbeddedSolrServerProvider.java
------------------------------------------------------------------------------
svn:eol-style = native