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/08 09:15:15 UTC

incubator-eagle git commit: Load app web classes and app topology classes using configured lib dir

Repository: incubator-eagle
Updated Branches:
  refs/heads/develop 660bfbd3f -> 5c0db6aff


Load app web classes and app topology classes using configured lib dir

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

Author: yonzhang <yo...@gmail.com>

Closes #310 from yonzhang/develop.


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

Branch: refs/heads/develop
Commit: 5c0db6aff007defee467878a820845edcb70f9d9
Parents: 660bfbd
Author: yonzhang <yo...@gmail.com>
Authored: Mon Aug 8 17:14:56 2016 +0800
Committer: Hao Chen <ha...@apache.org>
Committed: Mon Aug 8 17:14:56 2016 +0800

----------------------------------------------------------------------
 .../config/ApplicationProviderDescConfig.java   |  6 ++-
 .../impl/ApplicationProviderServiceImpl.java    | 12 +++---
 .../app/spi/AbstractApplicationProvider.java    |  5 ++-
 .../app/ApplicationProviderDescConfigTest.java  |  4 +-
 ...org.apache.eagle.app.spi.ApplicationProvider |  2 +-
 eagle-server/pom.xml                            | 41 ++++++++++----------
 .../apache/eagle/server/ServerApplication.java  | 21 +++++++++-
 .../src/main/resources/application.conf         |  3 ++
 8 files changed, 59 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/5c0db6af/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/config/ApplicationProviderDescConfig.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/config/ApplicationProviderDescConfig.java b/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/config/ApplicationProviderDescConfig.java
index 1fbae16..824d81a 100644
--- a/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/config/ApplicationProviderDescConfig.java
+++ b/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/config/ApplicationProviderDescConfig.java
@@ -18,6 +18,7 @@ package org.apache.eagle.app.config;
 
 
 import org.apache.eagle.alert.engine.coordinator.StreamDefinition;
+import org.apache.eagle.app.spi.AbstractApplicationProvider;
 import org.apache.eagle.metadata.model.ApplicationDocs;
 import org.apache.eagle.metadata.model.Configuration;
 import org.slf4j.Logger;
