You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by si...@apache.org on 2016/03/16 04:44:58 UTC

[48/49] bookkeeper git commit: BOOKKEEPER-769: Remove the Hedwig Code

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/doc/hedwigParams.textile
----------------------------------------------------------------------
diff --git a/doc/hedwigParams.textile b/doc/hedwigParams.textile
deleted file mode 100644
index ea01be6..0000000
--- a/doc/hedwigParams.textile
+++ /dev/null
@@ -1,92 +0,0 @@
-Notice: Licensed 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":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.
-        .
-        
-h1. Hedwig configuration parameters        
-        
-This page contains detailed information about configuration parameters used for Hubs, Regions, ZooKeeper, and BookKeeper.
-        
-h2. Hedwig server configuration parameters
-
-Please also refer to the configuration file that comes with the distribution: _hedwig-server/conf/hw_server.conf_.  
-
-h3. Region related parameters
-
-| @region@ | Region identifier. Default is "standalone". |
-| @regions@ | List of region identifiers, space separated. Default is empty. |
-| @inter_region_ssl_enabled (deprecated)@ | Enables SSL across regions. Default is false. *Since this parameter has been deprecated, use __ssl_enabled__ in _hedwig-server/conf/hw_region_client.conf_ to enable SSL across regions instead.* |
-| @retry_remote_subscribe_thread_run_interval@ | This parameter is used to determine how often we run a thread to retry those failed remote subscriptions in asynchronous mode (in milliseconds). Default is 2 minutes. |
-
-h3. Hub server parameters
-
-| @standalone@ | Sets the hub server to run in standalone mode (no regions). Default is false. |
-| @server_port@ | Sets the server port that receives client connections. Default is 4080. |
-| @ssl_enabled@ | Enables SSL. Default is false. |
-| @ssl_server_port@ | Sets the server port for SSL connections. Default is 9876. | 
-| @password@ | Password used for pkcs12 certificate.. Default is the empty string. |
-| @cert_name@ | Sets the name of the SSL certificate if available as a resource. Default is the null string. |
-| @cert_path@ | Sets the path to the SSL certificate if it is available as a file. Default is the null string. |
-
-h3. Read-ahead cache parameters
-
-| @readahead_enabled@ | Enables read-ahead. Enabled by default. | 
-| @readahead_count@ | Number of messages to read ahead. Default is 10. |
-| @readahead_size@ | Maximum number of bytes to read during a scan. Default is 4 megabytes. |
-
-bq. Upon a range scan request for a given topic, two hints are provided as to when scanning should stop: the number of messages scanned and the total size of messages scanned. Scanning stops whenever one of these limits is exceeded.
-
-| @cache_size@ | Sets the size of the read-ahead cache. Default is the smallest of 2G or half the heap size. | 
-| @cache_entry_ttl@ | Sets TTL for cache entries. Each time adding new entry into the cache, those expired cache entries would be discarded. If the value is set to zero or less than zero, cache entry will not be evicted until the cache is fullfilled or the messages are already consumed. Default is 0. |
-| @scan_backoff_ms@ | The backoff time (in milliseconds) to retry scans after failures. Default value is 1s (1000ms). Default is 1s. |
-| @num_readahead_cache_threads@ | Sets the number of threads to be used for the read-ahead mechanism. Default is the number of cores as returned with a call to <code>Runtime.getRuntime().availableProcessors()</code>.|
-
-h3. Publish and subscription parameters 
-
-| @max_message_size@ | Sets the maximum message size. Default is 1.2 megabytes. |
-| @default_message_window_size@ | This parameter is used for setting the default maximum number of messages that can be delivered to a subscriber without being consumed. We pause delivery to a subscriber when reaching the window size. Default is unlimited (0). |
-| @consume_interval@ | Sets the number of messages consumed before persisting information about consumed messages. A value greater than one avoids persisting information about consumed messages upon every consumed message. Default is 50.|
-| @retention_secs@ | the interval to release a topic. If this parameter is greater than zero, then schedule a task to release an owned topic. Default is 0 (never released).
-| @messages_consumed_thread_run_interval@ | Time interval (in milliseconds) to run messages consumed timer task to
-delete those consumed ledgers in BookKeeper. Default is 1 minute (60,000 ms). |
-
-
-h3. ZooKeeper parameters
- 
-| @zk_host@ | Sets the ZooKeeper list of servers. Default is localhost:2181. |
-| @zk_timeout@ | Sets the ZooKeeper session timeout. Default is 2s. |
-
-h3. BookKeeper parameters
-
-| @bk_ensemble_size@ | Sets the ensemble size. Default is 3. |
-| @bk_write_quorum_size@ | Sets the write quorum size. Default is 2. |
-| @bk_ack_quorum_size@ | Sets the ack quorum size. Default is 2. |
-
-bq. Note that the ack quorum size must be equal or smaller than the write quorum size.
-
-| @max_entries_per_ledger@ | Maximum number of entries before we roll a ledger. Default is unlimited (0). |
-
-h3. Metadata parameters
-
-| @zk_prefix@ | Sets the ZooKeeper path prefix. Default is _/hedwig_. |
-| @metadata_manager_based_topic_manager_enabled@ | Enables the use of a metadata manager for topic management. Default is false. |
-| @metadata_manager_factory_class@ | Sets the default factory for the metadata manager. Default is null. |
-
-h2. Region manager configuration parameters
-
-Please also refer to the configuration file that comes with the distribution: _hedwig-server/conf/hw_region_client.conf_.
-
-| @ssl_enabled@ | This parameter is a boolean flag indicating if communication with the server should be done via SSL for encryption. The Hedwig server hubs also need to be SSL enabled for this to work. Default value is false. |
-| @max_message_size@ | Sets the maximum message size in bytes. The default value is 2 MB (2097152). |
-| @max_server_redirects@ | Sets the maximum number of redirects we permit before signaling an error. Default value is 2. |
-| @auto_send_consume_message_enabled@ | A flag indicating whether the client library should automatically send consume messages to the server. Default value is true. |
-| @consumed_messages_buffer_size@ | Sets the number of messages we buffer before sending a consume message to the server. Default value is 5. |
-| @max_outstanding_messages@ | Support for client side throttling, sets the maximum number of outstanding messages. Default value is 10. |
-| @server_ack_response_timeout@ | Sets the timeout (in milliseconds) before we error out any existing requests. Default value is 30s (30,000). |
-        

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/doc/hedwigUser.textile
----------------------------------------------------------------------
diff --git a/doc/hedwigUser.textile b/doc/hedwigUser.textile
deleted file mode 100644
index 58ff1cf..0000000
--- a/doc/hedwigUser.textile
+++ /dev/null
@@ -1,63 +0,0 @@
-Notice: Licensed 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":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.
-        .
-
-h1. Design
-
-In Hedwig, clients publish messages associated with a topic, and they subscribe to a topic to receive all messages published with that topic. Clients are associated with (publish to and subscribe from) a Hedwig _instance_ (also referred to as a _region_), which consists of a number of servers called _hubs_. The hubs partition up topic ownership among themselves, and all publishes and subscribes to a topic must be done to its owning hub. When a client doesn't know the owning hub, it tries a default hub, which may redirect the client.
-
-Running a Hedwig instance requires a Zookeeper server and at least three Bookkeeper servers.
-
-An instance is designed to run within a datacenter. For wide-area messaging across datacenters, specify in the server configuration the set of default servers for each of the other instances. Dissemination among instances currently takes place over an all-to-all topology. Local subscriptions cause the hub to subscribe to all other regions on this topic, so that the local region receives all updates to it. Future work includes allowing the user to overlay alternative topologies.
-
-Because all messages on a topic go through a single hub per region, all messages within a region are ordered. This means that, for a given topic, messages are delivered in the same order to all subscribers within a region, and messages from any particular region are delivered in the same order to all subscribers globally, but messages from different regions may be delivered in different orders to different regions. Providing global ordering is prohibitively expensive in the wide area. However, in Hedwig clients such as PNUTS, the lack of global ordering is not a problem, as PNUTS serializes all updates to a table row at a single designated master for that row.
-
-Topics are independent; Hedwig provides no ordering across different topics.
-
-Version vectors are associated with each topic and serve as the identifiers for each message. Vectors consist of one component per region. A component value is the region's local sequence number on the topic, and is incremented each time a hub persists a message (published either locally or remotely) to BK.
-
-TODO: More on how version vectors are to be used, and on maintaining vector-maxes.
-
-h1. Entry Points
-
-The main class for running the server is @org.apache.hedwig.server.netty.PubSubServer@. It takes a single argument, which is a "Commons Configuration":http://commons.apache.org/configuration/ file. Currently, for configuration, the source is the documentation. See @org.apache.hedwig.server.conf.ServerConfiguration@ for server configuration parameters.
-
-The client is a library intended to be consumed by user applications. It takes a Commons Configuration object, for which the source/documentation is in @org.apache.hedwig.client.conf.ClientConfiguration@.
-
-h1. Deployment
-
-h2. Limits
-
-Because the current implementation uses a single socket per subscription, the Hedwig requires a high @ulimit@ on the number of open file descriptors. Non-root users can only use up to the limit specified in @/etc/security/limits.conf@; to raise this to 1024^2, as root, modify the &quot;nofile&quot; line in /etc/security/limits.conf on all hubs.
-
-h2. Running Servers
-
-Hedwig requires BookKeeper to run. For BookKeeper setup instructions see "BookKeeper Getting Started":./bookkeeperStarted.html.
-
-To start a Hedwig hub server:
-
-@hedwig-server/bin/hedwig server@
-
-Hedwig takes its configuration from hedwig-server/conf/hw_server.conf by default. To change location of the conf file, modify the HEDWIG_SERVER_CONF environment variable.
-
-h1. Debugging
-
-You can attach an Eclipse debugger (or any debugger) to a Java process running on a remote host, as long as it has been started with the appropriate JVM flags. (See the Building Hedwig document to set up your Eclipse environment.) To launch something using @bin/hedwig@ with debugger attachment enabled, prefix the command with @HEDWIG_EXTRA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,address=5000@, e.g.:
-
-@HEDWIG_EXTRA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,address=5000 hedwig-server/bin/hedwig server@
-
-h1. Logging
-
-Hedwig uses "slf4j":http://www.slf4j.org for logging, with the log4j bindings enabled by default. To enable logging from hedwig, create a log4j.properties file and point the environment variable HEDWIG_LOG_CONF to the file. The path to the log4j.properties file must be absolute.
-
-@export HEDWIG_LOG_CONF=/tmp/log4j.properties@
-@hedwig-server/bin/hedwig server@
-
-

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/doc/index.textile
----------------------------------------------------------------------
diff --git a/doc/index.textile b/doc/index.textile
index a885bea..97553cc 100644
--- a/doc/index.textile
+++ b/doc/index.textile
@@ -26,8 +26,6 @@ Once familiar with the basic concepts, developers can consult the "BookKeeper Ja
 
 *Contributor* documentation is less organized, "BookKeeper Internals":./bookkeeperInternals.html is a good place to start. From there you can check out our "wiki":https://cwiki.apache.org/confluence/display/BOOKKEEPER/Index and ask questions on our "mailing lists":/lists.html or "IRC":/irc.html.
 
