You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@eagle.apache.org by ha...@apache.org on 2016/08/11 05:36:33 UTC

incubator-eagle git commit: [EAGLE-453] Use META-INF/providers/${appProviderClassName}.xml as default metadata path

Repository: incubator-eagle
Updated Branches:
  refs/heads/develop 6d5907daa -> 08abde513


[EAGLE-453] Use META-INF/providers/${appProviderClassName}.xml as default metadata path

https://issues.apache.org/jira/browse/EAGLE-453

Use

    META-INF/providers/${APP_PROVDER_CLASS_NAME}.xml

as default metadata xml path convention, for example:

    META-INF/providers/org.apache.eagle.security.hbase.HBaseAuditLogAppProvider.xml

as which is physically universal unique and make app developer's life simpler.

Author: Hao Chen <ha...@apache.org>

Closes #329 from haoch/EAGLE-453.


Project: http://git-wip-us.apache.org/repos/asf/incubator-eagle/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-eagle/commit/08abde51
Tree: http://git-wip-us.apache.org/repos/asf/incubator-eagle/tree/08abde51
Diff: http://git-wip-us.apache.org/repos/asf/incubator-eagle/diff/08abde51

Branch: refs/heads/develop
Commit: 08abde5130da77e2d6d65c3940728b2beccb3f52
Parents: 6d5907d
Author: Hao Chen <ha...@apache.org>
Authored: Thu Aug 11 13:36:20 2016 +0800
Committer: Hao Chen <ha...@apache.org>
Committed: Thu Aug 11 13:36:20 2016 +0800

----------------------------------------------------------------------
 .../app/spi/AbstractApplicationProvider.java    |  21 +-
 .../apache/eagle/app/TestStormApplication.java  |   5 -
 ....eagle.app.TestStormApplication$Provider.xml | 111 ++++++++
 .../test/resources/TestApplicationMetadata.xml  | 111 --------
 .../app/example/ExampleApplicationProvider.java |   4 -
 .../META-INF/apps/example/metadata.xml          | 109 --------
 ...e.app.example.ExampleApplicationProvider.xml | 109 ++++++++
 .../eagle/app/jpm/JPMApplicationProvider.java   |   5 -
 .../resources/META-INF/apps/jpm/metadata.xml    | 109 --------
 ...che.eagle.app.jpm.JPMApplicationProvider.xml | 109 ++++++++
 .../hbase/HBaseAuditLogAppProvider.java         |   5 -
 .../src/main/resources/META-INF/metadata.xml    | 261 -------------------
 ....security.hbase.HBaseAuditLogAppProvider.xml | 261 +++++++++++++++++++
 13 files changed, 609 insertions(+), 611 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/08abde51/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/spi/AbstractApplicationProvider.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/spi/AbstractApplicationProvider.java b/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/spi/AbstractApplicationProvider.java