@@ -110,11 +111,12 @@ public class ApplicationProviderDescConfig {
 
     private final static Logger LOG = LoggerFactory.getLogger(ApplicationProviderDescConfig.class);
 
-    public static ApplicationProviderDescConfig loadFromXML(String configXmlFile){
+    public static ApplicationProviderDescConfig loadFromXML(AbstractApplicationProvider provider, String configXmlFile){
         try {
             JAXBContext jc = JAXBContext.newInstance(ApplicationProviderDescConfig.class);
             Unmarshaller unmarshaller = jc.createUnmarshaller();
-            InputStream is = ApplicationProviderDescConfig.class.getResourceAsStream(configXmlFile);
+//            InputStream is = ApplicationProviderDescConfig.class.getResourceAsStream(configXmlFile);
+            InputStream is = provider.getClass().getResourceAsStream(configXmlFile);
             if(is == null){
                 is = ApplicationProviderDescConfig.class.getResourceAsStream("/"+configXmlFile);
             }

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/5c0db6af/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/service/impl/ApplicationProviderServiceImpl.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/service/impl/ApplicationProviderServiceImpl.java b/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/service/impl/ApplicationProviderServiceImpl.java
index 2297ea5..ec2ad6c 100644
--- a/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/service/impl/ApplicationProviderServiceImpl.java
+++ b/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/service/impl/ApplicationProviderServiceImpl.java
@@ -44,13 +44,13 @@ public class ApplicationProviderServiceImpl implements ApplicationProviderServic
 
     @Inject
     public ApplicationProviderServiceImpl(Config config){
-        LOG.info("Initializing {}",this.getClass().getCanonicalName());
+        LOG.warn("Initializing {}",this.getClass().getCanonicalName());
         this.config = config;
         String appProviderLoaderClass = this.config.hasPath(APP_PROVIDER_LOADER_CLASS_KEY)?
                 this.config.getString(APP_PROVIDER_LOADER_CLASS_KEY):ApplicationProviderLoader.getDefaultAppProviderLoader();
-        LOG.info("Initializing {} = {}",APP_PROVIDER_LOADER_CLASS_KEY,appProviderLoaderClass);
+        LOG.warn("Initializing {} = {}",APP_PROVIDER_LOADER_CLASS_KEY,appProviderLoaderClass);
         appProviderLoader = initializeAppProviderLoader(appProviderLoaderClass);
-        LOG.info("Initialized {}",appProviderLoader);
+        LOG.warn("Initialized {}",appProviderLoader);
         reload();
     }
 
@@ -65,9 +65,9 @@ public class ApplicationProviderServiceImpl implements ApplicationProviderServic
 
     public synchronized void reload(){
         appProviderLoader.reset();
-        LOG.info("Loading application providers ...");
+        LOG.warn("Loading application providers ...");
         appProviderLoader.load();
-        LOG.info("Loaded {} application providers",appProviderLoader.getProviders().size());
+        LOG.warn("Loaded {} application providers",appProviderLoader.getProviders().size());
     }
 
     public Collection<ApplicationProvider> getProviders(){
@@ -86,4 +86,4 @@ public class ApplicationProviderServiceImpl implements ApplicationProviderServic
     public ApplicationDesc getApplicationDescByType(String appType) {
         return appProviderLoader.getApplicationProviderByType(appType).getApplicationDesc();
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/5c0db6af/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 bf1e587..2299eca 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
@@ -48,14 +48,15 @@ public abstract class AbstractApplicationProvider<T extends Application> impleme
 
     protected AbstractApplicationProvider(String applicationDescConfig) {
         this();
-        ApplicationProviderDescConfig descWrapperConfig = ApplicationProviderDescConfig.loadFromXML(applicationDescConfig);
+        ApplicationProviderDescConfig descWrapperConfig = ApplicationProviderDescConfig.loadFromXML(this, applicationDescConfig);
         setType(descWrapperConfig.getType());
         setVersion(descWrapperConfig.getVersion());
         setName(descWrapperConfig.getName());
         setDocs(descWrapperConfig.getDocs());
         try {
             if (descWrapperConfig.getAppClass() != null) {
-                setAppClass((Class<T>) Class.forName(descWrapperConfig.getAppClass()));
+//                setAppClass((Class<T>) Class.forName(descWrapperConfig.getAppClass()));
+                setAppClass((Class<T>) Class.forName(descWrapperConfig.getAppClass(), true, this.getClass().getClassLoader()));
                 if (!Application.class.isAssignableFrom(applicationDesc.getAppClass())) {
                     throw new IllegalStateException(descWrapperConfig.getAppClass() + " is not sub-class of " + Application.class.getCanonicalName());
                 }

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/5c0db6af/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/ApplicationProviderDescConfigTest.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/ApplicationProviderDescConfigTest.java b/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/ApplicationProviderDescConfigTest.java
index 5a6980c..cd28d86 100644
--- a/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/ApplicationProviderDescConfigTest.java
+++ b/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/ApplicationProviderDescConfigTest.java
@@ -27,7 +27,7 @@ import java.io.InputStream;
 public class ApplicationProviderDescConfigTest {
     @Test
     public void testApplicationDescWrapperConfigLoadFromXML(){
-        ApplicationProviderDescConfig config = ApplicationProviderDescConfig.loadFromXML("TestApplicationMetadata.xml");
+        ApplicationProviderDescConfig config = ApplicationProviderDescConfig.loadFromXML(null, "TestApplicationMetadata.xml");
         Assert.assertNotNull(config);
     }
 
@@ -50,4 +50,4 @@ public class ApplicationProviderDescConfigTest {
             throw new RuntimeException("Failed to load application descriptor configuration: "+configXmlFile,ex);
         }
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/5c0db6af/eagle-examples/eagle-app-example/src/main/resources/META-INF/services/org.apache.eagle.app.spi.ApplicationProvider
----------------------------------------------------------------------
diff --git a/eagle-examples/eagle-app-example/src/main/resources/META-INF/services/org.apache.eagle.app.spi.ApplicationProvider b/eagle-examples/eagle-app-example/src/main/resources/META-INF/services/org.apache.eagle.app.spi.ApplicationProvider
index 808e4ab..f42e30f 100644
--- a/eagle-examples/eagle-app-example/src/main/resources/META-INF/services/org.apache.eagle.app.spi.ApplicationProvider
+++ b/eagle-examples/eagle-app-example/src/main/resources/META-INF/services/org.apache.eagle.app.spi.ApplicationProvider
@@ -14,4 +14,4 @@
 # limitations under the License.
 
 org.apache.eagle.app.example.ExampleApplicationProvider
-org.apache.eagle.app.example.ExampleApplicationProvider2
\ No newline at end of file
+##org.apache.eagle.app.example.ExampleApplicationProvider2

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/5c0db6af/eagle-server/pom.xml
----------------------------------------------------------------------
diff --git a/eagle-server/pom.xml b/eagle-server/pom.xml
index 6083616..e8264a2 100644
--- a/eagle-server/pom.xml
+++ b/eagle-server/pom.xml
@@ -127,27 +127,26 @@
             <artifactId>eagle-common</artifactId>
             <version>${project.version}</version>
         </dependency>
-
-        <dependency>
-            <groupId>org.apache.eagle</groupId>
-            <artifactId>eagle-app-example</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.eagle</groupId>
-            <artifactId>eagle-jpm-app</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.eagle</groupId>
-            <artifactId>eagle-security-hbase-auditlog</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.eagle</groupId>
-            <artifactId>eagle-security-hbase-web</artifactId>
-            <version>${project.version}</version>
-        </dependency>
+        <!--<dependency>-->
+            <!--<groupId>org.apache.eagle</groupId>-->
+            <!--<artifactId>eagle-app-example</artifactId>-->
+            <!--<version>${project.version}</version>-->
+        <!--</dependency>-->
+        <!--<dependency>-->
+            <!--<groupId>org.apache.eagle</groupId>-->
+            <!--<artifactId>eagle-jpm-app</artifactId>-->
+            <!--<version>${project.version}</version>-->
+        <!--</dependency>-->
+        <!--<dependency>-->
+            <!--<groupId>org.apache.eagle</groupId>-->
+            <!--<artifactId>eagle-security-hbase-auditlog</artifactId>-->
+            <!--<version>${project.version}</version>-->
+        <!--</dependency>-->
+        <!--<dependency>-->
+            <!--<groupId>org.apache.eagle</groupId>-->
+            <!--<artifactId>eagle-security-hbase-web</artifactId>-->
+            <!--<version>${project.version}</version>-->
+        <!--</dependency>-->
     </dependencies>
     <build>
         <resources>

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/5c0db6af/eagle-server/src/main/java/org/apache/eagle/server/ServerApplication.java
----------------------------------------------------------------------
diff --git a/eagle-server/src/main/java/org/apache/eagle/server/ServerApplication.java b/eagle-server/src/main/java/org/apache/eagle/server/ServerApplication.java
index d7bd14a..43f5c10 100644
--- a/eagle-server/src/main/java/org/apache/eagle/server/ServerApplication.java
+++ b/eagle-server/src/main/java/org/apache/eagle/server/ServerApplication.java
@@ -16,8 +16,10 @@
  */
 package org.apache.eagle.server;
 
+import com.google.inject.Binding;
 import com.hubspot.dropwizard.guice.GuiceBundle;
 import com.sun.jersey.api.core.PackagesResourceConfig;
+import com.typesafe.config.Config;
 import io.dropwizard.Application;
 import io.dropwizard.assets.AssetsBundle;
 import io.dropwizard.setup.Bootstrap;
@@ -28,9 +30,14 @@ import org.apache.eagle.alert.coordinator.CoordinatorListener;
 import org.apache.eagle.alert.resource.SimpleCORSFiler;
 import org.apache.eagle.app.ApplicationGuiceModule;
 import org.apache.eagle.common.module.CommonGuiceModule;
+import org.apache.eagle.common.module.ConfigServiceProvider;
 import org.apache.eagle.metadata.persistence.MetadataStore;
 
 import javax.servlet.DispatcherType;
+import java.io.File;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.Arrays;
 import java.util.EnumSet;
 
 class ServerApplication extends Application<ServerConfig> {
@@ -59,6 +66,18 @@ class ServerApplication extends Application<ServerConfig> {
         environment.jersey().register(RESTExceptionMapper.class);
         environment.jersey().setUrlPattern(ServerConfig.getApiBasePath());
 
+        Binding<Config> b = guiceBundle.getInjector().getBinding(Config.class);
+        Config conf = b.getProvider().get();
+        if(conf.hasPath("application.provider.dir")) {
+            File loc = new File(conf.getString("application.provider.dir"));
+            File[] jarFiles = loc.listFiles(file -> file.getPath().toLowerCase().endsWith(".jar"));
+            URL[] urls = new URL[jarFiles.length];
+            for (int i = 0; i < jarFiles.length; i++) {
+                urls[i] = jarFiles[i].toURI().toURL();
+            }
+            URLClassLoader jarFileClassLoader = new URLClassLoader(urls);
+            Thread.currentThread().setContextClassLoader(jarFileClassLoader);
+        }
         // Automatically scan all REST resources
         new PackagesResourceConfig(ServerConfig.getResourcePackage()).getClasses().forEach(environment.jersey()::register);
 
@@ -81,4 +100,4 @@ class ServerApplication extends Application<ServerConfig> {
         // context listener
         environment.servlets().addServletListeners(new CoordinatorListener());
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/5c0db6af/eagle-server/src/main/resources/application.conf
----------------------------------------------------------------------
diff --git a/eagle-server/src/main/resources/application.conf b/eagle-server/src/main/resources/application.conf
index ce75909..9860245 100644
--- a/eagle-server/src/main/resources/application.conf
+++ b/eagle-server/src/main/resources/application.conf
@@ -49,6 +49,9 @@
 		"storm": {
 			"nimbusHost": "localhost"
 			"nimbusThriftPort": 6627
+		},
+		"provider" : {
+//			"dir" : "/tmp/eagle"
 		}
 	}
 }