-Hedwig documentation can be found "here":./hedwigDocs.html.
-
 h3. All documents
 
 * Overview

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/doc/metastore.textile
----------------------------------------------------------------------
diff --git a/doc/metastore.textile b/doc/metastore.textile
index aa9d508..b3fb314 100644
--- a/doc/metastore.textile
+++ b/doc/metastore.textile
@@ -14,11 +14,11 @@ Notice: Licensed under the Apache License, Version 2.0 (the "License");
 
 h1. Metastore Interface
 
-Although Apache BookKeeper provides "LedgerManager":./bookkeeperMetadata.html and "Hedwig Metadata Managers":./hedwigMetadata.html for users to plugin different metadata storages for both BookKeeper and Hedwig, it is quite difficult to implement a correct and efficient manager version based on the knowledge for both projects. The __MetaStore__ interface extracts the commonality of the metadata storage interfaces and is provided for users to focus on adapting the underlying storage itself w/o having to worry about the detailed logic for BookKeeper and Hedwig.
+Although Apache BookKeeper provides "LedgerManager":./bookkeeperMetadata.html for users to plugin different metadata storages for BookKeeper, it is quite difficult to implement a correct and efficient manager version based on the knowledge. The __MetaStore__ interface extracts the commonality of the metadata storage interfaces and is provided for users to focus on adapting the underlying storage itself w/o having to worry about the detailed logic for BookKeeper.
 
 h2. MetaStore
 
-The __MetaStore__ interface provide users with access to __MetastoreTable__s used for BookKeeper and Hedwig metadata management. There are two kinds of table defined in a __MetaStore__, __MetastoreTable__ which provides basic __PUT__,__GET__,__REMOVE__,__SCAN__ operations and which does not assume any ordering requirements from the underlying storage; and __MetastoreScannableTable__ which is derived from __MetastoreTable__, but *does* assume that data is stored in key order in the underlying storage.
+The __MetaStore__ interface provide users with access to __MetastoreTable__s used for BookKeeper metadata management. There are two kinds of table defined in a __MetaStore__, __MetastoreTable__ which provides basic __PUT__,__GET__,__REMOVE__,__SCAN__ operations and which does not assume any ordering requirements from the underlying storage; and __MetastoreScannableTable__ which is derived from __MetastoreTable__, but *does* assume that data is stored in key order in the underlying storage.
 
 * @getName@: Return the name of the __MetaStore__.
 * @getVersion@: Return current __MetaStore__ plugin version.
@@ -44,4 +44,4 @@ __MetastoreScannableTable__ is identical to a __MetastoreTable__ except that it
 
 h2. How to organize your metadata.
 
-Some metadata in Hedwig and BookKeeper does not need to be stored in the order of the ledger id or the topic. You could use kind of hash table to store metadata for them. These metadata are topic ownership and topic persistence info. Besides that, subscription state and ledger metadata must be stored in key order due to the current logic in Hedwig/BookKeeper.
+Some metadata in BookKeeper does not need to be stored in the order of the ledger id or the topic. You could use kind of hash table to store metadata for them. These metadata are topic ownership and topic persistence info. Besides that, subscription state and ledger metadata must be stored in key order due to the current logic in BookKeeper.

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/formatter.xml
----------------------------------------------------------------------
diff --git a/formatter.xml b/formatter.xml
index f828df1..b8648e0 100644
--- a/formatter.xml
+++ b/formatter.xml
@@ -17,7 +17,7 @@
 
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <profiles version="11">
-<profile kind="CodeFormatterProfile" name="Hedwig" version="11">
+<profile kind="CodeFormatterProfile" name="BookKeeper" version="11">
 <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
 <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
 <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/hedwig-client-jms/pom.xml