index 71d2ce6..bc6cdba 100644
--- a/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/spi/AbstractApplicationProvider.java
+++ b/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/spi/AbstractApplicationProvider.java
@@ -1,4 +1,4 @@
-/**
+/*
  * 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.
@@ -31,11 +31,28 @@ import org.slf4j.LoggerFactory;
 import javax.xml.bind.JAXBException;
 import java.util.List;
 
+/**
+ * Default metadata path is:  /META-INF/providers/${ApplicationProviderClassName}.xml
+ *
+ * @param <T>
+ */
 public abstract class AbstractApplicationProvider<T extends Application> implements ApplicationProvider<T> {
     private final static Logger LOG = LoggerFactory.getLogger(AbstractApplicationProvider.class);
     private final ApplicationDesc applicationDesc;
 
-    protected abstract String getMetadata();
+    private final static String METADATA_RESOURCE_PATH="/META-INF/providers/%s.xml";
+
+    /**
+     * Default metadata path is:  /META-INF/providers/${ApplicationProviderClassName}.xml
+     *
+     * You are not recommended to override this method except you could make sure the path is universal unique
+     *
+     * @return metadata file path
+     */
+    protected final String getMetadata(){
+        return String.format(METADATA_RESOURCE_PATH,this.getClass().getName());
+    }
+
     protected AbstractApplicationProvider() {
         String applicationDescConfig = getMetadata();
         applicationDesc = new ApplicationDesc();

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/08abde51/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/TestStormApplication.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/TestStormApplication.java b/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/TestStormApplication.java
index cd9a42d..5668e6f 100644
--- a/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/TestStormApplication.java
+++ b/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/TestStormApplication.java
@@ -67,11 +67,6 @@ public class TestStormApplication extends StormApplication{
 
     public final static class Provider extends AbstractApplicationProvider<TestStormApplication> {
         @Override
-        protected String getMetadata() {
-            return "TestApplicationMetadata.xml";
-        }
-
-        @Override
         public TestStormApplication getApplication() {
             return new TestStormApplication();
         }

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/08abde51/eagle-core/eagle-app/eagle-app-base/src/test/resources/META-INF/providers/org.apache.eagle.app.TestStormApplication$Provider.xml
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-app/eagle-app-base/src/test/resources/META-INF/providers/org.apache.eagle.app.TestStormApplication$Provider.xml b/eagle-core/eagle-app/eagle-app-base/src/test/resources/META-INF/providers/org.apache.eagle.app.TestStormApplication$Provider.xml
new file mode 100644
index 0000000..5d76eaa
--- /dev/null
+++ b/eagle-core/eagle-app/eagle-app-base/src/test/resources/META-INF/providers/org.apache.eagle.app.TestStormApplication$Provider.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ 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.
+  -->
+
+<application>
+    <type>TEST_APPLICATION</type>
+    <name>Test Monitoring Application</name>
+    <version>0.5.0-incubating</version>
+    <appClass>org.apache.eagle.app.TestStormApplication</appClass>
+    <viewPath>/apps/example</viewPath>
+    <configuration>
+        <property>
+            <name>message.content</name>
+            <displayName>Message</displayName>
+            <value>Hello, example application!</value>
+            <description>Just an sample configuration property</description>
+        </property>
+    </configuration>
+
+    <!-- Output components -->
+    <streams>
+        <stream>
+            <streamId>TEST_STREAM_1</streamId>
+            <description>Example output stream #1</description>
+            <validate>true</validate>
+            <timeseries>true</timeseries>
+            <columns>
+                <column>
+                    <name>metric</name>
+                    <type>string</type>
+                </column>
+                <column>
+                    <name>source</name>
+                    <type>string</type>
+                </column>
+                <column>
+                    <name>value</name>
+                    <type>double</type>
+                    <defaultValue>0.0</defaultValue>
+                </column>
+            </columns>
+        </stream>
+        <stream>
+            <streamId>TEST_STREAM_2</streamId>
+            <description>Example output stream #2</description>
+            <validate>true</validate>
+            <timeseries>true</timeseries>
+            <columns>
+                <column>
+                    <name>metric</name>
+                    <type>string</type>
+                </column>
+                <column>
+                    <name>source</name>
+                    <type>string</type>
+                </column>
+                <column>
+                    <name>value</name>
+                    <type>double</type>
+                    <defaultValue>0.0</defaultValue>
+                </column>
+            </columns>
+        </stream>
+    </streams>
+    <docs>
+        <install>
+            # Step 1: Create source kafka topic named "${site}_example_source_topic"
+
+            ./bin/kafka-topics.sh --create --topic example_source_topic --replication-factor 1 --replication 1
+
+            # Step 2: Set up data collector to flow data into kafka topic in
+
+            ./bin/logstash -f log_collector.conf
+
+            ## `log_collector.conf` sample as following:
+
+            input {
+
+            }
+            filter {
+
+            }
+            output{
+
+            }
+
+            # Step 3: start application
+
+            # Step 4: monitor with featured portal or alert with policies
+        </install>
+        <uninstall>
+            # Step 1: stop and uninstall application
+            # Step 2: delete kafka topic named "${site}_example_source_topic"
+            # Step 3: stop logstash
+        </uninstall>
+    </docs>
+</application>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/08abde51/eagle-core/eagle-app/eagle-app-base/src/test/resources/TestApplicationMetadata.xml
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-app/eagle-app-base/src/test/resources/TestApplicationMetadata.xml b/eagle-core/eagle-app/eagle-app-base/src/test/resources/TestApplicationMetadata.xml
deleted file mode 100644
index f04da60..0000000
--- a/eagle-core/eagle-app/eagle-app-base/src/test/resources/TestApplicationMetadata.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  ~ 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.
-  -->
-
-<application>
-    <type>TEST_APPLICATION</type>
-    <name>Test Monitoring Application</name>
-    <version>0.5.0-incubating</version>
-    <appClass>org.apache.eagle.app.TestStormApplication</appClass>
-    <viewPath>/apps/example</viewPath>
-    <configuration>
-        <property>
-            <name>message.content</name>
-            <displayName>Message</displayName>
-            <value>Hello, example application!</value>
-            <description>Just an sample configuration property</description>
-        </property>
-    </configuration>
-
-    <!-- Output components -->
-    <streams>
-        <stream>
-            <streamId>TEST_STREAM_1</streamId>
-            <description>Example output stream #1</description>
-            <validate>true</validate>
-            <timeseries>true</timeseries>
-            <columns>
-                <column>
-                    <name>metric</name>
-                    <type>string</type>
-                </column>
-                <column>
-                    <name>source</name>
-                    <type>string</type>
-                </column>
-                <column>
-                    <name>value</name>
-                    <type>double</type>
-                    <defaultValue>0.0</defaultValue>
-                </column>
-            </columns>
-        </stream>
-        <stream>
-            <streamId>TEST_STREAM_2</streamId>
-            <description>Example output stream #2</description>
-            <validate>true</validate>
-            <timeseries>true</timeseries>
-            <columns>
-                <column>
-                    <name>metric</name>
-                    <type>string</type>
-                </column>
-                <column>
-                    <name>source</name>
-                    <type>string</type>
-                </column>
-                <column>
-                    <name>value</name>
-                    <type>double</type>
-                    <defaultValue>0.0</defaultValue>
-                </column>
-            </columns>
-        </stream>
-    </streams>
-    <docs>
-        <install>
-# Step 1: Create source kafka topic named "${site}_example_source_topic"
-
-./bin/kafka-topics.sh --create --topic example_source_topic --replication-factor 1 --replication 1
-
-# Step 2: Set up data collector to flow data into kafka topic in
-
-./bin/logstash -f log_collector.conf
-
-## `log_collector.conf` sample as following:
-
-input {
-
-}
-filter {
-
-}
-output{
-
-}
-
-# Step 3: start application
-
-# Step 4: monitor with featured portal or alert with policies
-        </install>
-        <uninstall>
-# Step 1: stop and uninstall application
-# Step 2: delete kafka topic named "${site}_example_source_topic"
-# Step 3: stop logstash
-        </uninstall>
-    </docs>
-</application>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/08abde51/eagle-examples/eagle-app-example/src/main/java/org/apache/eagle/app/example/ExampleApplicationProvider.java
----------------------------------------------------------------------
diff --git a/eagle-examples/eagle-app-example/src/main/java/org/apache/eagle/app/example/ExampleApplicationProvider.java b/eagle-examples/eagle-app-example/src/main/java/org/apache/eagle/app/example/ExampleApplicationProvider.java
index f3b7939..c207788 100644
--- a/eagle-examples/eagle-app-example/src/main/java/org/apache/eagle/app/example/ExampleApplicationProvider.java
+++ b/eagle-examples/eagle-app-example/src/main/java/org/apache/eagle/app/example/ExampleApplicationProvider.java
@@ -33,10 +33,6 @@ import org.slf4j.LoggerFactory;
  */
 public class ExampleApplicationProvider extends AbstractApplicationProvider<ExampleStormApplication> {
     private final static Logger LOGGER = LoggerFactory.getLogger(ExampleApplicationProvider.class);
-    @Override
-    protected String getMetadata() {
-        return "/META-INF/apps/example/metadata.xml";
-    }
 
     @Override
     public ExampleStormApplication getApplication() {

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/08abde51/eagle-examples/eagle-app-example/src/main/resources/META-INF/apps/example/metadata.xml
----------------------------------------------------------------------
diff --git a/eagle-examples/eagle-app-example/src/main/resources/META-INF/apps/example/metadata.xml b/eagle-examples/eagle-app-example/src/main/resources/META-INF/apps/example/metadata.xml
deleted file mode 100644
index 66e734f..0000000
--- a/eagle-examples/eagle-app-example/src/main/resources/META-INF/apps/example/metadata.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  ~ 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.
-  -->
-
-<application>
-    <type>EXAMPLE_APPLICATION</type>
-    <name>Example Monitoring Application</name>
-    <version>0.5.0-incubating</version>
-    <appClass>org.apache.eagle.app.example.ExampleStormApplication</appClass>
-    <viewPath>/apps/example</viewPath>
-    <configuration>
-        <property>
-            <name>message</name>
-            <displayName>Message</displayName>
-            <value>Hello, example application!</value>
-            <description>Just an sample configuration property</description>
-        </property>
-    </configuration>
-    <streams>
-        <stream>
-            <streamId>SAMPLE_STREAM_1</streamId>
-            <description>Sample output stream #1</description>
-            <validate>true</validate>
-            <timeseries>true</timeseries>
-            <columns>
-                <column>
-                    <name>metric</name>
-                    <type>string</type>
-                </column>
-                <column>
-                    <name>source</name>
-                    <type>string</type>
-                </column>
-                <column>
-                    <name>value</name>
-                    <type>double</type>
-                    <defaultValue>0.0</defaultValue>
-                </column>
-            </columns>
-        </stream>
-        <stream>
-            <streamId>SAMPLE_STREAM_2</streamId>
-            <description>Sample output stream #2</description>
-            <validate>true</validate>
-            <timeseries>true</timeseries>
-            <columns>
-                <column>
-                    <name>metric</name>
-                    <type>string</type>
-                </column>
-                <column>
-                    <name>source</name>
-                    <type>string</type>
-                </column>
-                <column>
-                    <name>value</name>
-                    <type>double</type>
-                    <defaultValue>0.0</defaultValue>
-                </column>
-            </columns>
-        </stream>
-    </streams>
-    <docs>
-        <install>
-# Step 1: Create source kafka topic named "${site}_example_source_topic"
-
-./bin/kafka-topics.sh --create --topic example_source_topic --replication-factor 1 --replication 1
-
-# Step 2: Set up data collector to flow data into kafka topic in
-
-./bin/logstash -f log_collector.conf
-
-## `log_collector.conf` sample as following:
-
-input {
-
-}
-filter {
-
-}
-output{
-
-}
-
-# Step 3: start application
-
-# Step 4: monitor with featured portal or alert with policies
-        </install>
-        <uninstall>
-# Step 1: stop and uninstall application
-# Step 2: delete kafka topic named "${site}_example_source_topic"
-# Step 3: stop logstash
-        </uninstall>
-    </docs>
-</application>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/08abde51/eagle-examples/eagle-app-example/src/main/resources/META-INF/providers/org.apache.eagle.app.example.ExampleApplicationProvider.xml
----------------------------------------------------------------------
diff --git a/eagle-examples/eagle-app-example/src/main/resources/META-INF/providers/org.apache.eagle.app.example.ExampleApplicationProvider.xml b/eagle-examples/eagle-app-example/src/main/resources/META-INF/providers/org.apache.eagle.app.example.ExampleApplicationProvider.xml
new file mode 100644
index 0000000..432b92f
--- /dev/null
+++ b/eagle-examples/eagle-app-example/src/main/resources/META-INF/providers/org.apache.eagle.app.example.ExampleApplicationProvider.xml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ 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.
+  -->
+
+<application>
+    <type>EXAMPLE_APPLICATION</type>
+    <name>Example Monitoring Application</name>
+    <version>0.5.0-incubating</version>
+    <appClass>org.apache.eagle.app.example.ExampleStormApplication</appClass>
+    <viewPath>/apps/example</viewPath>
+    <configuration>
+        <property>
+            <name>message</name>
+            <displayName>Message</displayName>
+            <value>Hello, example application!</value>
+            <description>Just an sample configuration property</description>
+        </property>
+    </configuration>
+    <streams>
+        <stream>
+            <streamId>SAMPLE_STREAM_1</streamId>
+            <description>Sample output stream #1</description>
+            <validate>true</validate>
+            <timeseries>true</timeseries>
+            <columns>
+                <column>
+                    <name>metric</name>
+                    <type>string</type>
+                </column>
+                <column>
+                    <name>source</name>
+                    <type>string</type>
+                </column>
+                <column>
+                    <name>value</name>
+                    <type>double</type>
+                    <defaultValue>0.0</defaultValue>
+                </column>
+            </columns>
+        </stream>
+        <stream>
+            <streamId>SAMPLE_STREAM_2</streamId>
+            <description>Sample output stream #2</description>
+            <validate>true</validate>
+            <timeseries>true</timeseries>
+            <columns>
+                <column>
+                    <name>metric</name>
+                    <type>string</type>
+                </column>
+                <column>
+                    <name>source</name>
+                    <type>string</type>
+                </column>
+                <column>
+                    <name>value</name>
+                    <type>double</type>
+                    <defaultValue>0.0</defaultValue>
+                </column>
+            </columns>
+        </stream>
+    </streams>
+    <docs>
+        <install>
+            # Step 1: Create source kafka topic named "${site}_example_source_topic"
+
+            ./bin/kafka-topics.sh --create --topic example_source_topic --replication-factor 1 --replication 1
+
+            # Step 2: Set up data collector to flow data into kafka topic in
+
+            ./bin/logstash -f log_collector.conf
+
+            ## `log_collector.conf` sample as following:
+
+            input {
+
+            }
+            filter {
+
+            }
+            output{
+
+            }
+
+            # Step 3: start application
+
+            # Step 4: monitor with featured portal or alert with policies
+        </install>
+        <uninstall>
+            # Step 1: stop and uninstall application
+            # Step 2: delete kafka topic named "${site}_example_source_topic"
+            # Step 3: stop logstash
+        </uninstall>
+    </docs>
+</application>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/08abde51/eagle-jpm/eagle-jpm-app/src/main/java/org/apache/eagle/app/jpm/JPMApplicationProvider.java
----------------------------------------------------------------------
diff --git a/eagle-jpm/eagle-jpm-app/src/main/java/org/apache/eagle/app/jpm/JPMApplicationProvider.java b/eagle-jpm/eagle-jpm-app/src/main/java/org/apache/eagle/app/jpm/JPMApplicationProvider.java
index 9694fd7..685a104 100644
--- a/eagle-jpm/eagle-jpm-app/src/main/java/org/apache/eagle/app/jpm/JPMApplicationProvider.java
+++ b/eagle-jpm/eagle-jpm-app/src/main/java/org/apache/eagle/app/jpm/JPMApplicationProvider.java
@@ -23,11 +23,6 @@ import org.apache.eagle.app.spi.AbstractApplicationProvider;
  */
 public class JPMApplicationProvider extends AbstractApplicationProvider<JPMApplication> {
     @Override
-    protected String getMetadata() {
-        return "/META-INF/apps/jpm/metadata.xml";
-    }
-
-    @Override
     public JPMApplication getApplication() {
         return new JPMApplication();
     }

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/08abde51/eagle-jpm/eagle-jpm-app/src/main/resources/META-INF/apps/jpm/metadata.xml
----------------------------------------------------------------------
diff --git a/eagle-jpm/eagle-jpm-app/src/main/resources/META-INF/apps/jpm/metadata.xml b/eagle-jpm/eagle-jpm-app/src/main/resources/META-INF/apps/jpm/metadata.xml
deleted file mode 100644
index a513efa..0000000
--- a/eagle-jpm/eagle-jpm-app/src/main/resources/META-INF/apps/jpm/metadata.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  ~ 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.
-  -->
-
-<application>
-    <type>JPM_APP</type>
-    <name>Job Performance Monitoring Application</name>
-    <version>0.5.0-incubating</version>
-    <appClass>org.apache.eagle.app.jpm.JPMApplication</appClass>
-    <viewPath>/apps/jpm</viewPath>
-    <configuration>
-        <property>
-            <name>default</name>
-            <displayName>Message</displayName>
-            <value>Hello, example application!</value>
-            <description>Just an sample configuration property</description>
-        </property>
-    </configuration>
-    <streams>
-        <stream>
-            <streamId>SAMPLE_STREAM_1</streamId>
-            <description>Sample output stream #1</description>
-            <validate>true</validate>
-            <timeseries>true</timeseries>
-            <columns>
-                <column>
-                    <name>metric</name>
-                    <type>string</type>
-                </column>
-                <column>
-                    <name>source</name>
-                    <type>string</type>
-                </column>
-                <column>
-                    <name>value</name>
-                    <type>double</type>
-                    <defaultValue>0.0</defaultValue>
-                </column>
-            </columns>
-        </stream>
-        <stream>
-            <streamId>SAMPLE_STREAM_2</streamId>
-            <description>Sample output stream #2</description>
-            <validate>true</validate>
-            <timeseries>true</timeseries>
-            <columns>
-                <column>
-                    <name>metric</name>
-                    <type>string</type>
-                </column>
-                <column>
-                    <name>source</name>
-                    <type>string</type>
-                </column>
-                <column>
-                    <name>value</name>
-                    <type>double</type>
-                    <defaultValue>0.0</defaultValue>
-                </column>
-            </columns>
-        </stream>
-    </streams>
-    <docs>
-        <install>
-# Step 1: Create source kafka topic named "${site}_example_source_topic"
-
-./bin/kafka-topics.sh --create --topic example_source_topic --replication-factor 1 --replication 1
-
-# Step 2: Set up data collector to flow data into kafka topic in
-
-./bin/logstash -f log_collector.conf
-
-## `log_collector.conf` sample as following:
-
-input {
-
-}
-filter {
-
-}
-output{
-
-}
-
-# Step 3: start application
-
-# Step 4: monitor with featured portal or alert with policies
-        </install>
-        <uninstall>
-# Step 1: stop and uninstall application
-# Step 2: delete kafka topic named "${site}_example_source_topic"
-# Step 3: stop logstash
-        </uninstall>
-    </docs>
-</application>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/08abde51/eagle-jpm/eagle-jpm-app/src/main/resources/META-INF/providers/org.apache.eagle.app.jpm.JPMApplicationProvider.xml
----------------------------------------------------------------------
diff --git a/eagle-jpm/eagle-jpm-app/src/main/resources/META-INF/providers/org.apache.eagle.app.jpm.JPMApplicationProvider.xml b/eagle-jpm/eagle-jpm-app/src/main/resources/META-INF/providers/org.apache.eagle.app.jpm.JPMApplicationProvider.xml
new file mode 100644
index 0000000..564615b
--- /dev/null
+++ b/eagle-jpm/eagle-jpm-app/src/main/resources/META-INF/providers/org.apache.eagle.app.jpm.JPMApplicationProvider.xml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ 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.
+  -->
+
+<application>
+    <type>JPM_APP</type>
+    <name>Job Performance Monitoring Application</name>
+    <version>0.5.0-incubating</version>
+    <appClass>org.apache.eagle.app.jpm.JPMApplication</appClass>
+    <viewPath>/apps/jpm</viewPath>
+    <configuration>
+        <property>
+            <name>default</name>
+            <displayName>Message</displayName>
+            <value>Hello, example application!</value>
+            <description>Just an sample configuration property</description>
+        </property>
+    </configuration>
+    <streams>
+        <stream>
+            <streamId>SAMPLE_STREAM_1</streamId>
+            <description>Sample output stream #1</description>
+            <validate>true</validate>
+            <timeseries>true</timeseries>
+            <columns>
+                <column>
+                    <name>metric</name>
+                    <type>string</type>
+                </column>
+                <column>
+                    <name>source</name>
+                    <type>string</type>
+                </column>
+                <column>
+                    <name>value</name>
+                    <type>double</type>
+                    <defaultValue>0.0</defaultValue>
+                </column>
+            </columns>
+        </stream>
+        <stream>
+            <streamId>SAMPLE_STREAM_2</streamId>
+            <description>Sample output stream #2</description>
+            <validate>true</validate>
+            <timeseries>true</timeseries>
+            <columns>
+                <column>
+                    <name>metric</name>
+                    <type>string</type>
+                </column>
+                <column>
+                    <name>source</name>
+                    <type>string</type>
+                </column>
+                <column>
+                    <name>value</name>
+                    <type>double</type>
+                    <defaultValue>0.0</defaultValue>
+                </column>
+            </columns>
+        </stream>
+    </streams>
+    <docs>
+        <install>
+            # Step 1: Create source kafka topic named "${site}_example_source_topic"
+
+            ./bin/kafka-topics.sh --create --topic example_source_topic --replication-factor 1 --replication 1
+
+            # Step 2: Set up data collector to flow data into kafka topic in
+
+            ./bin/logstash -f log_collector.conf
+
+            ## `log_collector.conf` sample as following:
+
+            input {
+
+            }
+            filter {
+
+            }
+            output{
+
+            }
+
+            # Step 3: start application
+
+            # Step 4: monitor with featured portal or alert with policies
+        </install>
+        <uninstall>
+            # Step 1: stop and uninstall application
+            # Step 2: delete kafka topic named "${site}_example_source_topic"
+            # Step 3: stop logstash
+        </uninstall>
+    </docs>
+</application>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/08abde51/eagle-security/eagle-security-hbase-auditlog/src/main/java/org/apache/eagle/security/hbase/HBaseAuditLogAppProvider.java
----------------------------------------------------------------------
diff --git a/eagle-security/eagle-security-hbase-auditlog/src/main/java/org/apache/eagle/security/hbase/HBaseAuditLogAppProvider.java b/eagle-security/eagle-security-hbase-auditlog/src/main/java/org/apache/eagle/security/hbase/HBaseAuditLogAppProvider.java
index f8f5c90..3da2c98 100644
--- a/eagle-security/eagle-security-hbase-auditlog/src/main/java/org/apache/eagle/security/hbase/HBaseAuditLogAppProvider.java
+++ b/eagle-security/eagle-security-hbase-auditlog/src/main/java/org/apache/eagle/security/hbase/HBaseAuditLogAppProvider.java
@@ -33,11 +33,6 @@ import org.apache.eagle.security.service.JDBCSecurityMetadataDAO;
  */
 public class HBaseAuditLogAppProvider extends AbstractApplicationProvider<HBaseAuditLogApplication> {
     @Override
-    protected String getMetadata() {
-        return "/META-INF/metadata.xml";
-    }
-
-    @Override
     public HBaseAuditLogApplication getApplication() {
         return new HBaseAuditLogApplication();
     }

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/08abde51/eagle-security/eagle-security-hbase-auditlog/src/main/resources/META-INF/metadata.xml
----------------------------------------------------------------------
diff --git a/eagle-security/eagle-security-hbase-auditlog/src/main/resources/META-INF/metadata.xml b/eagle-security/eagle-security-hbase-auditlog/src/main/resources/META-INF/metadata.xml
deleted file mode 100644
index 4c2d670..0000000
--- a/eagle-security/eagle-security-hbase-auditlog/src/main/resources/META-INF/metadata.xml
+++ /dev/null
@@ -1,261 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  ~ /*
-  ~  * 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
-  ~  * <p/>
-  ~  * http://www.apache.org/licenses/LICENSE-2.0
-  ~  * <p/>
-  ~  * 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.
-  ~  */
-  -->
-
-<application>
-    <type>HBaseAuditLogApplication</type>
-    <name>HBase Audit Log Monitoring Application</name>
-    <version>0.5.0-incubating</version>
-    <appClass>org.apache.eagle.security.hbase.HBaseAuditLogApplication</appClass>
-    <viewPath>/apps/example</viewPath>
-    <configuration>
-        <property>
-            <name>dataSourceConfig.topic</name>
-            <displayName>dataSourceConfig.topic</displayName>
-            <value>sandbox_hbase_audit_log</value>
-            <description>data source topic</description>
-        </property>
-        <property>
-            <name>dataSourceConfig.zkConnection</name>
-            <displayName>dataSourceConfig.zkConnection</displayName>
-            <value>server.eagle.apache.org</value>
-            <description>zk connection</description>
-        </property>
-        <property>
-            <name>dataSourceConfig.zkConnectionTimeoutMS</name>
-            <displayName>dataSourceConfig.zkConnectionTimeoutMS</displayName>
-            <value>15000</value>
-            <description>zk connection timeout in milliseconds</description>
-        </property>
-        <property>
-            <name>dataSourceConfig.fetchSize</name>
-            <displayName>dataSourceConfig.fetchSize</displayName>
-            <value>1048586</value>
-            <description>kafka fetch size</description>
-        </property>
-        <property>
-            <name>dataSourceConfig.transactionZKServers</name>
-            <displayName>dataSourceConfig.transactionZKServers</displayName>
-            <value>server.eagle.apache.org</value>
-            <description>zookeeper server for offset transaction</description>
-        </property>
-        <property>
-            <name>dataSourceConfig.transactionZKPort</name>
-            <displayName>dataSourceConfig.transactionZKPort</displayName>
-            <value>2181</value>
-            <description>zookeeper server port for offset transaction</description>
-        </property>
-        <property>
-            <name>dataSourceConfig.transactionZKRoot</name>
-            <displayName>dataSourceConfig.transactionZKRoot</displayName>
-            <value>/consumers</value>
-            <description>offset transaction root</description>
-        </property>
-        <property>
-            <name>dataSourceConfig.consumerGroupId</name>
-            <displayName>dataSourceConfig.consumerGroupId</displayName>
-            <value>eagle.hbaseaudit.consumer</value>
-            <description>kafka consumer group Id</description>
-        </property>
-        <property>
-            <name>dataSourceConfig.transactionStateUpdateMS</name>
-            <displayName>dataSourceConfig.transactionStateUpdateMS</displayName>
-            <value>2000</value>
-            <description>zk upate</description>
-        </property>
-        <property>
-            <name>dataSourceConfig.schemeCls</name>
-            <displayName>dataSourceConfig.schemeCls</displayName>
-            <value>storm.kafka.StringScheme</value>
-            <description>scheme class</description>
-        </property>
-        <property>
-            <name>dataSourceConfig.transactionZKPort</name>
-            <displayName>dataSourceConfig.transactionZKPort</displayName>
-            <value>2181</value>
-            <description>zookeeper server port for offset transaction</description>
-        </property>
-        <property>
-            <name>dataSourceConfig.transactionZKPort</name>
-            <displayName>dataSourceConfig.transactionZKPort</displayName>
-            <value>2181</value>
-            <description>zookeeper server port for offset transaction</description>
-        </property>
-        <property>
-            <name>topology.numOfSpoutTasks</name>
-            <displayName>topology.numOfSpoutTasks</displayName>
-            <value>2</value>
-            <description>number of spout tasks</description>
-        </property>
-        <property>
-            <name>topology.numOfParserTasks</name>
-            <displayName>topology.numOfParserTasks</displayName>
-            <value>2</value>
-            <description>number of parser tasks</description>
-        </property>
-        <property>
-            <name>topology.numOfJoinTasks</name>
-            <displayName>topology.numOfJoinTasks</displayName>
-            <value>2</value>
-            <description>number of external join tasks</description>
-        </property>
-        <property>
-            <name>topology.numOfSinkTasks</name>
-            <displayName>topology.numOfSinkTasks</displayName>
-            <value>2</value>
-            <description>number of sink tasks</description>
-        </property>
-        <property>
-            <name>eagleProps.dataJoinPollIntervalSec</name>
-            <displayName>eagleProps.dataJoinPollIntervalSec</displayName>
-            <value>30</value>
-            <description>interval in seconds for polling</description>
-        </property>
-        <property>
-            <name>eagleProps.eagleService.host</name>
-            <displayName>eagleProps.eagleService.host</displayName>
-            <value>localhost</value>
-            <description>eagle service host</description>
-        </property>
-        <property>
-            <name>eagleProps.eagleService.port</name>
-            <displayName>eagleProps.eagleService.port</displayName>
-            <value>8080</value>
-            <description>eagle service port</description>
-        </property>
-        <property>
-            <name>eagleProps.eagleService.username</name>
-            <displayName>eagleProps.eagleService.username</displayName>
-            <value>admin</value>
-            <description>eagle service username</description>
-        </property>
-        <property>
-            <name>eagleProps.eagleService.password</name>
-            <displayName>eagleProps.eagleService.password</displayName>
-            <value>secret</value>
-            <description>eagle service password</description>
-        </property>
-        <property>
-            <name>dataSinkConfig.topic</name>
-            <displayName>dataSinkConfig.topic</displayName>
-            <value>sandbox_hbase_audit_log_parsed</value>
-            <description>topic for kafka data sink</description>
-        </property>
-        <property>
-            <name>dataSinkConfig.brokerList</name>
-            <displayName>dataSinkConfig.brokerList</displayName>
-            <value>sandbox.hortonworks.com:6667</value>
-            <description>kafka broker list</description>
-        </property>
-        <property>
-            <name>dataSinkConfig.serializerClass</name>
-            <displayName>dataSinkConfig.serializerClass</displayName>
-            <value>kafka.serializer.StringEncoder</value>
-            <description>serializer class Kafka message value</description>
-        </property>
-        <property>
-            <name>dataSinkConfig.keySerializerClass</name>
-            <displayName>dataSinkConfig.keySerializerClass</displayName>
-            <value>kafka.serializer.StringEncoder</value>
-            <description>serializer class Kafka message key</description>
-        </property>
-        <property>
-            <name>metadata.store</name>
-            <displayName>metadata.store</displayName>
-            <value>org.apache.eagle.security.service.InMemMetadataDaoImpl</value>
-            <description>implementation class for metadata store</description>
-        </property>
-        <property>
-            <name>hbase.zookeeper.quorum</name>
-            <displayName>hbase.zookeeper.quorum</displayName>
-            <value>server.eagle.apache.org</value>
-            <description>hbase zookeeper endpoint host</description>
-        </property>
-        <property>
-            <name>hbase.zookeeper.property.clientPort</name>
-            <displayName>hbase.zookeeper.property.clientPort</displayName>
-            <value>2181</value>
-            <description>hbase zookeeper endpoint port</description>
-        </property>
-        <property>
-            <name>zookeeper.znode.parent</name>
-            <displayName>zookeeper.znode.parent</displayName>
-            <value>/hbase-unsecure</value>
-            <description>zookeeper znode parent for hbase</description>
-        </property>
-    </configuration>
-    <streams>
-        <stream>
-            <streamId>hbase_audit_log_stream</streamId>
-            <description>HBase Audit Log Stream</description>
-            <validate>true</validate>
-            <timeseries>true</timeseries>
-            <columns>
-                <column>
-                    <name>action</name>
-                    <type>string</type>
-                </column>
-                <column>
-                    <name>host</name>
-                    <type>string</type>
-                </column>
-                <column>
-                    <name>status</name>
-                    <type>string</type>
-                </column>
-                <column>
-                    <name>timestamp</name>
-                    <type>long</type>
-                </column>
-            </columns>
-        </stream>
-    </streams>
-    <docs>
-        <install>
-# Step 1: Create source kafka topic named "${site}_example_source_topic"
-
-./bin/kafka-topics.sh --create --topic example_source_topic --replication-factor 1 --replication 1
-
-# Step 2: Set up data collector to flow data into kafka topic in
-
-./bin/logstash -f log_collector.conf
-
-## `log_collector.conf` sample as following:
-
-input {
-
-}
-filter {
-
-}
-output{
-
-}
-
-# Step 3: start application
-
-# Step 4: monitor with featured portal or alert with policies
-        </install>
-        <uninstall>
-# Step 1: stop and uninstall application
-# Step 2: delete kafka topic named "${site}_example_source_topic"
-# Step 3: stop logstash
-        </uninstall>
-    </docs>
-</application>

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/08abde51/eagle-security/eagle-security-hbase-auditlog/src/main/resources/META-INF/providers/org.apache.eagle.security.hbase.HBaseAuditLogAppProvider.xml
----------------------------------------------------------------------
diff --git a/eagle-security/eagle-security-hbase-auditlog/src/main/resources/META-INF/providers/org.apache.eagle.security.hbase.HBaseAuditLogAppProvider.xml b/eagle-security/eagle-security-hbase-auditlog/src/main/resources/META-INF/providers/org.apache.eagle.security.hbase.HBaseAuditLogAppProvider.xml
new file mode 100644
index 0000000..04c3925
--- /dev/null
+++ b/eagle-security/eagle-security-hbase-auditlog/src/main/resources/META-INF/providers/org.apache.eagle.security.hbase.HBaseAuditLogAppProvider.xml
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ /*
+  ~  * 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
+  ~  * <p/>
+  ~  * http://www.apache.org/licenses/LICENSE-2.0
+  ~  * <p/>
+  ~  * 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.
+  ~  */
+  -->
+
+<application>
+    <type>HBaseAuditLogApplication</type>
+    <name>HBase Audit Log Monitoring Application</name>
+    <version>0.5.0-incubating</version>
+    <appClass>org.apache.eagle.security.hbase.HBaseAuditLogApplication</appClass>
+    <viewPath>/apps/example</viewPath>
+    <configuration>
+        <property>
+            <name>dataSourceConfig.topic</name>
+            <displayName>dataSourceConfig.topic</displayName>
+            <value>sandbox_hbase_audit_log</value>
+            <description>data source topic</description>
+        </property>
+        <property>
+            <name>dataSourceConfig.zkConnection</name>
+            <displayName>dataSourceConfig.zkConnection</displayName>
+            <value>server.eagle.apache.org</value>
+            <description>zk connection</description>
+        </property>
+        <property>
+            <name>dataSourceConfig.zkConnectionTimeoutMS</name>
+            <displayName>dataSourceConfig.zkConnectionTimeoutMS</displayName>
+            <value>15000</value>
+            <description>zk connection timeout in milliseconds</description>
+        </property>
+        <property>
+            <name>dataSourceConfig.fetchSize</name>
+            <displayName>dataSourceConfig.fetchSize</displayName>
+            <value>1048586</value>
+            <description>kafka fetch size</description>
+        </property>
+        <property>
+            <name>dataSourceConfig.transactionZKServers</name>
+            <displayName>dataSourceConfig.transactionZKServers</displayName>
+            <value>server.eagle.apache.org</value>
+            <description>zookeeper server for offset transaction</description>
+        </property>
+        <property>
+            <name>dataSourceConfig.transactionZKPort</name>
+            <displayName>dataSourceConfig.transactionZKPort</displayName>
+            <value>2181</value>
+            <description>zookeeper server port for offset transaction</description>
+        </property>
+        <property>
+            <name>dataSourceConfig.transactionZKRoot</name>
+            <displayName>dataSourceConfig.transactionZKRoot</displayName>
+            <value>/consumers</value>
+            <description>offset transaction root</description>
+        </property>
+        <property>
+            <name>dataSourceConfig.consumerGroupId</name>
+            <displayName>dataSourceConfig.consumerGroupId</displayName>
+            <value>eagle.hbaseaudit.consumer</value>
+            <description>kafka consumer group Id</description>
+        </property>
+        <property>
+            <name>dataSourceConfig.transactionStateUpdateMS</name>
+            <displayName>dataSourceConfig.transactionStateUpdateMS</displayName>
+            <value>2000</value>
+            <description>zk upate</description>
+        </property>
+        <property>
+            <name>dataSourceConfig.schemeCls</name>
+            <displayName>dataSourceConfig.schemeCls</displayName>
+            <value>storm.kafka.StringScheme</value>
+            <description>scheme class</description>
+        </property>
+        <property>
+            <name>dataSourceConfig.transactionZKPort</name>
+            <displayName>dataSourceConfig.transactionZKPort</displayName>
+            <value>2181</value>
+            <description>zookeeper server port for offset transaction</description>
+        </property>
+        <property>
+            <name>dataSourceConfig.transactionZKPort</name>
+            <displayName>dataSourceConfig.transactionZKPort</displayName>
+            <value>2181</value>
+            <description>zookeeper server port for offset transaction</description>
+        </property>
+        <property>
+            <name>topology.numOfSpoutTasks</name>
+            <displayName>topology.numOfSpoutTasks</displayName>
+            <value>2</value>
+            <description>number of spout tasks</description>
+        </property>
+        <property>
+            <name>topology.numOfParserTasks</name>
+            <displayName>topology.numOfParserTasks</displayName>
+            <value>2</value>
+            <description>number of parser tasks</description>
+        </property>
+        <property>
+            <name>topology.numOfJoinTasks</name>
+            <displayName>topology.numOfJoinTasks</displayName>
+            <value>2</value>
+            <description>number of external join tasks</description>
+        </property>
+        <property>
+            <name>topology.numOfSinkTasks</name>
+            <displayName>topology.numOfSinkTasks</displayName>
+            <value>2</value>
+            <description>number of sink tasks</description>
+        </property>
+        <property>
+            <name>eagleProps.dataJoinPollIntervalSec</name>
+            <displayName>eagleProps.dataJoinPollIntervalSec</displayName>
+            <value>30</value>
+            <description>interval in seconds for polling</description>
+        </property>
+        <property>
+            <name>eagleProps.eagleService.host</name>
+            <displayName>eagleProps.eagleService.host</displayName>
+            <value>localhost</value>
+            <description>eagle service host</description>
+        </property>
+        <property>
+            <name>eagleProps.eagleService.port</name>
+            <displayName>eagleProps.eagleService.port</displayName>
+            <value>8080</value>
+            <description>eagle service port</description>
+        </property>
+        <property>
+            <name>eagleProps.eagleService.username</name>
+            <displayName>eagleProps.eagleService.username</displayName>
+            <value>admin</value>
+            <description>eagle service username</description>
+        </property>
+        <property>
+            <name>eagleProps.eagleService.password</name>
+            <displayName>eagleProps.eagleService.password</displayName>
+            <value>secret</value>
+            <description>eagle service password</description>
+        </property>
+        <property>
+            <name>dataSinkConfig.topic</name>
+            <displayName>dataSinkConfig.topic</displayName>
+            <value>sandbox_hbase_audit_log_parsed</value>
+            <description>topic for kafka data sink</description>
+        </property>
+        <property>
+            <name>dataSinkConfig.brokerList</name>
+            <displayName>dataSinkConfig.brokerList</displayName>
+            <value>sandbox.hortonworks.com:6667</value>
+            <description>kafka broker list</description>
+        </property>
+        <property>
+            <name>dataSinkConfig.serializerClass</name>
+            <displayName>dataSinkConfig.serializerClass</displayName>
+            <value>kafka.serializer.StringEncoder</value>
+            <description>serializer class Kafka message value</description>
+        </property>
+        <property>
+            <name>dataSinkConfig.keySerializerClass</name>
+            <displayName>dataSinkConfig.keySerializerClass</displayName>
+            <value>kafka.serializer.StringEncoder</value>
+            <description>serializer class Kafka message key</description>
+        </property>
+        <property>
+            <name>metadata.store</name>
+            <displayName>metadata.store</displayName>
+            <value>org.apache.eagle.security.service.InMemMetadataDaoImpl</value>
+            <description>implementation class for metadata store</description>
+        </property>
+        <property>
+            <name>hbase.zookeeper.quorum</name>
+            <displayName>hbase.zookeeper.quorum</displayName>
+            <value>server.eagle.apache.org</value>
+            <description>hbase zookeeper endpoint host</description>
+        </property>
+        <property>
+            <name>hbase.zookeeper.property.clientPort</name>
+            <displayName>hbase.zookeeper.property.clientPort</displayName>
+            <value>2181</value>
+            <description>hbase zookeeper endpoint port</description>
+        </property>
+        <property>
+            <name>zookeeper.znode.parent</name>
+            <displayName>zookeeper.znode.parent</displayName>
+            <value>/hbase-unsecure</value>
+            <description>zookeeper znode parent for hbase</description>
+        </property>
+    </configuration>
+    <streams>
+        <stream>
+            <streamId>hbase_audit_log_stream</streamId>
+            <description>HBase Audit Log Stream</description>
+            <validate>true</validate>
+            <timeseries>true</timeseries>
+            <columns>
+                <column>
+                    <name>action</name>
+                    <type>string</type>
+                </column>
+                <column>
+                    <name>host</name>
+                    <type>string</type>
+                </column>
+                <column>
+                    <name>status</name>
+                    <type>string</type>
+                </column>
+                <column>
+                    <name>timestamp</name>
+                    <type>long</type>
+                </column>
+            </columns>
+        </stream>
+    </streams>
+    <docs>
+        <install>
+            # Step 1: Create source kafka topic named "${site}_example_source_topic"
+
+            ./bin/kafka-topics.sh --create --topic example_source_topic --replication-factor 1 --replication 1
+
+            # Step 2: Set up data collector to flow data into kafka topic in
+
+            ./bin/logstash -f log_collector.conf
+
+            ## `log_collector.conf` sample as following:
+
+            input {
+
+            }
+            filter {
+
+            }
+            output{
+
+            }
+
+            # Step 3: start application
+
+            # Step 4: monitor with featured portal or alert with policies
+        </install>
+        <uninstall>
+            # Step 1: stop and uninstall application
+            # Step 2: delete kafka topic named "${site}_example_source_topic"
+            # Step 3: stop logstash
+        </uninstall>
+    </docs>
+</application>