You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ss...@apache.org on 2016/06/15 21:08:58 UTC
[2/8] phoenix git commit: PHOENIX-2535 Create shaded clients (thin +
thick)
PHOENIX-2535 Create shaded clients (thin + thick)
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/4f6ee74c
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/4f6ee74c
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/4f6ee74c
Branch: refs/heads/master
Commit: 4f6ee74c0a7b94282575300cfd698e78198685fb
Parents: b7b7706
Author: Sergey Soldatov <ss...@apache.org>
Authored: Wed Jun 15 12:57:59 2016 -0700
Committer: Sergey Soldatov <ss...@apache.org>
Committed: Wed Jun 15 12:57:59 2016 -0700
----------------------------------------------------------------------
bin/log4j.properties | 2 +-
bin/phoenix_utils.py | 12 +-
bin/queryserver.py | 2 +-
bin/tephra | 4 +-
phoenix-assembly/pom.xml | 89 +----
phoenix-assembly/src/build/client-minimal.xml | 38 --
phoenix-assembly/src/build/client-spark.xml | 74 ----
.../src/build/client-without-hbase.xml | 40 --
phoenix-assembly/src/build/client.xml | 98 -----
.../src/build/components-major-client.xml | 57 ---
.../src/build/components-minimal.xml | 77 ----
.../src/build/components/all-common-jars.xml | 42 +-
phoenix-assembly/src/build/server.xml | 53 ---
phoenix-client/pom.xml | 381 +++++++++++++++++++
.../phoenix/query/QueryServicesOptions.java | 2 +-
phoenix-hive/pom.xml | 4 +
phoenix-queryserver-client/pom.xml | 143 +++++++
.../phoenix/queryserver/client/Driver.java | 49 +++
.../queryserver/client/ThinClientUtil.java | 42 ++
.../resources/META-INF/services/java.sql.Driver | 1 +
.../org-apache-phoenix-remote-jdbc.properties | 25 ++
phoenix-queryserver/pom.xml | 149 ++++++++
.../src/build/query-server-runnable.xml | 52 +++
.../phoenix/end2end/QueryServerBasicsIT.java | 164 ++++++++
.../phoenix/end2end/QueryServerThread.java | 45 +++
.../src/it/resources/log4j.properties | 63 +++
.../apache/phoenix/queryserver/server/Main.java | 236 ++++++++++++
.../queryserver/server/PhoenixMetaFactory.java | 28 ++
.../server/PhoenixMetaFactoryImpl.java | 76 ++++
.../apache/phoenix/DriverCohabitationTest.java | 65 ++++
phoenix-server-client/pom.xml | 66 ----
phoenix-server-client/src/build/thin-client.xml | 49 ---
.../phoenix/queryserver/client/Driver.java | 49 ---
.../queryserver/client/ThinClientUtil.java | 42 --
.../resources/META-INF/services/java.sql.Driver | 1 -
.../org-apache-phoenix-remote-jdbc.properties | 25 --
phoenix-server/pom.xml | 184 +++++----
.../src/build/query-server-runnable.xml | 52 ---
.../phoenix/end2end/QueryServerBasicsIT.java | 164 --------
.../phoenix/end2end/QueryServerThread.java | 45 ---
.../src/it/resources/log4j.properties | 63 ---
.../apache/phoenix/queryserver/server/Main.java | 236 ------------
.../queryserver/server/PhoenixMetaFactory.java | 28 --
.../server/PhoenixMetaFactoryImpl.java | 76 ----
.../apache/phoenix/DriverCohabitationTest.java | 65 ----
pom.xml | 20 +-
46 files changed, 1722 insertions(+), 1556 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/bin/log4j.properties
----------------------------------------------------------------------
diff --git a/bin/log4j.properties b/bin/log4j.properties
index 3f7760a..2d007e1 100644
--- a/bin/log4j.properties
+++ b/bin/log4j.properties
@@ -28,7 +28,7 @@ hadoop.log.dir=.
# Define the root logger to the system property "plsql.root.logger".
log4j.rootLogger=${psql.root.logger}
-# Logging Threshold to INFO for query-server. root logger still at WARN for sqlline clients.
+# Logging Threshold to INFO for queryserver. root logger still at WARN for sqlline clients.
log4j.threshold=INFO
#
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/bin/phoenix_utils.py
----------------------------------------------------------------------
diff --git a/bin/phoenix_utils.py b/bin/phoenix_utils.py
index 6b00d5f..2da094f 100755
--- a/bin/phoenix_utils.py
+++ b/bin/phoenix_utils.py
@@ -70,7 +70,7 @@ def findClasspath(command_name):
def setPath():
PHOENIX_CLIENT_JAR_PATTERN = "phoenix-*-client.jar"
PHOENIX_THIN_CLIENT_JAR_PATTERN = "phoenix-*-thin-client.jar"
- PHOENIX_QUERYSERVER_JAR_PATTERN = "phoenix-server-*-runnable.jar"
+ PHOENIX_QUERYSERVER_JAR_PATTERN = "phoenix-*-queryserver.jar"
PHOENIX_TRACESERVER_JAR_PATTERN = "phoenix-tracing-webapp-*-runnable.jar"
PHOENIX_TESTS_JAR_PATTERN = "phoenix-core-*-tests*.jar"
PHOENIX_PHERF_JAR_PATTERN = "phoenix-pherf-*-minimal*.jar"
@@ -107,7 +107,7 @@ def setPath():
pherf_conf_path = os.path.join(current_dir, "..", "phoenix-pherf", "config")
global phoenix_jar_path
- phoenix_jar_path = os.path.join(current_dir, "..", "phoenix-assembly", "target","*")
+ phoenix_jar_path = os.path.join(current_dir, "..", "phoenix-client", "target","*")
global phoenix_client_jar
phoenix_client_jar = find("phoenix-*-client.jar", phoenix_jar_path)
@@ -137,13 +137,13 @@ def setPath():
hadoop_classpath = os.getenv('HADOOP_CLASSPATH', '')
global hadoop_common_jar_path
- hadoop_common_jar_path = os.path.join(current_dir, "..", "phoenix-assembly", "target","*")
+ hadoop_common_jar_path = os.path.join(current_dir, "..", "phoenix-client", "target","*")
global hadoop_common_jar
hadoop_common_jar = find("hadoop-common*.jar", hadoop_common_jar_path)
global hadoop_hdfs_jar_path
- hadoop_hdfs_jar_path = os.path.join(current_dir, "..", "phoenix-assembly", "target","*")
+ hadoop_hdfs_jar_path = os.path.join(current_dir, "..", "phoenix-client", "target","*")
global hadoop_hdfs_jar
hadoop_hdfs_jar = find("hadoop-hdfs*.jar", hadoop_hdfs_jar_path)
@@ -156,7 +156,7 @@ def setPath():
testjar = find(PHOENIX_TESTS_JAR_PATTERN, phoenix_class_path)
global phoenix_queryserver_jar
- phoenix_queryserver_jar = find(PHOENIX_QUERYSERVER_JAR_PATTERN, os.path.join(current_dir, "..", "phoenix-server", "target", "*"))
+ phoenix_queryserver_jar = find(PHOENIX_QUERYSERVER_JAR_PATTERN, os.path.join(current_dir, "..", "phoenix-queryserver", "target", "*"))
if phoenix_queryserver_jar == "":
phoenix_queryserver_jar = findFileInPathWithoutRecursion(PHOENIX_QUERYSERVER_JAR_PATTERN, os.path.join(current_dir, "..", "lib"))
if phoenix_queryserver_jar == "":
@@ -177,7 +177,7 @@ def setPath():
phoenix_pherf_jar = findFileInPathWithoutRecursion(PHOENIX_PHERF_JAR_PATTERN, os.path.join(current_dir, ".."))
global phoenix_thin_client_jar
- phoenix_thin_client_jar = find(PHOENIX_THIN_CLIENT_JAR_PATTERN, os.path.join(current_dir, "..", "phoenix-server-client", "target", "*"))
+ phoenix_thin_client_jar = find(PHOENIX_THIN_CLIENT_JAR_PATTERN, os.path.join(current_dir, "..", "phoenix-queryserver-client", "target", "*"))
if phoenix_thin_client_jar == "":
phoenix_thin_client_jar = findFileInPathWithoutRecursion(PHOENIX_THIN_CLIENT_JAR_PATTERN, os.path.join(current_dir, ".."))
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/bin/queryserver.py
----------------------------------------------------------------------
diff --git a/bin/queryserver.py b/bin/queryserver.py
index 57ca371..1048adb 100755
--- a/bin/queryserver.py
+++ b/bin/queryserver.py
@@ -119,7 +119,7 @@ out_file_path = os.path.join(log_dir, phoenix_out_file)
# The command is run through subprocess so environment variables are automatically inherited
java_cmd = '%(java)s -cp ' + hbase_config_path + os.pathsep + hadoop_config_path + os.pathsep + \
- phoenix_utils.phoenix_queryserver_jar + os.pathsep + phoenix_utils.phoenix_client_jar + \
+ phoenix_utils.phoenix_client_jar + os.pathsep + phoenix_utils.phoenix_queryserver_jar + \
" -Dproc_phoenixserver" + \
" -Dlog4j.configuration=file:" + os.path.join(phoenix_utils.current_dir, "log4j.properties") + \
" -Dpsql.root.logger=%(root_logger)s" + \
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/bin/tephra
----------------------------------------------------------------------
diff --git a/bin/tephra b/bin/tephra
index e71ffd7..d77d33f 100755
--- a/bin/tephra
+++ b/bin/tephra
@@ -91,11 +91,11 @@ set_classpath()
export HBASE_CP
if [ -n "$HBASE_CP" ]; then
- CP=$COMP_HOME/phoenix-assembly/target/*:$HBASE_CP:$EXTRA_CLASSPATH
+ CP=$COMP_HOME/phoenix-client/target/*:$HBASE_CP:$EXTRA_CLASSPATH
else
# assume Hadoop/HBase libs are included via EXTRA_CLASSPATH
echo "WARN: could not find Hadoop and HBase libraries"
- CP=$COMP_HOME/phoenix-assembly/target/*:$EXTRA_CLASSPATH
+ CP=$COMP_HOME/phoenix-client/target/*:$EXTRA_CLASSPATH
fi
# Setup classpaths.
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-assembly/pom.xml
----------------------------------------------------------------------
diff --git a/phoenix-assembly/pom.xml b/phoenix-assembly/pom.xml
index 7ed432a..07a898a 100644
--- a/phoenix-assembly/pom.xml
+++ b/phoenix-assembly/pom.xml
@@ -20,7 +20,8 @@
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
@@ -35,72 +36,27 @@
<properties>
<top.dir>${project.basedir}/..</top.dir>
+ <maven.test.skip>true</maven.test.skip>
+ <source.skip>true</source.skip>
</properties>
<build>
<plugins>
+ <!-- No jars created for this module -->
<plugin>
- <artifactId>maven-assembly-plugin</artifactId>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
- <id>client</id>
- <phase>package</phase>
- <goals>
- <goal>single</goal>
- </goals>
- <configuration>
- <attach>false</attach>
- <finalName>phoenix-${project.version}</finalName>
- <archive>
- <index>true</index>
- <manifest>
- <addClasspath>true</addClasspath>
- <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
- <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
- </manifest>
- </archive>
- <descriptors>
- <descriptor>src/build/client.xml</descriptor>
- </descriptors>
- </configuration>
- </execution>
- <!-- Due to SPARK-8332 and Calcite's fasterxml dependency, we need a custom spark client -->
- <execution>
- <id>client-spark</id>
- <phase>package</phase>
- <goals>
- <goal>single</goal>
- </goals>
- <configuration>
- <finalName>phoenix-${project.version}</finalName>
- <attach>false</attach>
- <appendAssemblyId>true</appendAssemblyId>
- <descriptors>
- <!-- build the phoenix spark client jar -->
- <descriptor>src/build/client-spark.xml</descriptor>
- </descriptors>
- </configuration>
- </execution>
- <execution>
- <id>client-minimal</id>
- <phase>package</phase>
- <goals>
- <goal>single</goal>
- </goals>
- <configuration>
- <finalName>phoenix-${project.version}</finalName>
- <attach>false</attach>
- <appendAssemblyId>true</appendAssemblyId>
- <descriptors>
- <!--build the phoenix client jar, but without HBase code. -->
- <descriptor>src/build/client-without-hbase.xml</descriptor>
- <!-- build the phoenix client jar, but without HBase (or its depenencies). -->
- <descriptor>src/build/client-minimal.xml</descriptor>
- <!-- build the phoenix server side jar, that includes phoenix-hadoopX-compat, phoenix-hadoop-compat and antlr -->
- <descriptor>src/build/server.xml</descriptor>
- </descriptors>
- </configuration>
+ <id>default-jar</id>
+ <phase>none</phase>
+ <goals/>
</execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
<execution>
<id>package-to-tar</id>
<phase>package</phase>
@@ -137,17 +93,6 @@
</execution>
</executions>
</plugin>
- <!-- No jars created for this module -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <executions>
- <execution>
- <phase>prepare-package</phase>
- <goals />
- </execution>
- </executions>
- </plugin>
</plugins>
</build>
@@ -171,11 +116,11 @@
</dependency>
<dependency>
<groupId>org.apache.phoenix</groupId>
- <artifactId>phoenix-server</artifactId>
+ <artifactId>phoenix-queryserver</artifactId>
</dependency>
<dependency>
<groupId>org.apache.phoenix</groupId>
- <artifactId>phoenix-server-client</artifactId>
+ <artifactId>phoenix-queryserver-client</artifactId>
</dependency>
</dependencies>
</project>
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-assembly/src/build/client-minimal.xml
----------------------------------------------------------------------
diff --git a/phoenix-assembly/src/build/client-minimal.xml b/phoenix-assembly/src/build/client-minimal.xml
deleted file mode 100644
index 1cda711..0000000
--- a/phoenix-assembly/src/build/client-minimal.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version='1.0'?>
-<!--
-
- 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.
-
--->
-
-<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
- <!-- Often clients want to use Phoenix in an existing HBase environment (they have
- their own HBase version already built), so the standard HBase jar shouldn't be included
- (as with the regular client jar) as it will conflict the installed version. This
- profile does the same thing as the client.xml build, but excludes the hbase stuff. -->
- <id>client-minimal</id>
- <formats>
- <format>jar</format>
- </formats>
- <includeBaseDirectory>false</includeBaseDirectory>
- <componentDescriptors>
- <componentDescriptor>src/build/components-minimal.xml</componentDescriptor>
- </componentDescriptors>
-</assembly>
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-assembly/src/build/client-spark.xml
----------------------------------------------------------------------
diff --git a/phoenix-assembly/src/build/client-spark.xml b/phoenix-assembly/src/build/client-spark.xml
deleted file mode 100644
index 93d02ff..0000000
--- a/phoenix-assembly/src/build/client-spark.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version='1.0'?>
-<!--
-
- 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.
-
--->
-
-<!-- Due to SPARK-8332 and Calcite's fasterxml dependency, we need a custom spark client -->
-<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
- <id>client-spark</id>
- <!-- All the dependencies (unpacked) necessary to run phoenix from a single, stand-alone jar -->
- <formats>
- <format>jar</format>
- </formats>
- <includeBaseDirectory>false</includeBaseDirectory>
-
- <componentDescriptors>
- <componentDescriptor>src/build/components-minimal.xml</componentDescriptor>
- </componentDescriptors>
-
- <dependencySets>
- <dependencySet>
- <!-- Unpack all the dependencies to class files, since java doesn't support
- jar of jars for running -->
- <unpack>true</unpack>
- <!-- save these dependencies to the top-level -->
- <outputDirectory>/</outputDirectory>
- <includes>
- <include>org.apache.hbase:hbase*</include>
- <include>org.apache.htrace:htrace-core</include>
- <include>io.netty:netty-all</include>
- <include>commons-codec:commons-codec</include>
- <include>org.apache.tephra:tephra*</include>
- <include>org.apache.twill:twill*</include>
- <include>com.google.code.gson:gson*</include>
- <!-- We use a newer version of guava than HBase - this might be an issue? -->
- <include>com.google.guava:guava</include>
- <!-- HBase also pulls in these dependencies on its own, should we include-them? -->
- <include>com.google.protobuf:protobuf-java</include>
- <include>org.slf4j:slf4j-api</include>
- <include>org.apache.zookeeper:zookeeper</include>
- <include>log4j:log4j</include>
- <include>org.apache.hadoop:hadoop*</include>
- <include>commons-configuration:commons-configuration</include>
- <include>commons-io:commons-io</include>
- <include>commons-logging:commons-logging</include>
- <include>commons-lang:commons-lang</include>
- <include>commons-cli:commons-cli</include>
- <include>org.apache.commons:commons-csv</include>
- <include>commons-collections:commons-collections</include>
- <include>joda-time:joda-time</include>
- <include>org.jruby.joni:joni</include>
- <include>org.jruby.jcodings:jcodings</include>
- </includes>
- </dependencySet>
- </dependencySets>
-</assembly>
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-assembly/src/build/client-without-hbase.xml
----------------------------------------------------------------------
diff --git a/phoenix-assembly/src/build/client-without-hbase.xml b/phoenix-assembly/src/build/client-without-hbase.xml
deleted file mode 100644
index ac84762..0000000
--- a/phoenix-assembly/src/build/client-without-hbase.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version='1.0'?>
-<!--
-
- 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.
-
--->
-
-<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
- <!-- Often clients want to use Phoenix in an existing HBase environment (they have
- their own HBase version already built), so the standard HBase jar shouldn't be included
- (as with the regular client jar) as it will conflict the installed version. This
- profile does the same thing as the client.xml build, but excludes the hbase stuff. -->
- <id>client-without-hbase</id>
- <formats>
- <format>jar</format>
- </formats>
- <includeBaseDirectory>false</includeBaseDirectory>
-
- <componentDescriptors>
- <componentDescriptor>src/build/components-minimal.xml</componentDescriptor>
- <componentDescriptor>src/build/components-major-client.xml</componentDescriptor>
- </componentDescriptors>
-</assembly>
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-assembly/src/build/client.xml
----------------------------------------------------------------------
diff --git a/phoenix-assembly/src/build/client.xml b/phoenix-assembly/src/build/client.xml
deleted file mode 100644
index f9c2415..0000000
--- a/phoenix-assembly/src/build/client.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version='1.0'?>
-<!--
-
- 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.
-
--->
-
-<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
- <id>client</id>
- <!-- All the dependencies (unpacked) necessary to run phoenix from a single, stand-alone jar -->
- <formats>
- <format>jar</format>
- </formats>
- <includeBaseDirectory>false</includeBaseDirectory>
-
- <containerDescriptorHandlers>
- <containerDescriptorHandler>
- <!--
- aggregate SPI's so that things like HDFS FileSystem works in uberjar
- http://docs.oracle.com/javase/tutorial/sound/SPI-intro.html
- -->
- <handlerName>metaInf-services</handlerName>
- </containerDescriptorHandler>
- </containerDescriptorHandlers>
-
- <componentDescriptors>
- <componentDescriptor>src/build/components-minimal.xml</componentDescriptor>
- <componentDescriptor>src/build/components-major-client.xml</componentDescriptor>
- </componentDescriptors>
-
- <dependencySets>
- <dependencySet>
- <!-- Unpack all the dependencies to class files, since java doesn't support
- jar of jars for running -->
- <unpack>true</unpack>
- <!-- save these dependencies to the top-level -->
- <outputDirectory>/</outputDirectory>
- <includes>
- <include>jline:jline</include>
- <include>sqlline:sqlline</include>
- <include>org.apache.hbase:hbase*</include>
- <include>org.apache.htrace:htrace-core</include>
- <include>io.netty:netty-all</include>
- <include>commons-codec:commons-codec</include>
- <include>org.apache.tephra:tephra*</include>
- <include>org.apache.twill:twill*</include>
- <include>org.apache.thrift:*</include>
- <include>com.google.code.gson:gson*</include>
- </includes>
- </dependencySet>
-
- <!-- Make sure we get all the components, not just the minimal client ones (e.g.
- phoenix-flume, phoenix-pig, etc). We should exclude phoenix-server and
- phoenix-server-client in the future, see PHOENIX-2032, PHOENIX-2038 -->
- <dependencySet>
- <outputDirectory>/</outputDirectory>
- <unpack>true</unpack>
- <!-- multiple deps provide some variant of LICENSE files/directories. These
- overwrite each other at best, at worst conflict on case-insensitive
- filesystems like HDFS+ and FAT32. Just exclude them -->
- <unpackOptions>
- <excludes>
- <exclude>*license*</exclude>
- <exclude>*LICENSE*</exclude>
- <exclude>**/license/**</exclude>
- <exclude>**/LICENSE/**</exclude>
- </excludes>
- </unpackOptions>
- <!-- this is default, but make intentions clear -->
- <useTransitiveDependencies>true</useTransitiveDependencies>
- <!-- "When <include> subelements are present, they define a set of
- artifact coordinates to include. If none is present, then <includes>
- represents all valid values"
- https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html#class_dependencySet
- This means bring in all dependencies transitively of the
- phoenix-assembly module.
- -->
- <includes />
- </dependencySet>
- </dependencySets>
-</assembly>
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-assembly/src/build/components-major-client.xml
----------------------------------------------------------------------
diff --git a/phoenix-assembly/src/build/components-major-client.xml b/phoenix-assembly/src/build/components-major-client.xml
deleted file mode 100644
index 7a2909b..0000000
--- a/phoenix-assembly/src/build/components-major-client.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version='1.0'?>
-<!--
-
- 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.
-
--->
-
-<component>
- <!-- Components that the client needs (except for HBase) -->
- <dependencySets>
- <dependencySet>
- <!-- Unpack all the dependencies to class files, since java doesn't support
- jar of jars for running -->
- <unpack>true</unpack>
- <!-- save these dependencies to the top-level -->
- <outputDirectory>/</outputDirectory>
- <!-- Maybe a blacklist is easier? -->
- <includes>
- <!-- We use a newer version of guava than HBase - this might be an issue? -->
- <include>com.google.guava:guava</include>
- <!-- HBase also pulls in these dependencies on its own, should we include-them? -->
- <include>com.google.protobuf:protobuf-java</include>
- <include>org.slf4j:slf4j-api</include>
- <include>org.apache.zookeeper:zookeeper</include>
- <include>log4j:log4j</include>
- <include>org.apache.hadoop:hadoop*</include>
- <include>commons-configuration:commons-configuration</include>
- <include>commons-io:commons-io</include>
- <include>commons-logging:commons-logging</include>
- <include>commons-lang:commons-lang</include>
- <include>commons-cli:commons-cli</include>
- <include>org.apache.commons:commons-csv</include>
- <include>org.codehaus.jackson:jackson-mapper-asl</include>
- <include>org.codehaus.jackson:jackson-core-asl</include>
- <include>commons-collections:commons-collections</include>
- <include>joda-time:joda-time</include>
- <include>org.jruby.joni:joni</include>
- <include>org.jruby.jcodings:jcodings</include>
- </includes>
- </dependencySet>
- </dependencySets>
-</component>
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-assembly/src/build/components-minimal.xml
----------------------------------------------------------------------
diff --git a/phoenix-assembly/src/build/components-minimal.xml b/phoenix-assembly/src/build/components-minimal.xml
deleted file mode 100644
index a3d1304..0000000
--- a/phoenix-assembly/src/build/components-minimal.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version='1.0'?>
-<!--
-
- 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.
-
--->
-
-<component>
- <!-- Just the basic components that Phoenix pulls in, that is not a transitive dependency from Hadoop/HBase/Pig -->
- <dependencySets>
- <dependencySet>
- <!-- Unpack all the dependencies to class files, since java doesn't support
- jar of jars for running -->
- <unpack>true</unpack>
- <!-- save these dependencies to the top-level -->
- <outputDirectory>/</outputDirectory>
- <!-- Just include the extra things that phoenix needs -->
- <includes>
- <include>org.antlr:antlr*</include>
- </includes>
- </dependencySet>
-
- <dependencySet>
- <outputDirectory>/</outputDirectory>
- <unpack>true</unpack>
- <includes>
- <include>org.apache.phoenix:phoenix-*</include>
- <include>org.iq80.snappy:snappy</include>
- </includes>
- <excludes>
- <exclude>org.apache.phoenix:phoenix-flume</exclude>
- <exclude>org.apache.phoenix:phoenix-pig</exclude>
- <exclude>org.apache.phoenix:phoenix-server</exclude>
- <exclude>org.apache.phoenix:phoenix-server-client</exclude>
- </excludes>
- </dependencySet>
- </dependencySets>
-
- <fileSets>
- <fileSet>
- <!--Get misc project files -->
- <directory>${project.basedir}/..</directory>
- <outputDirectory>/</outputDirectory>
- <includes>
- <include>*.txt*</include>
- <include>*.md</include>
- <include>NOTICE*</include>
- </includes>
- <excludes>
- <exclude>build.txt</exclude>
- </excludes>
- </fileSet>
- <fileSet>
- <!--Get map-red-config properties files -->
- <directory>${project.basedir}/../config</directory>
- <outputDirectory>/</outputDirectory>
- <includes>
- <include>csv-bulk-load-config.properties</include>
- </includes>
- </fileSet>
- </fileSets>
-</component>
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-assembly/src/build/components/all-common-jars.xml
----------------------------------------------------------------------
diff --git a/phoenix-assembly/src/build/components/all-common-jars.xml b/phoenix-assembly/src/build/components/all-common-jars.xml
index 960c3c9..3d334db 100644
--- a/phoenix-assembly/src/build/components/all-common-jars.xml
+++ b/phoenix-assembly/src/build/components/all-common-jars.xml
@@ -24,22 +24,44 @@
<!-- Add the client & mapreduce jars. Expects the client jar packaging phase to already be run,
which is determined by specification order in the pom. -->
<fileSet>
- <directory>target</directory>
+ <directory>${project.basedir}/../phoenix-client/target</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>phoenix-*-client.jar</include>
+ </includes>
+ </fileSet>
+ <fileSet>
+ <directory>${project.basedir}/../phoenix-server/target</directory>
+ <outputDirectory>/</outputDirectory>
+ <includes>
<include>phoenix-*-server.jar</include>
- <include>phoenix-*-mapreduce.jar</include>
</includes>
</fileSet>
<fileSet>
- <directory>${project.basedir}/../phoenix-server-client/target/</directory>
+ <directory>${project.basedir}/../phoenix-queryserver/target/</directory>
+ <outputDirectory>/</outputDirectory>
+ <includes>
+ <include>phoenix-*-queryserver.jar</include>
+ </includes>
+ <fileMode>0644</fileMode>
+ </fileSet>
+ <fileSet>
+ <directory>${project.basedir}/../phoenix-queryserver-client/target/</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>phoenix-*-thin-client.jar</include>
</includes>
<fileMode>0644</fileMode>
</fileSet>
+ <fileSet>
+ <directory>${project.basedir}/../phoenix-hive/target/</directory>
+ <outputDirectory>/</outputDirectory>
+ <includes>
+ <include>phoenix-*-hive.jar</include>
+ </includes>
+ <fileMode>0644</fileMode>
+ </fileSet>
+
<!-- This is only necessary until maven fixes the intra-project dependency bug
in maven 3.0. Until then, we have to include the jars for sub-projects explicitly.
Otherwise, test jars are pulled in wrongly.
@@ -85,15 +107,23 @@
<fileMode>0644</fileMode>
</fileSet>
<fileSet>
- <directory>${project.basedir}/../phoenix-server/target/</directory>
+ <directory>${project.basedir}/../phoenix-queryserver/target/</directory>
<outputDirectory>lib</outputDirectory>
<includes>
- <include>phoenix-*.jar</include>
+ <include>phoenix-queryserver-*.jar</include>
+ </includes>
+ <fileMode>0644</fileMode>
+ </fileSet>
+ <fileSet>
+ <directory>${project.basedir}/../phoenix-hive/target/</directory>
+ <outputDirectory>lib</outputDirectory>
+ <includes>
+ <include>phoenix-hive-*.jar</include>
</includes>
<fileMode>0644</fileMode>
</fileSet>
<fileSet>
- <directory>${project.basedir}/../phoenix-server-client/target/</directory>
+ <directory>${project.basedir}/../phoenix-queryserver-client/target/</directory>
<outputDirectory>lib</outputDirectory>
<includes>
<include>phoenix-*.jar</include>
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-assembly/src/build/server.xml
----------------------------------------------------------------------
diff --git a/phoenix-assembly/src/build/server.xml b/phoenix-assembly/src/build/server.xml
deleted file mode 100644
index fe784e9..0000000
--- a/phoenix-assembly/src/build/server.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version='1.0'?>
-<!--
-
- 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.
-
--->
-
-<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
- <!-- build the phoenix server side jar, that includes phoenix-hadoopX-compat, phoenix-hadoop-compat and antlr -->
- <id>server</id>
- <formats>
- <format>jar</format>
- </formats>
- <includeBaseDirectory>false</includeBaseDirectory>
- <dependencySets>
- <dependencySet>
- <outputDirectory>/</outputDirectory>
- <unpack>true</unpack>
- <includes>
- <include>org.apache.phoenix:phoenix-core</include>
- <include>org.iq80.snappy:snappy</include>
- <include>org.antlr:antlr*</include>
- <include>org.apache.tephra:tephra*</include>
- <include>com.google.code.gson:gson</include>
- <include>org.jruby.joni:joni</include>
- <include>org.jruby.jcodings:jcodings</include>
- <include>joda-time:joda-time</include>
- <include>org.apache.twill:twill*</include>
- <include>com.google.inject.extensions:guice-assistedinject</include>
- <include>it.unimi.dsi:fastutil</include>
- <include>io.dropwizard.metrics:metrics-core</include>
- <include>org.apache.thrift:libthrift</include>
- </includes>
- </dependencySet>
- </dependencySets>
-</assembly>
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-client/pom.xml
----------------------------------------------------------------------
diff --git a/phoenix-client/pom.xml b/phoenix-client/pom.xml
new file mode 100644
index 0000000..655b0fd
--- /dev/null
+++ b/phoenix-client/pom.xml
@@ -0,0 +1,381 @@
+<?xml version='1.0'?>
+<!--
+
+ 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.
+
+-->
+
+<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/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.phoenix</groupId>
+ <artifactId>phoenix</artifactId>
+ <version>4.8.0-HBase-1.2-SNAPSHOT</version>
+ </parent>
+ <artifactId>phoenix-client</artifactId>
+ <name>Phoenix Client</name>
+ <description>Phoenix Client</description>
+ <packaging>jar</packaging>
+ <properties>
+ <!-- Don't make a test-jar -->
+ <maven.test.skip>true</maven.test.skip>
+ <!-- Don't make a source-jar -->
+ <source.skip>true</source.skip>
+ <license.bundles.dependencies>true</license.bundles.dependencies>
+ <top.dir>${project.basedir}/..</top.dir>
+ <shaded.package>org.apache.phoenix.shaded</shaded.package>
+
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-site-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>default-jar</id>
+ <phase>none</phase>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-install-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>install-file</goal>
+ </goals>
+ <id>default-install</id>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ <phase>install</phase>
+ </execution>
+ </executions>
+ <configuration>
+ <file>${basedir}/target/phoenix-${project.version}-client.jar</file>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-shade-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ <configuration>
+ <finalName>phoenix-${project.version}-client</finalName>
+ <shadedArtifactAttached>false</shadedArtifactAttached>
+ <promoteTransitiveDependencies>true</promoteTransitiveDependencies>
+ <shadeTestJar>false</shadeTestJar>
+ <transformers>
+ <!--<transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer">-->
+ <!--</transformer>-->
+ <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
+ <resources>
+ <resource>LICENSE.txt</resource>
+ <resource>ASL2.0</resource>
+ </resources>
+ </transformer>
+ <transformer
+ implementation="org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer">
+ <addHeader>false</addHeader>
+ </transformer>
+ <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
+ <transformer
+ implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
+ <resource>csv-bulk-load-config.properties</resource>
+ <file>
+ ${project.basedir}/../config/csv-bulk-load-config.properties
+ </file>
+ </transformer>
+ <transformer
+ implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
+ <resource>README.md</resource>
+ <file>${project.basedir}/../README.md</file>
+ </transformer>
+ <transformer
+ implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
+ <resource>LICENSE.txt</resource>
+ <file>${project.basedir}/../LICENSE.txt</file>
+ </transformer>
+ </transformers>
+ <artifactSet>
+ <includes>
+ <include>*:*</include>
+ </includes>
+ <excludes>
+ <exclude>org.apache.phoenix:phoenix-client</exclude>
+ </excludes>
+ </artifactSet>
+
+ <relocations>
+
+ <!-- COM relocation -->
+ <relocation>
+ <pattern>com.codahale</pattern>
+ <shadedPattern>${shaded.package}.com.codahale</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>com.fasterxml</pattern>
+ <shadedPattern>${shaded.package}.com.fasterxml</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>com.google</pattern>
+ <shadedPattern>${shaded.package}.com.google</shadedPattern>
+ <excludes>
+ </excludes>
+ </relocation>
+ <relocation>
+ <pattern>com.jamesmurty</pattern>
+ <shadedPattern>${shaded.package}.com.jamesmurty</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>com.jcraft</pattern>
+ <shadedPattern>${shaded.package}.com.jcraft</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>com.lmax</pattern>
+ <shadedPattern>${shaded.package}.com.lmax</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>com.thoughtworks</pattern>
+ <shadedPattern>${shaded.package}.com.thoughtworks</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>com.sun.jersey</pattern>
+ <shadedPattern>${shaded.package}.com.sun.jersey</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>com.yammer</pattern>
+ <shadedPattern>${shaded.package}.com.yammer</shadedPattern>
+ </relocation>
+
+ <!-- IO relocations -->
+ <relocation>
+ <pattern>io.netty</pattern>
+ <shadedPattern>${shaded.package}.io.netty</shadedPattern>
+ </relocation>
+
+ <!-- ORG relocations -->
+ <relocation>
+ <pattern>org.antlr</pattern>
+ <shadedPattern>${shaded.package}.org.antlr</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.aopalliance</pattern>
+ <shadedPattern>${shaded.package}.org.aopalliance</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.codehaus</pattern>
+ <shadedPattern>${shaded.package}.org.codehaus</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.fusesource</pattern>
+ <shadedPattern>${shaded.package}.org.fusesource</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.hamcrest</pattern>
+ <shadedPattern>${shaded.package}.org.hamcrest</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.hsqldb</pattern>
+ <shadedPattern>${shaded.package}.org.hsqldb</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.iq80</pattern>
+ <shadedPattern>${shaded.package}.org.iq80</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.jamon</pattern>
+ <shadedPattern>${shaded.package}.org.jamon</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.jboss</pattern>
+ <shadedPattern>${shaded.package}.org.jboss</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.jcodings</pattern>
+ <shadedPattern>${shaded.package}.org.jcodings</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.jets3t</pattern>
+ <shadedPattern>${shaded.package}.org.jets3t</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.joda</pattern>
+ <shadedPattern>${shaded.package}.org.joda</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.joni</pattern>
+ <shadedPattern>${shaded.package}.org.joni</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.junit</pattern>
+ <shadedPattern>${shaded.package}.org.junit</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.kosmix</pattern>
+ <shadedPattern>${shaded.package}.org.kosmix</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.mortbay</pattern>
+ <shadedPattern>${shaded.package}.org.mortbay</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.objectweb</pattern>
+ <shadedPattern>${shaded.package}.org.objectweb</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.stringtemplate</pattern>
+ <shadedPattern>${shaded.package}.org.stringtemplate</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.tukaani</pattern>
+ <shadedPattern>${shaded.package}.org.tukaani</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.znerd</pattern>
+ <shadedPattern>${shaded.package}.org.znerd</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.apache.avro</pattern>
+ <shadedPattern>${shaded.package}.org.apache.avro</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.apache.commons</pattern>
+ <shadedPattern>${shaded.package}.org.apache.commons</shadedPattern>
+ <excludes>
+ <exclude>org.apache.commons.csv.**</exclude>
+ <exclude>org.apache.commons.logging.**</exclude>
+ </excludes>
+ </relocation>
+ <relocation>
+ <pattern>org.apache.directory</pattern>
+ <shadedPattern>${shaded.package}.org.apache.directory</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.apache.http</pattern>
+ <shadedPattern>${shaded.package}.org.apache.http</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.apache.jasper</pattern>
+ <shadedPattern>${shaded.package}.org.apache.jasper</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.apache.jute</pattern>
+ <shadedPattern>${shaded.package}.org.apache.jute</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.apache.mina</pattern>
+ <shadedPattern>${shaded.package}.org.apache.mina</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.apache.oro</pattern>
+ <shadedPattern>${shaded.package}.org.apache.oro</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.apache.taglibs</pattern>
+ <shadedPattern>${shaded.package}.org.apache.taglibs</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.apache.thrift</pattern>
+ <shadedPattern>${shaded.package}.org.apache.thrift</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.apache.tools</pattern>
+ <shadedPattern>${shaded.package}.org.apache.tools</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.apache.twill</pattern>
+ <shadedPattern>${shaded.package}.org.apache.twill</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.apache.velocity</pattern>
+ <shadedPattern>${shaded.package}.org.apache.velocity</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.apache.zookeeper</pattern>
+ <shadedPattern>${shaded.package}.org.apache.zookeeper</shadedPattern>
+ </relocation>
+
+ <!-- NET relocations -->
+ <relocation>
+ <pattern>net</pattern>
+ <shadedPattern>${shaded.package}.net</shadedPattern>
+ </relocation>
+
+ <!-- Misc relocations -->
+ <relocation>
+ <pattern>antlr</pattern>
+ <shadedPattern>${shaded.package}.antlr</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>it.unimi</pattern>
+ <shadedPattern>${shaded.package}.it.unimi</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>jline</pattern>
+ <shadedPattern>${shaded.package}.jline</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>junit</pattern>
+ <shadedPattern>${shaded.package}.junit</shadedPattern>
+ </relocation>
+ </relocations>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <!-- Depend on all other internal projects -->
+ <dependency>
+ <groupId>org.apache.phoenix</groupId>
+ <artifactId>phoenix-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.phoenix</groupId>
+ <artifactId>phoenix-flume</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.phoenix</groupId>
+ <artifactId>phoenix-pig</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.phoenix</groupId>
+ <artifactId>phoenix-spark</artifactId>
+ </dependency>
+ </dependencies>
+</project>
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-core/src/main/java/org/apache/phoenix/query/QueryServicesOptions.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/query/QueryServicesOptions.java b/phoenix-core/src/main/java/org/apache/phoenix/query/QueryServicesOptions.java
index a7c91f6..c3cdbde 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/query/QueryServicesOptions.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/query/QueryServicesOptions.java
@@ -234,7 +234,7 @@ public class QueryServicesOptions {
public static final long DEFAULT_INDEX_POPULATION_SLEEP_TIME = 5000;
- // QueryServer defaults -- ensure ThinClientUtil is also updated since phoenix-server-client
+ // QueryServer defaults -- ensure ThinClientUtil is also updated since phoenix-queryserver-client
// doesn't depend on phoenix-core.
public static final String DEFAULT_QUERY_SERVER_SERIALIZATION = "PROTOBUF";
public static final int DEFAULT_QUERY_SERVER_HTTP_PORT = 8765;
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-hive/pom.xml
----------------------------------------------------------------------
diff --git a/phoenix-hive/pom.xml b/phoenix-hive/pom.xml
index 89adaa4..2986bea 100644
--- a/phoenix-hive/pom.xml
+++ b/phoenix-hive/pom.xml
@@ -150,6 +150,10 @@
<goals>
<goal>single</goal>
</goals>
+ <configuration>
+ <appendAssemblyId>false</appendAssemblyId>
+ <finalName>phoenix-${project.version}-hive</finalName>
+ </configuration>
</execution>
</executions>
</plugin>
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-queryserver-client/pom.xml
----------------------------------------------------------------------
diff --git a/phoenix-queryserver-client/pom.xml b/phoenix-queryserver-client/pom.xml
new file mode 100644
index 0000000..0ae25f9
--- /dev/null
+++ b/phoenix-queryserver-client/pom.xml
@@ -0,0 +1,143 @@
+<?xml version='1.0'?>
+<!--
+
+ 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.
+
+-->
+
+<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/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.phoenix</groupId>
+ <artifactId>phoenix</artifactId>
+ <version>4.8.0-HBase-1.2-SNAPSHOT</version>
+ </parent>
+ <artifactId>phoenix-queryserver-client</artifactId>
+ <name>Phoenix Query Server Client</name>
+ <description>A thin JDBC client for interacting with the query server</description>
+
+ <licenses>
+ <license>
+ <name>The Apache Software License, Version 2.0</name>
+ <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+ <distribution>repo</distribution>
+ <comments/>
+ </license>
+ </licenses>
+
+ <organization>
+ <name>Apache Software Foundation</name>
+ <url>http://www.apache.org</url>
+ </organization>
+
+ <properties>
+ <top.dir>${project.basedir}/..</top.dir>
+ <shaded.package>org.apache.phoenix.shaded</shaded.package>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
+ <skipAssembly>true</skipAssembly>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-shade-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>thin-client</id>
+ <phase>package</phase>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ <configuration>
+ <finalName>phoenix-${project.version}-thin-client</finalName>
+ <relocations>
+
+ <!-- COM relocation -->
+
+ <relocation>
+ <pattern>com.fasterxml</pattern>
+ <shadedPattern>${shaded.package}.com.fasterxml</shadedPattern>
+ </relocation>
+ <!-- ORG relocation -->
+ <relocation>
+ <pattern>org.apache.calcite</pattern>
+ <shadedPattern>${shaded.package}.org.apache.calcite</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.apache.commons</pattern>
+ <shadedPattern>${shaded.package}.org.apache.commons</shadedPattern>
+ <excludes>
+ <exclude>org.apache.commons.logging.**</exclude>
+ </excludes>
+ </relocation>
+ <relocation>
+ <pattern>org.apache.http</pattern>
+ <shadedPattern>${shaded.package}.org.apache.http</shadedPattern>
+ </relocation>
+
+ <relocation>
+ <pattern>org.fusesource</pattern>
+ <shadedPattern>${shaded.package}.org.fusesource</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.hamcrest</pattern>
+ <shadedPattern>${shaded.package}.org.hamcrest</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.junit</pattern>
+ <shadedPattern>${shaded.package}.org.junit</shadedPattern>
+ </relocation>
+
+ <!-- MISC relocations -->
+
+ <relocation>
+ <pattern>jline</pattern>
+ <shadedPattern>${shaded.package}.jline</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>junit</pattern>
+ <shadedPattern>${shaded.package}.junit</shadedPattern>
+ </relocation>
+
+ </relocations>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.calcite.avatica</groupId>
+ <artifactId>avatica</artifactId>
+ </dependency>
+ <dependency>
+ <!-- a dependency for the thin-client uberjar -->
+ <groupId>sqlline</groupId>
+ <artifactId>sqlline</artifactId>
+ </dependency>
+ </dependencies>
+</project>
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-queryserver-client/src/main/java/org/apache/phoenix/queryserver/client/Driver.java
----------------------------------------------------------------------
diff --git a/phoenix-queryserver-client/src/main/java/org/apache/phoenix/queryserver/client/Driver.java b/phoenix-queryserver-client/src/main/java/org/apache/phoenix/queryserver/client/Driver.java
new file mode 100644
index 0000000..5c8f119
--- /dev/null
+++ b/phoenix-queryserver-client/src/main/java/org/apache/phoenix/queryserver/client/Driver.java
@@ -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.phoenix.queryserver.client;
+
+import org.apache.calcite.avatica.DriverVersion;
+
+public class Driver extends org.apache.calcite.avatica.remote.Driver {
+
+ public static final String CONNECT_STRING_PREFIX = "jdbc:phoenix:thin:";
+
+ static {
+ new Driver().register();
+ }
+
+ public Driver() {
+ super();
+ }
+
+ @Override
+ protected DriverVersion createDriverVersion() {
+ return DriverVersion.load(
+ Driver.class,
+ "org-apache-phoenix-remote-jdbc.properties",
+ "Phoenix Remote JDBC Driver",
+ "unknown version",
+ "Apache Phoenix",
+ "unknown version");
+ }
+
+ @Override
+ protected String getConnectStringPrefix() {
+ return CONNECT_STRING_PREFIX;
+ }
+}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-queryserver-client/src/main/java/org/apache/phoenix/queryserver/client/ThinClientUtil.java
----------------------------------------------------------------------
diff --git a/phoenix-queryserver-client/src/main/java/org/apache/phoenix/queryserver/client/ThinClientUtil.java b/phoenix-queryserver-client/src/main/java/org/apache/phoenix/queryserver/client/ThinClientUtil.java
new file mode 100644
index 0000000..59fe093
--- /dev/null
+++ b/phoenix-queryserver-client/src/main/java/org/apache/phoenix/queryserver/client/ThinClientUtil.java
@@ -0,0 +1,42 @@
+/*
+ * 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.phoenix.queryserver.client;
+
+/**
+ * Utilities for thin clients.
+ */
+public final class ThinClientUtil {
+ // The default serialization is also defined in QueryServicesOptions. phoenix-queryserver-client
+ // currently doesn't depend on phoenix-core so we have to deal with the duplication.
+ private static final String DEFAULT_SERIALIZATION = "PROTOBUF";
+
+ private ThinClientUtil() {}
+
+ public static String getConnectionUrl(String hostname, int port) {
+ return getConnectionUrl("http", hostname, port);
+ }
+
+ public static String getConnectionUrl(String protocol, String hostname, int port) {
+ return getConnectionUrl(protocol, hostname, port, DEFAULT_SERIALIZATION);
+ }
+
+ public static String getConnectionUrl(String protocol, String hostname, int port, String serialization) {
+ String urlFmt = Driver.CONNECT_STRING_PREFIX + "url=%s://%s:%s;serialization=%s";
+ return String.format(urlFmt, protocol, hostname, port, serialization);
+ }
+}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-queryserver-client/src/main/resources/META-INF/services/java.sql.Driver
----------------------------------------------------------------------
diff --git a/phoenix-queryserver-client/src/main/resources/META-INF/services/java.sql.Driver b/phoenix-queryserver-client/src/main/resources/META-INF/services/java.sql.Driver
new file mode 100644
index 0000000..f94d657
--- /dev/null
+++ b/phoenix-queryserver-client/src/main/resources/META-INF/services/java.sql.Driver
@@ -0,0 +1 @@
+org.apache.phoenix.queryserver.client.Driver
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-queryserver-client/src/main/resources/version/org-apache-phoenix-remote-jdbc.properties
----------------------------------------------------------------------
diff --git a/phoenix-queryserver-client/src/main/resources/version/org-apache-phoenix-remote-jdbc.properties b/phoenix-queryserver-client/src/main/resources/version/org-apache-phoenix-remote-jdbc.properties
new file mode 100644
index 0000000..7e8eb7e
--- /dev/null
+++ b/phoenix-queryserver-client/src/main/resources/version/org-apache-phoenix-remote-jdbc.properties
@@ -0,0 +1,25 @@
+# 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.
+#
+driver.name=Apache Phoenix Remote JDBC Driver
+driver.version=${pom.version}
+product.name=Apache Phoenix
+product.version=${pom.version}
+jdbc.compliant=true
+driver.version.major=${version.major}
+driver.version.minor=${version.minor}
+database.version.major=${version.major}
+database.version.minor=${version.minor}
+build.timestamp=${build.timestamp}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-queryserver/pom.xml
----------------------------------------------------------------------
diff --git a/phoenix-queryserver/pom.xml b/phoenix-queryserver/pom.xml
new file mode 100644
index 0000000..365f950
--- /dev/null
+++ b/phoenix-queryserver/pom.xml
@@ -0,0 +1,149 @@
+<?xml version='1.0'?>
+<!--
+
+ 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.
+
+-->
+
+<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/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.phoenix</groupId>
+ <artifactId>phoenix</artifactId>
+ <version>4.8.0-HBase-1.2-SNAPSHOT</version>
+ </parent>
+ <artifactId>phoenix-queryserver</artifactId>
+ <name>Phoenix Query Server</name>
+ <description>A query server for exposing Phoenix to thin clients</description>
+
+
+ <properties>
+ <top.dir>${project.basedir}/..</top.dir>
+ <shaded.package>org.apache.phoenix.shaded</shaded.package>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-shade-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>query-server</id>
+ <phase>package</phase>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ <configuration>
+ <finalName>phoenix-${project.version}-queryserver</finalName>
+ <shadedArtifactAttached>false</shadedArtifactAttached>
+ <promoteTransitiveDependencies>true</promoteTransitiveDependencies>
+ <shadeTestJar>false</shadeTestJar>
+ <artifactSet>
+ <includes>
+ <include>org.apache.calcite.avatica:*</include>
+ <include>org.eclipse.jetty:*</include>
+ <include>javax.servlet:*</include>
+ </includes>
+ </artifactSet>
+ <relocations>
+ <relocation>
+ <pattern>com.google</pattern>
+ <shadedPattern>${shaded.package}.com.google</shadedPattern>
+ <excludes>
+ </excludes>
+ </relocation>
+ <relocation>
+ <pattern>org.eclipse.jetty</pattern>
+ <shadedPattern>${shaded.package}.org.eclipse.jetty</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>org.apache.calcite</pattern>
+ <shadedPattern>${shaded.package}.org.apache.calcite</shadedPattern>
+ </relocation>
+ </relocations>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.phoenix</groupId>
+ <artifactId>phoenix-queryserver-client</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.calcite.avatica</groupId>
+ <artifactId>avatica</artifactId>
+ <version>${avatica.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.calcite.avatica</groupId>
+ <artifactId>avatica-server</artifactId>
+ <version>${avatica.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.phoenix</groupId>
+ <artifactId>phoenix-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </dependency>
+ <!-- for tests -->
+ <dependency>
+ <groupId>org.apache.phoenix</groupId>
+ <artifactId>phoenix-core</artifactId>
+ <classifier>tests</classifier>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.hbase</groupId>
+ <artifactId>hbase-it</artifactId>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.hadoop</groupId>
+ <artifactId>hadoop-minicluster</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.hbase</groupId>
+ <artifactId>hbase-testing-util</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tephra</groupId>
+ <artifactId>tephra-core</artifactId>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-queryserver/src/build/query-server-runnable.xml
----------------------------------------------------------------------
diff --git a/phoenix-queryserver/src/build/query-server-runnable.xml b/phoenix-queryserver/src/build/query-server-runnable.xml
new file mode 100644
index 0000000..d098b63
--- /dev/null
+++ b/phoenix-queryserver/src/build/query-server-runnable.xml
@@ -0,0 +1,52 @@
+<?xml version='1.0'?>
+<!--
+
+ 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.
+
+-->
+
+<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+ <id>runnable</id>
+ <formats>
+ <format>jar</format>
+ </formats>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <containerDescriptorHandlers>
+ <containerDescriptorHandler>
+ <!--
+ aggregate SPI's so that things like HDFS FileSystem works in uberjar
+ http://docs.oracle.com/javase/tutorial/sound/SPI-intro.html
+ -->
+ <handlerName>metaInf-services</handlerName>
+ </containerDescriptorHandler>
+ </containerDescriptorHandlers>
+ <dependencySets>
+ <dependencySet>
+ <unpack>true</unpack>
+ <scope>runtime</scope>
+ <outputDirectory>/</outputDirectory>
+ <includes>
+ <include>org.apache.phoenix:phoenix-queryserver</include>
+ <include>org.apache.phoenix:phoenix-queryserver-client</include>
+ <include>org.apache.calcite.avatica:*</include>
+ </includes>
+ </dependencySet>
+ </dependencySets>
+</assembly>
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-queryserver/src/it/java/org/apache/phoenix/end2end/QueryServerBasicsIT.java
----------------------------------------------------------------------
diff --git a/phoenix-queryserver/src/it/java/org/apache/phoenix/end2end/QueryServerBasicsIT.java b/phoenix-queryserver/src/it/java/org/apache/phoenix/end2end/QueryServerBasicsIT.java
new file mode 100644
index 0000000..ba49bab
--- /dev/null
+++ b/phoenix-queryserver/src/it/java/org/apache/phoenix/end2end/QueryServerBasicsIT.java
@@ -0,0 +1,164 @@
+/*
+ * 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.phoenix.end2end;
+
+import static java.lang.String.format;
+import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TABLE_CAT;
+import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TABLE_CATALOG;
+import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TABLE_SCHEM;
+import static org.apache.phoenix.query.QueryConstants.SYSTEM_SCHEMA_NAME;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.Statement;
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.phoenix.query.QueryServices;
+import org.apache.phoenix.queryserver.client.ThinClientUtil;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * Smoke test for query server.
+ */
+public class QueryServerBasicsIT extends BaseHBaseManagedTimeIT {
+
+ private static final Log LOG = LogFactory.getLog(QueryServerBasicsIT.class);
+
+ private static QueryServerThread AVATICA_SERVER;
+ private static Configuration CONF;
+ private static String CONN_STRING;
+
+ @BeforeClass
+ public static void beforeClass() throws Exception {
+ CONF = getTestClusterConfig();
+ CONF.setInt(QueryServices.QUERY_SERVER_HTTP_PORT_ATTRIB, 0);
+ String url = getUrl();
+ AVATICA_SERVER = new QueryServerThread(new String[] { url }, CONF,
+ QueryServerBasicsIT.class.getName());
+ AVATICA_SERVER.start();
+ AVATICA_SERVER.getMain().awaitRunning();
+ final int port = AVATICA_SERVER.getMain().getPort();
+ LOG.info("Avatica server started on port " + port);
+ CONN_STRING = ThinClientUtil.getConnectionUrl("localhost", port);
+ LOG.info("JDBC connection string is " + CONN_STRING);
+ }
+
+ @AfterClass
+ public static void afterClass() throws Exception {
+ if (AVATICA_SERVER != null) {
+ AVATICA_SERVER.join(TimeUnit.MINUTES.toMillis(1));
+ Throwable t = AVATICA_SERVER.getMain().getThrowable();
+ if (t != null) {
+ fail("query server threw. " + t.getMessage());
+ }
+ assertEquals("query server didn't exit cleanly", 0, AVATICA_SERVER.getMain().getRetCode());
+ }
+ }
+
+ @Test
+ public void testCatalogs() throws Exception {
+ try (final Connection connection = DriverManager.getConnection(CONN_STRING)) {
+ assertThat(connection.isClosed(), is(false));
+ try (final ResultSet resultSet = connection.getMetaData().getCatalogs()) {
+ final ResultSetMetaData metaData = resultSet.getMetaData();
+ assertFalse("unexpected populated resultSet", resultSet.next());
+ assertEquals(1, metaData.getColumnCount());
+ assertEquals(TABLE_CAT, metaData.getColumnName(1));
+ }
+ }
+ }
+
+ @Test
+ public void testSchemas() throws Exception {
+ Properties props=new Properties();
+ props.setProperty(QueryServices.IS_NAMESPACE_MAPPING_ENABLED, Boolean.toString(true));
+ try (final Connection connection = DriverManager.getConnection(CONN_STRING, props)) {
+ connection.createStatement().executeUpdate("CREATE SCHEMA IF NOT EXISTS " + SYSTEM_SCHEMA_NAME);
+ assertThat(connection.isClosed(), is(false));
+ try (final ResultSet resultSet = connection.getMetaData().getSchemas()) {
+ final ResultSetMetaData metaData = resultSet.getMetaData();
+ assertTrue("unexpected empty resultset", resultSet.next());
+ assertEquals(2, metaData.getColumnCount());
+ assertEquals(TABLE_SCHEM, metaData.getColumnName(1));
+ assertEquals(TABLE_CATALOG, metaData.getColumnName(2));
+ boolean containsSystem = false;
+ do {
+ if (resultSet.getString(1).equalsIgnoreCase(SYSTEM_SCHEMA_NAME)) containsSystem = true;
+ } while (resultSet.next());
+ assertTrue(format("should contain at least %s schema.", SYSTEM_SCHEMA_NAME), containsSystem);
+ }
+ }
+ }
+
+ @Test
+ public void smokeTest() throws Exception {
+ final String tableName = getClass().getSimpleName().toUpperCase() + System.currentTimeMillis();
+ try (final Connection connection = DriverManager.getConnection(CONN_STRING)) {
+ assertThat(connection.isClosed(), is(false));
+ connection.setAutoCommit(true);
+ try (final Statement stmt = connection.createStatement()) {
+ assertFalse(stmt.execute("DROP TABLE IF EXISTS " + tableName));
+ assertFalse(stmt.execute("CREATE TABLE " + tableName + "("
+ + "id INTEGER NOT NULL, "
+ + "pk varchar(3) NOT NULL "
+ + "CONSTRAINT PK_CONSTRAINT PRIMARY KEY (id, pk))"));
+ assertEquals(0, stmt.getUpdateCount());
+ assertEquals(1, stmt.executeUpdate("UPSERT INTO " + tableName + " VALUES(1, 'foo')"));
+ assertEquals(1, stmt.executeUpdate("UPSERT INTO " + tableName + " VALUES(2, 'bar')"));
+ assertTrue(stmt.execute("SELECT * FROM " + tableName));
+ try (final ResultSet resultSet = stmt.getResultSet()) {
+ assertTrue(resultSet.next());
+ assertEquals(1, resultSet.getInt(1));
+ assertEquals("foo", resultSet.getString(2));
+ assertTrue(resultSet.next());
+ assertEquals(2, resultSet.getInt(1));
+ assertEquals("bar", resultSet.getString(2));
+ }
+ }
+ final String sql = "SELECT * FROM " + tableName + " WHERE id = ?";
+ try (final PreparedStatement stmt = connection.prepareStatement(sql)) {
+ stmt.setInt(1, 1);
+ try (ResultSet resultSet = stmt.executeQuery()) {
+ assertTrue(resultSet.next());
+ assertEquals(1, resultSet.getInt(1));
+ assertEquals("foo", resultSet.getString(2));
+ }
+ stmt.clearParameters();
+ stmt.setInt(1, 5);
+ try (final ResultSet resultSet = stmt.executeQuery()) {
+ assertFalse(resultSet.next());
+ }
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/4f6ee74c/phoenix-queryserver/src/it/java/org/apache/phoenix/end2end/QueryServerThread.java
----------------------------------------------------------------------
diff --git a/phoenix-queryserver/src/it/java/org/apache/phoenix/end2end/QueryServerThread.java b/phoenix-queryserver/src/it/java/org/apache/phoenix/end2end/QueryServerThread.java
new file mode 100644
index 0000000..ef94bf7
--- /dev/null
+++ b/phoenix-queryserver/src/it/java/org/apache/phoenix/end2end/QueryServerThread.java
@@ -0,0 +1,45 @@
+/*
+ * 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.phoenix.end2end;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.phoenix.queryserver.server.Main;
+
+/** Wraps up the query server for tests. */
+public class QueryServerThread extends Thread {
+
+ private final Main main;
+
+ public QueryServerThread(String[] argv, Configuration conf) {
+ this(argv, conf, null);
+ }
+
+ public QueryServerThread(String[] argv, Configuration conf, String name) {
+ this(new Main(argv, conf), name);
+ }
+
+ private QueryServerThread(Main m, String name) {
+ super(m, "query server" + (name == null ? "" : (" - " + name)));
+ this.main = m;
+ setDaemon(true);
+ }
+
+ public Main getMain() {
+ return main;
+ }
+}