----------------------------------------------------------------------
diff --git a/hedwig-client-jms/pom.xml b/hedwig-client-jms/pom.xml
deleted file mode 100644
index 744885e..0000000
--- a/hedwig-client-jms/pom.xml
+++ /dev/null
@@ -1,301 +0,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 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
-         xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache.bookkeeper</groupId>
-    <artifactId>bookkeeper</artifactId>
-    <version>4.4.0-SNAPSHOT</version>
-  </parent>
-  <groupId>org.apache.bookkeeper</groupId>
-  <artifactId>hedwig-client-jms</artifactId>
-  <name>hedwig-client-jms</name>
-  <url>http://maven.apache.org</url>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.google.protobuf</groupId>
-      <artifactId>protobuf-java</artifactId>
-      <version>2.4.1</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>4.8.1</version>
-      <scope>test</scope>
-    </dependency>
-    <!-- As suggested by Matthieu - Using geronimo-spec-jms instead of ver=1.1, groupId=java.jms, artifcatId=jms -->
-    <dependency>
-      <groupId>geronimo-spec</groupId>
-      <artifactId>geronimo-spec-jms</artifactId>
-      <version>1.1-rc4</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.bookkeeper</groupId>
-      <artifactId>hedwig-client</artifactId>
-      <version>${project.parent.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.bookkeeper</groupId>
-      <artifactId>hedwig-protocol</artifactId>
-      <version>${project.parent.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.bookkeeper</groupId>
-      <artifactId>bookkeeper-server</artifactId>
-      <version>${project.parent.version}</version>
-      <scope>test</scope>
-      <type>test-jar</type>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.bookkeeper</groupId>
-      <artifactId>hedwig-server</artifactId>
-      <version>${project.parent.version}</version>
-      <scope>test</scope>
-      <type>test-jar</type>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.bookkeeper</groupId>
-      <artifactId>hedwig-server</artifactId>
-      <version>${project.parent.version}</version>
-      <scope>test</scope>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.bookkeeper</groupId>
-      <artifactId>bookkeeper-server</artifactId>
-      <version>${project.parent.version}</version>
-      <scope>test</scope>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.zookeeper</groupId>
-      <artifactId>zookeeper</artifactId>
-      <version>${zookeeper.version}</version>
-      <type>test-jar</type>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>log4j</groupId>
-      <artifactId>log4j</artifactId>
-      <version>1.2.15</version>
-      <scope>provided</scope>
-      <exclusions>
-        <exclusion>
-          <groupId>javax.mail</groupId>
-          <artifactId>mail</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>javax.jms</groupId>
-          <artifactId>jms</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>com.sun.jdmk</groupId>
-          <artifactId>jmxtools</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>com.sun.jmx</groupId>
-          <artifactId>jmxri</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <testResources>
-      <testResource>
-        <directory>src/test/resources</directory>
-        <includes>
-          <include>log4j.properties</include>
-        </includes>
-      </testResource>
-    </testResources>
-    <plugins>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>javacc-maven-plugin</artifactId>
-        <version>2.6</version>
-        <executions>
-          <execution>
-            <id>jjtree-javacc</id>
-            <goals>
-              <goal>jjtree-javacc</goal>
-            </goals>
-            <configuration>
-              <sourceDirectory>${basedir}/src/main/grammar/javacc</sourceDirectory>
-              <packageName>org.apache.hedwig.jms.selector</packageName>
-            </configuration>
-            <phase>generate-sources</phase>
-          </execution>
-        </executions>
-      </plugin>
-
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <version>2.9</version>
-        <configuration>
-          <!-- Skip the default running of this plug-in (or everything is run twice...see below) -->
-          <skip>true</skip>
-          <!-- Show 100% of the lines from the stack trace (doesn't work ?) -->
-          <trimStackTrace>false</trimStackTrace>
-          <systemProperties>
-            <property>
-              <name>log4j.configuration</name>
-              <value>log4j.properties</value>
-            </property>
-            <property>
-              <name>java.net.preferIPv4Stack</name>
-              <value>true</value>
-            </property>
-            <property>
-              <name>com.sun.management.jmxremote</name>
-              <value>true</value>
-            </property>
-            <property>
-              <name>com.sun.management.jmxremote.local.only</name>
-              <value>true</value>
-            </property>
-            <property>
-              <name>com.sun.management.jmxremote.ssl</name>
-              <value>false</value>
-            </property>
-            <property>
-              <name>com.sun.management.jmxremote.authenticate</name>
-              <value>false</value>
-            </property>
-            <property>
-              <name>java.rmi.server.hostname</name>
-              <value>localhost</value>
-            </property>
-            <!--
-                <property>
-                <name>com.sun.management.jmxremote.port</name>
-                <value>39999</value>
-                </property>
-            -->
-          </systemProperties>
-          <!-- <forkMode>always</forkMode> -->
-          <forkMode>pertest</forkMode>
-          <argLine>-Xmx1G</argLine>
-        </configuration>
-
-        <executions>
-          <execution>
-            <id>unit-tests</id>
-            <phase>test</phase>
-            <goals>
-              <goal>test</goal>
-            </goals>
-            <configuration>
-              <skip>false</skip>
-              <!-- run everything other than activemq testcases -->
-              <excludes>
-                <exclude>org/apache/activemq/**/Test*.java</exclude>
-                <exclude>org/apache/activemq/**/*Test.java</exclude>
-                <exclude>org/apache/activemq/**/*TestCase.java</exclude>
-              </excludes>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <version>0.7</version>
-        <configuration>
-          <excludes>
-            <!-- exclude generated file //-->
-            <exclude>**/JmsHeader.java</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>findbugs-maven-plugin</artifactId>
-        <configuration>
-          <excludeFilterFile>${basedir}/src/main/resources/findbugsExclude.xml</excludeFilterFile>
-        </configuration>
-      </plugin>
-
-    </plugins>
-  </build>
-  <profiles>
-    <profile>
-      <id>protobuf</id>
-      <build>
-        <plugins>
-          <plugin>
-            <artifactId>maven-antrun-plugin</artifactId>
-            <executions>
-              <execution>
-                <phase>generate-sources</phase>
-                <id>default-cli</id>
-                <configuration>
-                  <target>
-                    <exec executable="protoc" failonerror="true">
-                      <arg value="--java_out=src/main/java" />
-                      <arg value="src/main/protobuf/JmsHeader.proto" />
-                    </exec>
-                  </target>
-                </configuration>
-                <goals>
-                  <goal>run</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>activemqtests</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-surefire-plugin</artifactId>
-            <version>2.9</version>
-            <executions>
-              <execution>
-                <id>integration-tests</id>
-                <phase>test</phase>
-                <goals>
-                  <goal>test</goal>
-                </goals>
-                <configuration>
-                  <skip>false</skip>
-                  <includes>
-                    <!-- run the activemq testcases -->
-                    <include>org/apache/activemq/**/Test*.java</include>
-                    <include>org/apache/activemq/**/*Test.java</include>
-                    <include>org/apache/activemq/**/*TestCase.java</include>
-                  </includes>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
-</project>

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/hedwig-client-jms/src/main/grammar/javacc/readme.html
----------------------------------------------------------------------
diff --git a/hedwig-client-jms/src/main/grammar/javacc/readme.html b/hedwig-client-jms/src/main/grammar/javacc/readme.html
deleted file mode 100644
index b118681..0000000
--- a/hedwig-client-jms/src/main/grammar/javacc/readme.html
+++ /dev/null
@@ -1,26 +0,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.
--->
-
-
-Contains the grammar to define and support selectors in our JMS provider. <br/>
-Maven handles generation of the code based on this, and the JMS provider code has rest of the
-implementation which depends on this generated code to implement selectors in our provider.<br/>
-Please refer to <a href="../../java/org/apache/hedwig/jms/selector/package-info.html">
-../../java/org/apache/hedwig/jms/selector/package-info.html</a> for more information. <br/>
-
-<p/>
-Based loosely off java and sql grammar from javacc.

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/hedwig-client-jms/src/main/grammar/javacc/selector_grammar.jjt
----------------------------------------------------------------------
diff --git a/hedwig-client-jms/src/main/grammar/javacc/selector_grammar.jjt b/hedwig-client-jms/src/main/grammar/javacc/selector_grammar.jjt
deleted file mode 100644
index a141b8b..0000000
--- a/hedwig-client-jms/src/main/grammar/javacc/selector_grammar.jjt
+++ /dev/null
@@ -1,689 +0,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.
- */
-
-/* This is based on the Java1.0.2.jj grammar */
-
-options {
-  MULTI=true;
-  // JAVA_UNICODE_ESCAPE = true;
-  // LOOKAHEAD = 1;
-  FORCE_LA_CHECK = false;
-  NODE_EXTENDS="MyNode";
-  VISITOR = true;
-  STATIC = false;
-  VISITOR_DATA_TYPE = "SelectorEvalState";
-  VISITOR_EXCEPTION = "SelectorEvaluationException";
-
-/*
-  DEBUG_PARSER = true ;
-  DEBUG_LOOKAHEAD = true ;
-  DEBUG_TOKEN_MANAGER = true ;
-  */
-}
-
-PARSER_BEGIN(SelectorParser)
-
-/**
- * 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.hedwig.jms.selector;
-
-
-import org.apache.hedwig.jms.SessionImpl;
-import org.apache.hedwig.jms.message.MessageImpl;
-import org.apache.hedwig.jms.message.TextMessageImpl;
-
-import java.io.StringReader;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.LinkedHashMap;
-
-
-public class SelectorParser {
-
-  // It contains no state (as of now).
-  private static final InterpretSelectorParserVisitor interpreter = new InterpretSelectorParserVisitor();
-  private static final TreeDumperSelectorParserVisitor treeDumper = new TreeDumperSelectorParserVisitor();
-
-  public static Boolean evaluateSelector(final Node ast, final MessageImpl message) {
-  if (MyNode.logger.isTraceEnabled()) {
-      MyNode.logger.trace("--- Dump AST START ---");
-      try {
-        ast.jjtAccept(treeDumper, new SelectorEvalState(null));
-      } catch (SelectorEvaluationException e) {
-        MyNode.logger.trace("Unable to run debug visitor " + message + ", exception : " + e + " ... ignoring.", e);
-      }
-      MyNode.logger.trace("--- Dump AST DONE---");
-    }
-    final SelectorEvalState data = new SelectorEvalState(message);
-    try {
-        ast.jjtAccept(interpreter, data);
-        if (1 != data.getStack().size() ||
-                SelectorConstant.SelectorDataType.BOOLEAN != data.getStack().peek().type){
-            if (MyNode.logger.isDebugEnabled())
-                MyNode.logger.debug("Expected only a single boolean in stack, obtained : " + data.getStack());
-            return null;
-        }
-        return data.getStack().peek().getBoolValue();
-    } catch (SelectorEvaluationException e) {
-        if (MyNode.logger.isDebugEnabled())
-            MyNode.logger.debug("Unable to run interpreter on " + message + ", exception : "
-                                + e + " ... ignoring message", e);
-        return null;
-    }
-  }
-
-  private static final int CACHED_AST_SIZE = Integer.getInteger("CACHED_AST_SIZE", 128);
-  private static final LinkedHashMap<String, Node> parsedSelectorCache
-       = new LinkedHashMap<String, Node>(CACHED_AST_SIZE, 0.75f, true){
-    @Override
-    protected boolean removeEldestEntry(Map.Entry<String, Node> eldest) {
-      return size() > CACHED_AST_SIZE;
-    }
-  };
-
-  public static Node parseMessageSelector(String messageSelector) throws ParseException {
-    if (MyNode.logger.isTraceEnabled()) {
-      MyNode.logger.trace("Parse '" + messageSelector + "'");
-    }
-    synchronized (parsedSelectorCache){
-      if (parsedSelectorCache.containsKey(messageSelector)) return parsedSelectorCache.get(messageSelector);
-    }
-    Node retval = null;
-    try {
-      SelectorParser parser = new SelectorParser(new StringReader(messageSelector));
-      parser.Expression();
-      retval = parser.jjtree.rootNode();
-      return retval;
-    } catch (TokenMgrError rmErr){
-      // It throws an error ! seriously ? ... sigh !
-      if (MyNode.logger.isDebugEnabled()) {
-        MyNode.logger.debug("Unable to parse selector expression - recieved error ", rmErr);
-      }
-      throw new ParseException(rmErr.toString());
-    } finally {
-        synchronized (parsedSelectorCache){
-          parsedSelectorCache.put(messageSelector, retval);
-        }
-    }
-  }
-
-  public static void main(String[] args) throws ParseException, SelectorEvaluationException  {
-      MessageImpl message = new TextMessageImpl(null, "test");
-      SelectorEvalState data = new SelectorEvalState(message);
-      SelectorParserVisitor visitor = new InterpretSelectorParserVisitor();
-      for (String arg : args){
-          Node node = parseMessageSelector(arg);
-          node.jjtAccept(visitor, data);
-
-          if (1 != data.getStack().size()){
-            throw new IllegalArgumentException("Invalid proposition '" + arg
-                                               + "'. Unexpected result stack : " + data.getStack());
-          }
-          else System.out.println("Result : " + data.getStack().peek());
-      }
-  }
-
-  private String unescapeSingleQuotes(String str){
-    final int len = str.length();
-    final StringBuilder retval = new StringBuilder();
-
-    int offset = 0;
-    while (true){
-      int indx = str.indexOf('\'', offset);
-      if (-1 == indx) break;
-      if (indx + 1 >= len) break;
-
-      retval.append(str.substring(offset, indx + 1));
-      offset = indx + 1;
-      if ('\'' == str.charAt(indx + 1)) offset ++;
-    }
-    if (offset < len) retval.append(str.substring(offset));
-    return retval.toString();
-  }
-
-  public String parseString(final Token token, boolean canBeNull) throws ParseException{
-    if (canBeNull && null == token) return null;
-
-    final String str = token.image;
-    final int len = str.length();
-    if (len >= 2 && '\'' == str.charAt(0) && '\'' == str.charAt(len - 1)){
-      String tstr = str.substring(1, len - 1);
-      tstr = unescapeSingleQuotes(tstr);
-      return tstr;
-    }
-    if (!"''".equals(str)) throw new ParseException("Unexpected string : " + str);
-    return "";
-  }
-
-  public String parseString(final Token token) throws ParseException{
-    return parseString(token, false);
-  }
-
-  public String parseIdentifier(Token identifier) throws ParseException{
-    // nothing to parse actually ...
-    final String identifierName = identifier.image;
-    if ("null".equalsIgnoreCase(identifierName) ||
-          "true".equalsIgnoreCase(identifierName) ||
-          "false".equalsIgnoreCase(identifierName)){
-      throw new ParseException("Invalid identifier name : " + identifierName);
-    }
-
-    if ("NOT".equalsIgnoreCase(identifierName) ||
-          "AND".equalsIgnoreCase(identifierName) ||
-          "OR".equalsIgnoreCase(identifierName) ||
-          "BETWEEN".equalsIgnoreCase(identifierName) ||
-          "LIKE".equalsIgnoreCase(identifierName) ||
-          "IN".equalsIgnoreCase(identifierName) ||
-          "IS".equalsIgnoreCase(identifierName) ||
-          "ESCAPE".equalsIgnoreCase(identifierName)){
-      throw new ParseException("Invalid identifier name : " + identifierName);
-    }
-
-    return identifierName;
-  }
-}
-
-
-PARSER_END(SelectorParser)
-
-SKIP : /* WHITE SPACE */
-{
-  " "
-| "\t"
-| "\n"
-| "\r"
-| "\f"
-}
-
-/*
-SKIP :
-{
-  " "
-| "\t"
-| "\f"
-}
-*/
-
-// As per 3.8.1.3 Special Notes, I SHOULD NOT be supporting SQL comments ... but what the heck :-)
-/* COMMENTS */
-/*
-SKIP:
-{
-  <SINGLE_LINE_COMMENT: "--" (~["\n","\r"])* ("\n"|"\r"|"\r\n")>
-| <MULTI_LINE_COMMENT: "/*" (~["*"])* "*" ("*" | (~["*","/"] (~["*"])* "*"))* "/">
-}
-*/
-
-TOKEN : /* SEPARATORS */
-{
-  < LPAREN: "(" >
-| < RPAREN: ")" >
-}
-
-TOKEN : /* OPERATORS */
-{
-  < EQ: "=" >
-| < GT: ">" >
-| < LT: "<" >
-| < LE: "<=" >
-| < GE: ">=" >
-| < NE: "<>" >
-
-| < PLUS: "+" >
-| < MINUS: "-" >
-| < STAR: "*" >
-| < SLASH: "/" >
-| < COMMA: "," >
-}
-
-TOKEN[IGNORE_CASE] :
-{
-
-  < NULL : "NULL" >
-
-| < NOT : "NOT" >
-| < AND : "AND" >
-| < OR : "OR" >
-
-| < BETWEEN : "BETWEEN" >
-| < LIKE : "LIKE" >
-| < IN : "IN" >
-| < IS : "IS" >
-| < ESCAPE : "ESCAPE" >
-}
-
-
-
-TOKEN[IGNORE_CASE] : /* Boolean literal - case-insensitive */
-{
-  < BOOLEAN_LITERAL: "true" | "false" >
-}
-
-
-TOKEN : /* IDENTIFIER */
-{
-  < IDENTIFIER: <LETTER> (<LETTER>|<DIGIT>)* >
-|
-  < #LETTER:
-      [
-       "\u0024",
-       "\u0041"-"\u005a",
-       "\u005f",
-       "\u0061"-"\u007a",
-       "\u00c0"-"\u00d6",
-       "\u00d8"-"\u00f6",
-       "\u00f8"-"\u00ff",
-       "\u0100"-"\u1fff",
-       "\u3040"-"\u318f",
-       "\u3300"-"\u337f",
-       "\u3400"-"\u3d2d",
-       "\u4e00"-"\u9fff",
-       "\uf900"-"\ufaff"
-      ]
-  >
-|
-  < #DIGIT:
-      [
-       "\u0030"-"\u0039",
-       "\u0660"-"\u0669",
-       "\u06f0"-"\u06f9",
-       "\u0966"-"\u096f",
-       "\u09e6"-"\u09ef",
-       "\u0a66"-"\u0a6f",
-       "\u0ae6"-"\u0aef",
-       "\u0b66"-"\u0b6f",
-       "\u0be7"-"\u0bef",
-       "\u0c66"-"\u0c6f",
-       "\u0ce6"-"\u0cef",
-       "\u0d66"-"\u0d6f",
-       "\u0e50"-"\u0e59",
-       "\u0ed0"-"\u0ed9",
-       "\u1040"-"\u1049"
-      ]
-  >
-}
-
-
-TOKEN : /* LITERALS */
-{
-  < FLOATING_POINT_LITERAL:
-    // (["+","-"])?
-      (
-        (["0"-"9"])+ "." (["0"-"9"])* (<EXPONENT>)? (["f","F","d","D"])?
-      | "." (["0"-"9"])+ (<EXPONENT>)? (["f","F","d","D"])?
-      | (["0"-"9"])+ <EXPONENT> (["f","F","d","D"])?
-      | (["0"-"9"])+ (<EXPONENT>)? ["f","F","d","D"]
-      )
-  >
-|
-  < #EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ >
-|
-  // Scrapping the earlier more complicated definition of string listern.
-  // This is not required on second thoughts - a simpler definition will suffice.
-   < STRING_LITERAL: "'" (~["'"])* "'" ("'" (~["'"])* "'")*>
-  |
-  < INTEGER_LITERAL: // (["+","-"])?
-    ["0"-"9"] (["0"-"9"])* >
-}
-
-
-
-
-void Expression () #void : {}
-{
-  ExpressionChoice()
-  <EOF>
-}
-
-void ExpressionChoice() #void : {}
-{
-  LOOKAHEAD(OrLogicalTerm())
-  OrLogicalTerm() |
-
-  AndLogicalTermChoice()
-}
-
-void OrLogicalTerm () #void : {}
-{
-  AndLogicalTermChoice() (
-    ( ( <OR> AndLogicalTermChoice() )
-      {
-        jjtThis.setExprFunction(LogicalComparisonFunction.OR_FUNCTION);
-      }
-    ) #OrExpr(2)
-  ) +
-}
-
-void AndLogicalTermChoice() #void : {}
-{
-  LOOKAHEAD(AndLogicalTerm())
-  AndLogicalTerm() |
-
-  NotLogicalTermChoice()
-}
-
-void AndLogicalTerm () #void : {}
-{
-  NotLogicalTermChoice() (
-    ( ( <AND> NotLogicalTermChoice() )
-      {
-        jjtThis.setExprFunction(LogicalComparisonFunction.AND_FUNCTION);
-      }
-    ) #AndExpr(2)
-  ) +
-}
-
-void NotLogicalTermChoice() #void : {}
-{
-  LOOKAHEAD(NotLogicalTerm())
-  NotLogicalTerm() |
-
-  RelationTermChoice()
-}
-
-void NotLogicalTerm () #void : {}
-{
-  ( ( <NOT> RelationTermChoice() )
-    {
-      jjtThis.setExprFunction(UnaryExprFunction.NOT_FUNCTION);
-    }
-  ) #NotExpr(1)
-}
-
-void RelationTermChoice () #void : {}
-{
-  LOOKAHEAD(RelationTermOptions())
-  RelationTermOptions() |
-
-  ArithmeticTermChoice()
-}
-
-void RelationTermOptions() #void : {}
-{
-
-  ArithmeticTermChoice()
-
-  (
-    ( ( <GT> ArithmeticTermChoice() )
-      {
-        jjtThis.setExprFunction(ValueComparisonFunction.GREATER_THAN_FUNCTION);
-      }
-    ) #GreaterThan(2) |
-
-    ( ( <LT> ArithmeticTermChoice() )
-      {
-        jjtThis.setExprFunction(ValueComparisonFunction.LESS_THAN_FUNCTION);
-      }
-    ) #LessThan(2) |
-
-    ( ( <LE> ArithmeticTermChoice() )
-      {
-        jjtThis.setExprFunction(ValueComparisonFunction.LESS_THAN_EQUAL_TO_FUNCTION);
-      }
-    ) #LessThanEqualTo(2) |
-
-    ( ( <GE> ArithmeticTermChoice() )
-      {
-        jjtThis.setExprFunction(ValueComparisonFunction.GREATER_THAN_EQUAL_TO_FUNCTION);
-      }
-    ) #GreaterThanEqualTo(2) |
-
-    ( ( <EQ> ArithmeticTermChoice() )
-      {
-        jjtThis.setExprFunction(ValueComparisonFunction.EQUAL_TO_FUNCTION);
-      }
-    ) #EqualTo(2) |
-
-    ( ( <NE> ArithmeticTermChoice() )
-      {
-        jjtThis.setExprFunction(ValueComparisonFunction.NOT_EQUAL_TO_FUNCTION);
-      }
-    ) #NotEqualTo(2) |
-
-
-    LOOKAHEAD(IsNullTerm())
-    // LOOKAHEAD(2)
-    IsNullTerm() |
-
-    LOOKAHEAD(BetweenTerm())
-    // LOOKAHEAD(2)
-    BetweenTerm() |
-
-    LOOKAHEAD(InTerm())
-    // LOOKAHEAD(2)
-    InTerm() |
-
-    LOOKAHEAD(LikeTerm())
-    // LOOKAHEAD(2)
-    LikeTerm()
-  )
-
-}
-
-
-
-void IsNullTerm() #void : {
-  Token notToken = null;
-}
-{
-  ( ( <IS> ( notToken=<NOT> )? <NULL> )
-    {
-      jjtThis.setExprFunction(new PropertyExprFunction.IsNullExpr(null != notToken));
-    } ) #IsNullExpr(1)
-}
-
-
-void BetweenTerm() #void : {
-  Token notToken = null;
-}
-{
-
-  ( ( ( notToken=<NOT> )? <BETWEEN> ArithmeticTermChoice() <AND> ArithmeticTermChoice() )
-  {
-    jjtThis.setExprFunction(new PropertyExprFunction.BetweenExpr(null != notToken));
-  } ) #BetweenExpr(3)
-}
-
-
-void InTerm() #void : {
-  Token notToken = null;
-}
-{
-  ( ( ( notToken=<NOT> )? <IN> <LPAREN> StringVarargParams() <RPAREN> )
-  {
-      jjtThis.setExprFunction(new PropertyExprFunction.InExpr(null != notToken));
-  } ) #InExpr(2)
-}
-
-void LikeTerm() #void : {
-  Token notToken = null;
-  Token likePattern = null;
-  Token escapeCharacter = null;
-}
-{
-  ( ( ( notToken=<NOT> )? <LIKE> likePattern=<STRING_LITERAL> ( <ESCAPE> escapeCharacter=<STRING_LITERAL> )? )
-  {
-    jjtThis.setExprFunction(new PropertyExprFunction.LikeExpr(
-      parseString(likePattern),
-      parseString(escapeCharacter, true),
-      null != notToken));
-  } ) #LikeExpr(1)
-}
-
-
-
-
-
-void ArithmeticTermChoice () #void : {}
-{
-  LOOKAHEAD(AddTerm())
-  AddTerm() |
-
-  MultTermChoice()
-}
-
-void AddTerm () #void : {}
-{
-
-  MultTermChoice() (
-     ( (<PLUS> MultTermChoice() )
-       {
-         jjtThis.setExprFunction(BinaryArithmeticFunction.ADD_FUNCTION);
-       }
-     ) #AddExpr(2) |
-
-     ( (<MINUS> MultTermChoice() )
-       {
-         jjtThis.setExprFunction(BinaryArithmeticFunction.SUB_FUNCTION);
-       }
-     ) #SubExpr(2)
-  ) +
-}
-
-void MultTermChoice() #void : {}
-{
-  LOOKAHEAD(MultTerm())
-  MultTerm() |
-
-  UnaryUnitChoice()
-}
-
-void MultTerm() #void : {}
-{
-  UnaryUnitChoice() (
-     ( ( <SLASH> UnaryUnitChoice() )
-       {
-         jjtThis.setExprFunction(BinaryArithmeticFunction.DIVIDE_FUNCTION);
-       }
-     ) #DivideExpr(2) |
-
-     ( ( <STAR> UnaryUnitChoice() )
-     {
-       jjtThis.setExprFunction(BinaryArithmeticFunction.MULTIPLY_FUNCTION);
-     }
-    ) #MultiplyExpr(2)
-  ) +
-}
-
-
-void UnaryUnitChoice() #void : {}
-{
-  LOOKAHEAD(UnaryUnit())
-  UnaryUnit() |
-
-  BasicUnit()
-}
-
-void UnaryUnit() #void : {}
-{
-  LOOKAHEAD( <MINUS> BasicUnit() )
-  ( ( <MINUS> BasicUnit() )
-    {
-      jjtThis.setExprFunction(UnaryArithmeticFunction.NEGATE_FUNCTION);
-    }
-  ) #NegateExpr(1) |
-
-  // Ignore if + value.
-  LOOKAHEAD( <PLUS> BasicUnit() )
-  ( ( <PLUS> BasicUnit() )
-    {
-      // noop
-    }
-  )
-}
-
-void BasicUnit() #void :  {
-  Token identifier = null;
-}
-{
-  // An expression within braces for grouping
-
-  // LOOKAHEAD(<LPAREN> ExpressionChoice() <RPAREN>)
-  (<LPAREN> ExpressionChoice() <RPAREN>) |
-
-  // LOOKAHEAD(Constant())
-  Constant() |
-
-  // LOOKAHEAD(<IDENTIFIER>)
-  ( ( identifier=<IDENTIFIER> )
-  {
-    jjtThis.setExprFunction(new PropertyExprFunction.LookupExpr(parseIdentifier(identifier)));
-  } ) #LookupExpr(0)
-}
-
-
-
-void Constant() : {
-  Token bt, it, ft;
-  Token st;
-}
-{
-  bt=<BOOLEAN_LITERAL>
-  {
-    jjtThis.setConstantValue(new SelectorConstant(Boolean.parseBoolean(bt.image.toLowerCase())));
-  } |
-  ft=<FLOATING_POINT_LITERAL>
-  {
-    jjtThis.setConstantValue(new SelectorConstant(Double.parseDouble(ft.image)));
-  }
-  |
-  st=<STRING_LITERAL>
-  {
-    jjtThis.setConstantValue(new SelectorConstant(parseString(st)));
-  } |
-  it=<INTEGER_LITERAL>
-  {
-    jjtThis.setConstantValue(new SelectorConstant(Integer.parseInt(it.image)));
-  }
-}
-
-
-void StringVarargParams() : {
-  Token st;
-}
-{
-  st=<STRING_LITERAL>
-  {
-    Set<String> set = new HashSet<String>(4);
-    set.add(parseString(st));
-    jjtThis.setConstantValue(new SelectorConstant(set));
-  }
-
-  ( ( <COMMA> st=<STRING_LITERAL> )
-  {
-    jjtThis.addToStringSet(parseString(st));
-  }
-  )*
-
-}

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/ConnectionImpl.java
----------------------------------------------------------------------
diff --git a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/ConnectionImpl.java b/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/ConnectionImpl.java
deleted file mode 100644
index 1a77fcf..0000000
--- a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/ConnectionImpl.java
+++ /dev/null
@@ -1,476 +0,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.
- */
-package org.apache.hedwig.jms;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.jms.Connection;
-import javax.jms.ConnectionConsumer;
-import javax.jms.ConnectionMetaData;
-import javax.jms.Destination;
-import javax.jms.ExceptionListener;
-import javax.jms.InvalidClientIDException;
-import javax.jms.JMSException;
-import javax.jms.Queue;
-import javax.jms.QueueConnection;
-import javax.jms.ServerSessionPool;
-import javax.jms.Topic;
-import javax.jms.TopicConnection;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Implementation of jmx Connection
- * MUST be MT-safe (2.8)
- */
-public abstract class ConnectionImpl implements Connection, TopicConnection, QueueConnection {
-
-    private static final Logger logger = LoggerFactory.getLogger(ConnectionImpl.class);
-
-    // Copied from old HedwigConnectoin
-    // TODO move to a constants class?
-    public static final String HEDWIG_CLIENT_CONFIG_FILE = "hedwig.client.config.file";
-    private static final Set<String> globalClientIdSet = new HashSet<String>(16);
-
-    private final String user;
-    private final String password;
-
-    // Will be set to a random string if unspecified - we do not have a way (currently) for admin
-    // specified value ...
-    // Note, using the system property means
-    // private String clientID = System.getProperty("HEDWIG_CLIENT_ID", null);
-    private volatile String clientID = null;
-
-    // I do not like locking on 'this' inspite of the perf diff - allows 'others' to lock on our
-    // lock object (client code for example) : leaks MT-safety.
-    private final Object lockObject = new Object();
-
-    // Call this when there are issues (primarily connection issues imo).
-    // There are two issues with supporting this :
-    // a) we do not follow jms model of connection -> multiple sessions; for us, connection does not
-    // represent underlying connection to
-    // hedwig, but session does. So the basic model does not fit.
-    // b) from what I see, hedwig-client does not expose the ability to do this. (it automatically reconnects)
-    // hence we do not support this yet.
-    private volatile ExceptionListener exceptionListener;
-
-    // connection 'starts' in stopped mode.
-    // Until it is started, NO messages MUST be delivered - 4.3.3
-    private StateManager connectionState = new StateManager(StateManager.State.STOPPED, lockObject);
-
-    private final List<SessionImpl> sessionList = new ArrayList<SessionImpl>(4);
-    private final ConnectionMetaData metadata = new ConnectionMetaDataImpl();
-
-    protected ConnectionImpl() {
-        this.user = null;
-        this.password = null;
-    }
-
-    protected ConnectionImpl(String user, String password) {
-        this.user = user;
-        this.password = password;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public SessionImpl createSession(boolean transacted, int acknowledgeMode)  throws JMSException {
-        return createSessionImpl(transacted, acknowledgeMode, null);
-    }
-
-    protected SessionImpl createSessionImpl(boolean transacted, int acknowledgeMode,
-                                            MessagingSessionFacade.DestinationType type)  throws JMSException {
-        final boolean needStart;
-        synchronized (lockObject){
-            if (connectionState.isInCloseMode())
-              throw new javax.jms.IllegalStateException("Connection closed");
-            if (connectionState.isTransitionState()) {
-                connectionState.waitForTransientStateChange(StateManager.WAIT_TIME_FOR_TRANSIENT_STATE_CHANGE, logger);
-                // Not expected actually, present to guard against future changes ...
-                if (connectionState.isTransitionState())
-                  throw new JMSException("Connection did not make state change to steady state ?");
-
-                if (connectionState.isClosed()) throw new JMSException("Connection already closed");
-
-            }
-
-            assert StateManager.State.STOPPED == connectionState.getCurrentState() ||
-                    StateManager.State.STARTED == connectionState.getCurrentState();
-
-            // create within lock, so that it can register with connection, etc ...
-            // session = new SessionImpl(this, transacted, acknowledgeMode);
-            final SessionImpl session = createSessionInstance(transacted, acknowledgeMode, type);
-            sessionList.add(session);
-            needStart = connectionState.isStarted();
-
-            if (needStart) session.start();
-            return session;
-        }
-    }
-
-    protected abstract SessionImpl createSessionInstance(boolean transacted, int acknowledgeMode,
-                                                         MessagingSessionFacade.DestinationType type)
-        throws JMSException;
-
-    public boolean removeSession(SessionImpl session){
-        // simply remove.
-        synchronized (lockObject){
-            return sessionList.remove(session);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public String getClientID() {
-        return clientID;
-    }
-
-    /**
-     * Allow clientID to be set only if it is NOT administratively configured for connection. (4.3.2)
-     * Since we do not work (yet) within the context of a container, this aspect is a TODO for now.
-     *
-     * {@inheritDoc}
-     */
-    @Override
-    public void setClientID(String clientID) throws InvalidClientIDException, javax.jms.IllegalStateException {
-        if (null == clientID) throw new InvalidClientIDException("clientId specified is null");
-
-        synchronized (globalClientIdSet){
-            if (globalClientIdSet.contains(clientID))
-              throw new InvalidClientIDException("clientId '" + clientID + "' already in use in this provider");
-            if (null != this.clientID && !this.clientID.equals(clientID))
-              throw new javax.jms.IllegalStateException("clientID already set to " + this.clientID +
-                  ", cant override to " + clientID);
-            this.clientID = clientID;
-            globalClientIdSet.add(clientID);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public ConnectionMetaData getMetaData() throws JMSException {
-        // return new ConnectionMetaDataImpl();
-        return metadata;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public ExceptionListener getExceptionListener() throws JMSException {
-        return exceptionListener;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void setExceptionListener(ExceptionListener exceptionListener) throws JMSException {
-        this.exceptionListener = exceptionListener;
-    }
-
-    public void initConnectionClientID() throws javax.jms.IllegalStateException, InvalidClientIDException {
-        synchronized (lockObject){
-            // default to hedwig_client_id ?
-            if (null == clientID) setClientID(SessionImpl.generateRandomString());
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void start() throws JMSException {
-
-        final StateManager.State prevState;
-        final List<SessionImpl> sessionListCopy;
-
-        if (logger.isTraceEnabled()) logger.trace("Attempting to start connection");
-
-        synchronized (lockObject){
-            if (connectionState.isStarted()) return ;
-            if (connectionState.isClosed()) throw new JMSException("Connection already closed");
-
-            if (connectionState.isTransitionState()){
-                connectionState.waitForTransientStateChange(StateManager.WAIT_TIME_FOR_TRANSIENT_STATE_CHANGE, logger);
-                // Not expected actually, present to guard against future changes ...
-                if (connectionState.isTransitionState())
-                  throw new JMSException("Connection did not make state change to steady state ?");
-
-                if (connectionState.isClosed()) throw new JMSException("Connection already closed");
-                if (connectionState.isStarted()) return ;
-
-                assert connectionState.isStopped();
-                // try again ...
-            }
-
-            prevState = connectionState.getCurrentState();
-            connectionState.setCurrentState(StateManager.State.STARTING);
-            initConnectionClientID();
-            sessionListCopy = new ArrayList<SessionImpl>(sessionList);
-        }
-
-        StateManager.State nextState = prevState;
-        try {
-            // There will be only one thread down here ...
-
-            // start any provider specific implementation bootstrap ...
-            doStart(user, password);
-            // Copy to prevent concurrent mod exceptions.
-            if (logger.isTraceEnabled()) logger.trace("Starting " + sessionListCopy.size() + " sessions");
-            for (SessionImpl session : sessionListCopy) {
-                try {
-                    session.start();
-                } catch (JMSException jex){
-                    // log the error and ignore
-                    if (logger.isInfoEnabled()) logger.info("exception starting session : " + jex);
-                    DebugUtil.dumpJMSStacktrace(logger, jex);
-                }
-            }
-            nextState = StateManager.State.STARTED;
-        } finally {
-            // set status and notify.
-            synchronized (lockObject){
-                connectionState.setCurrentState(nextState);
-                lockObject.notifyAll();
-            }
-        }
-    }
-
-
-    protected String getUser(){
-        return user;
-    }
-    protected String getPassword(){
-        return password;
-    }
-
-    protected abstract void doStart(String user, String password) throws JMSException;
-    protected abstract void doStop();
-    protected abstract void doClose();
-
-    @Override
-    public void stop() throws JMSException {
-
-        final StateManager.State prevState;
-        final List<SessionImpl> sessionListCopy;
-
-        if (logger.isTraceEnabled()) logger.trace("Attempting to stop connection");
-
-        synchronized (lockObject){
-            if (connectionState.isClosed()) throw new JMSException("Already closed");
-            if (connectionState.isStopped()) return ;
-
-            if (connectionState.isTransitionState()){
-                connectionState.waitForTransientStateChange(StateManager.WAIT_TIME_FOR_TRANSIENT_STATE_CHANGE, logger);
-                // Not expected actually, present to guard against future changes ...
-                if (connectionState.isTransitionState())
-                  throw new JMSException("Connection did not make state change to steady state ?");
-
-                if (connectionState.isClosed()) throw new JMSException("Already closed");
-                if (connectionState.isStopped()) return ;
-
-                assert connectionState.isStarted();
-
-                // try (again ?) ...
-            }
-
-            prevState = connectionState.getCurrentState();
-            connectionState.setCurrentState(StateManager.State.STOPPING);
-            sessionListCopy = new ArrayList<SessionImpl>(sessionList);
-        }
-
-        StateManager.State nextState = prevState;
-        try {
-            // In case there are any specific changes to be done.
-            // Copy to prevent concurrent mod exceptions.
-
-            // Stop all sessions - doing this within MT-safe block to prevent any possibility of race conditions.
-            // Potentially expensive, but it is a tradeoff between correctness and performance :-(
-            if (logger.isTraceEnabled()) logger.trace("Stopping " + sessionListCopy.size() + " sessions");
-            for (SessionImpl session : sessionListCopy) {
-                try {
-                    session.stop();
-                } catch (JMSException jex){
-                    // log the error and ignore
-                    if (logger.isInfoEnabled()) logger.info("exception closing session : " + jex);
-                    DebugUtil.dumpJMSStacktrace(logger, jex);
-                }
-            }
-            // stop connection AFTER session's are stopped.
-            doStop();
-            nextState = StateManager.State.STOPPED;
-        } finally {
-            // set status and notify.
-            synchronized (lockObject){
-                lockObject.notifyAll();
-                connectionState.setCurrentState(nextState);
-            }
-        }
-    }
-
-    @Override
-    public void close() throws JMSException {
-
-        final StateManager.State prevState;
-        final List<SessionImpl> sessionListCopy;
-
-        if (logger.isTraceEnabled()) logger.trace("Attempting to close connection");
-
-        synchronized (lockObject){
-            if (connectionState.isClosed()) return ;
-            if (! connectionState.isStopped()) {
-                if (connectionState.isTransitionState()){
-                    connectionState.waitForTransientStateChange(
-                            StateManager.WAIT_TIME_FOR_TRANSIENT_STATE_CHANGE, logger);
-                    // Not expected actually, present to guard against future changes ...
-                    if (connectionState.isTransitionState())
-                      throw new JMSException("Connection did not make state change to steady state ?");
-
-                    if (connectionState.isClosed()) return ;
-
-                    assert connectionState.isStarted() || connectionState.isStopped();
-                }
-            }
-
-            prevState = connectionState.getCurrentState();
-            connectionState.setCurrentState(StateManager.State.CLOSING);
-            sessionListCopy = new ArrayList<SessionImpl>(sessionList);
-        }
-
-        StateManager.State nextState = prevState;
-
-        try {
-            // Copy to prevent concurrent mod exceptions.
-
-            // Close all sessions - doing this within MT-safe block to prevent any possibility of race conditions.
-            // Potentially expensive, but it is a tradeoff between correctness and performance :-(
-            if (logger.isTraceEnabled()) logger.trace("Closing " + sessionListCopy.size() + " sessions");
-            for (SessionImpl session : sessionListCopy) {
-                try {
-                    session.close();
-                } catch (Exception ex){
-                    // log the error and ignore
-                    if (logger.isDebugEnabled()) logger.debug("exception closing session", ex);
-                    else if (logger.isInfoEnabled()) logger.info("exception closing session : " + ex);
-                }
-            }
-            doClose();
-            synchronized (globalClientIdSet){
-                assert (null != getClientID());
-                globalClientIdSet.remove(getClientID());
-            }
-            nextState = StateManager.State.CLOSED;
-        } finally {
-            // set status and notify.
-            synchronized (lockObject){
-                lockObject.notifyAll();
-
-                if (StateManager.State.CLOSED == nextState && !connectionState.isClosed()) {
-                    // clear sessions.
-                    sessionList.clear();
-                }
-                // set after everything is done.
-                connectionState.setCurrentState(nextState);
-            }
-        }
-    }
-
-    @Override
-    public ConnectionConsumer createConnectionConsumer(Destination destination, String messageSelector,
-                                                       ServerSessionPool sessionPool, int maxMessages)
-        throws JMSException {
-
-        throw new JMSException("Unsupported");
-    }
-
-    @Override
-    public ConnectionConsumer createDurableConnectionConsumer(Topic topic, String subscriptionName,
-                                                              String messageSelector, ServerSessionPool sessionPool,
-                                                              int maxMessages)
-        throws JMSException {
-
-        throw new JMSException("Unsupported");
-    }
-
-    @Override
-    public ConnectionConsumer createConnectionConsumer(Queue queue, String s,
-                                                       ServerSessionPool serverSessionPool, int maxMessages)
-        throws JMSException {
-
-        throw new JMSException("Unsupported");
-    }
-
-
-    @Override
-    public ConnectionConsumer createConnectionConsumer(Topic topic, String messageSelector,
-                                                       ServerSessionPool sessionPool, int maxMessages)
-        throws JMSException {
-
-        throw new JMSException("Unsupported");
-    }
-
-    public boolean isInStartMode() {
-        return connectionState.isInStartMode();
-    }
-
-    protected abstract MessagingSessionFacade createMessagingSessionFacade(SessionImpl session) throws JMSException;
-
-
-    // required to catch resource leaks ...
-    @Override
-    protected void finalize() throws Throwable {
-        super.finalize();
-        if (!connectionState.isClosed()) {
-            if (logger.isErrorEnabled()) logger.error("Connection was NOT closed before it went out of scope");
-            close();
-        }
-    }
-
-    private static final int LOCALLY_SENT_MESSAGE_ID_CACHE_SIZE =
-        Integer.getInteger("LOCALLY_SENT_MESSAGE_ID_CACHE_SIZE", 1024);
-    // This is gaurded by publishedMessageIds
-    private final LRUCacheSet<String> publishedMessageIds =
-        new LRUCacheSet<String>(LOCALLY_SENT_MESSAGE_ID_CACHE_SIZE, true);
-
-    boolean isLocallyPublished(String messageId){
-
-        if (null == messageId) return false;
-
-        synchronized(publishedMessageIds){
-            return publishedMessageIds.contains(messageId);
-        }
-    }
-
-    void addToLocallyPublishedMessageIds(String messageId){
-
-        if (null == messageId) return ;
-
-        synchronized(publishedMessageIds){
-            publishedMessageIds.add(messageId);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/ConnectionMetaDataImpl.java
----------------------------------------------------------------------
diff --git a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/ConnectionMetaDataImpl.java b/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/ConnectionMetaDataImpl.java
deleted file mode 100644
index 12210ac..0000000
--- a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/ConnectionMetaDataImpl.java
+++ /dev/null
@@ -1,77 +0,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.
- */
-package org.apache.hedwig.jms;
-
-import javax.jms.ConnectionMetaData;
-import java.util.Collections;
-import java.util.Enumeration;
-
-/**
- * Metadata about the provider and/or connection.
- */
-public class ConnectionMetaDataImpl implements ConnectionMetaData {
-    public static final int JMS_MAJOR_VERSION = 1;
-    public static final int JMS_MINOR_VERSION = 1;
-    // What should be the value ?
-    public static final String PROVIDER_NAME = "hedwig.jms.provider";
-
-    public static final int PROVIDER_MAJOR_VERSION = 1;
-    public static final int PROVIDER_MINOR_VERSION = 0;
-
-    @Override
-    public String getJMSVersion() {
-        return JMS_MAJOR_VERSION + "." + JMS_MINOR_VERSION;
-    }
-
-    @Override
-    public int getJMSMajorVersion() {
-        return JMS_MAJOR_VERSION;
-    }
-
-    @Override
-    public int getJMSMinorVersion() {
-        return JMS_MINOR_VERSION;
-    }
-
-    @Override
-    public String getJMSProviderName() {
-        return PROVIDER_NAME;
-    }
-
-    @Override
-    public String getProviderVersion() {
-        return getJMSVersion();
-    }
-
-    @Override
-    public int getProviderMajorVersion() {
-        return PROVIDER_MAJOR_VERSION;
-    }
-
-    @Override
-    public int getProviderMinorVersion() {
-        return PROVIDER_MINOR_VERSION;
-    }
-
-    // None right now ... add more as required.
-    @Override
-    public Enumeration getJMSXPropertyNames() {
-        // return Collections.emptyEnumeration();
-        return Collections.enumeration(Collections.emptyList());
-    }
-}

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/DebugUtil.java
----------------------------------------------------------------------
diff --git a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/DebugUtil.java b/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/DebugUtil.java
deleted file mode 100644
index 0e6d27f..0000000
--- a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/DebugUtil.java
+++ /dev/null
@@ -1,69 +0,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.
- */
-package org.apache.hedwig.jms;
-
-import javax.jms.JMSException;
-import java.io.PrintStream;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-import org.slf4j.Logger;
-
-/**
- * Contains some Debug Util methods.
- */
-public final class DebugUtil {
-
-  public static void dumpAllStacktraces(Logger logger) {
-        logger.debug(generateDumpAllStacktraces());
-    }
-
-    public static void dumpAllStacktraces(PrintStream out) {
-        out.println(generateDumpAllStacktraces());
-    }
-
-    private static String generateDumpAllStacktraces(){
-        Map<Thread, StackTraceElement[]> map = Thread.getAllStackTraces();
-
-        StringBuilder sb = new StringBuilder();
-
-        sb.append("Dump start\n---\n");
-        for (Map.Entry<Thread, StackTraceElement[]> entry : map.entrySet()){
-            sb.append("Thread ").append(entry.getKey()).append("\n");
-            for (StackTraceElement traceElement : entry.getValue())
-                sb.append("\tat ").append(traceElement).append("\n");
-
-        }
-        sb.append("---\nDump done\n");
-
-        return sb.toString();
-    }
-
-    public static void dumpJMSStacktrace(Logger logger, JMSException jex) {
-
-        assert logger.isDebugEnabled();
-
-        final Exception linkedException = jex.getLinkedException();
-        logger.debug("exception" , jex);
-        if (null != linkedException)  {
-            logger.debug("due to" , linkedException);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/LRUCacheMap.java
----------------------------------------------------------------------
diff --git a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/LRUCacheMap.java b/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/LRUCacheMap.java
deleted file mode 100644
index a9e1d50..0000000
--- a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/LRUCacheMap.java
+++ /dev/null
@@ -1,104 +0,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.
- */
-
-package org.apache.hedwig.jms;
-
-import java.util.Collection;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * An LRUCacheMap
- */
-class LRUCacheMap<K, V> implements Map<K, V> {
-    private final int maxSize;
-    private final Map<K, V> cache;
-
-    public LRUCacheMap(int maxSize, boolean accessOrder){
-        this.maxSize = maxSize;
-
-        this.cache = new LinkedHashMap<K, V>(maxSize, 0.75f, accessOrder){
-            @Override
-            protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
-                boolean retval = super.removeEldestEntry(eldest);
-                return retval || super.size() > LRUCacheMap.this.maxSize;
-            }
-        };
-    }
-
-    @Override
-    public int size() {
-        return cache.size();
-    }
-
-    @Override
-    public boolean isEmpty() {
-        return cache.isEmpty();
-    }
-
-    @Override
-    public boolean containsKey(Object key) {
-        return cache.containsKey(key);
-    }
-
-    @Override
-    public boolean containsValue(Object value) {
-        return cache.containsValue(value);
-    }
-
-    @Override
-    public V get(Object key) {
-        return cache.get(key);
-    }
-
-    @Override
-    public V put(K key, V value) {
-        return cache.put(key, value);
-    }
-
-    @Override
-    public V remove(Object key) {
-        return cache.remove(key);
-    }
-
-    @Override
-    public void putAll(Map<? extends K, ? extends V> m) {
-        cache.putAll(m);
-    }
-
-    @Override
-    public void clear() {
-        cache.clear();
-    }
-
-    @Override
-    public Set<K> keySet() {
-        return cache.keySet();
-    }
-
-    @Override
-    public Collection<V> values() {
-        return cache.values();
-    }
-
-    @Override
-    public Set<Entry<K, V>> entrySet() {
-        return cache.entrySet();
-    }
-}

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/LRUCacheSet.java
----------------------------------------------------------------------
diff --git a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/LRUCacheSet.java b/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/LRUCacheSet.java
deleted file mode 100644
index 72ce593..0000000
--- a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/LRUCacheSet.java
+++ /dev/null
@@ -1,115 +0,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.
- */
-
-package org.apache.hedwig.jms;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-
-/**
-* An LRUCache (set) based on the LRUCacheMap.
-*/
-public class LRUCacheSet<E> implements Set<E> {
-
-    private final int maxSize;
-    private final Map<E, E> cache;
-
-    public LRUCacheSet(int maxSize, boolean accessOrder){
-        this.maxSize = maxSize;
-
-        this.cache = new LinkedHashMap<E, E>(maxSize, 0.75f, accessOrder){
-            @Override
-            protected boolean removeEldestEntry(Map.Entry<E, E> eldest) {
-                boolean retval = super.removeEldestEntry(eldest);
-                return retval || super.size() > LRUCacheSet.this.maxSize;
-            }
-        };
-    }
-
-    @Override
-    public int size() {
-        return cache.size();
-    }
-
-    @Override
-    public boolean isEmpty() {
-        return cache.isEmpty();
-    }
-
-    @Override
-    public boolean contains(Object val) {
-        return cache.containsKey(val);
-    }
-
-    @Override
-    public Iterator<E> iterator() {
-        return cache.keySet().iterator();
-    }
-
-    @Override
-    public Object[] toArray() {
-        return cache.keySet().toArray();
-    }
-
-    @Override
-    public <T> T[] toArray(T[] a) {
-        return cache.keySet().toArray(a);
-    }
-
-    @Override
-    public boolean add(E val) {
-        return null == cache.put(val, val);
-    }
-
-    @Override
-    public boolean remove(Object val) {
-        if (! contains(val)) return false;
-        cache.remove(val);
-        return true;
-    }
-
-    @Override
-    public boolean containsAll(Collection<?> c) {
-        return cache.keySet().containsAll(c);
-    }
-
-    @Override
-    public boolean addAll(Collection<? extends E> c) {
-        boolean retval = false;
-        for (E e : c) retval = retval | add(e);
-        return retval;
-    }
-
-    @Override
-    public boolean retainAll(Collection<?> c) {
-        return cache.keySet().retainAll(c);
-    }
-
-    @Override
-    public boolean removeAll(Collection<?> c) {
-        return cache.keySet().removeAll(c);
-    }
-
-    @Override
-    public void clear() {
-        cache.clear();
-    }
-}