You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/01/19 18:55:06 UTC

svn commit: r1233502 - in /openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver: Resolver.java http/ http/Helper.java

Author: rmannibucau
Date: Thu Jan 19 17:55:05 2012
New Revision: 1233502

URL: http://svn.apache.org/viewvc?rev=1233502&view=rev
Log:
managing http urls in openejb-provisionning

Added:
    openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/http/
    openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/http/Helper.java
Modified:
    openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java

Modified: openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java?rev=1233502&r1=1233501&r2=1233502&view=diff
==============================================================================
--- openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java (original)
+++ openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java Thu Jan 19 17:55:05 2012
@@ -19,20 +19,23 @@ package org.apache.openejb.resolver;
 import org.apache.openejb.assembler.LocationResolver;
 import org.apache.openejb.loader.FileUtils;
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.resolver.http.Helper;
 import org.apache.openejb.resolver.maven.Handler;
 import org.apache.openejb.resolver.maven.Parser;
 
 import java.io.File;
 import java.io.FileOutputStream;
+import java.net.URI;
 import java.net.URL;
 
 public class Resolver implements LocationResolver {
     public static final String MVN_PREFIX = "mvn:";
     public static final String OPENEJB_DEPLOYER_CACHE_FOLDER = "openejb.deployer.cache.folder";
+    public static final String HTTP_PREFIX = "http";
 
     public String resolve(final String rawLocation) throws Exception {
+        final String cache = System.getProperty(OPENEJB_DEPLOYER_CACHE_FOLDER, "temp");
         if (rawLocation.startsWith(MVN_PREFIX) && rawLocation.length() > MVN_PREFIX.length()) {
-            final String cache = System.getProperty(OPENEJB_DEPLOYER_CACHE_FOLDER, "temp");
 
             final String info = rawLocation.substring(MVN_PREFIX.length());
             final Parser parser = new Parser(info);
@@ -53,7 +56,28 @@ public class Resolver implements Locatio
                 }
             }
             return file.getPath();
+        } else if (rawLocation.startsWith(HTTP_PREFIX)) {
+            final File file = new File(SystemInstance.get().getBase().getDirectory(),
+                    cache + File.separator + lastPart(rawLocation));
+            final URI uri = new URI(rawLocation);
+            Helper.copyTryingProxies(uri, file);
+            return file.getAbsolutePath();
         }
         return rawLocation;
     }
+
+    /**
+     * location looks like xxxx/X/x/X/Y.
+     * we suppose location doesn't end with a /
+     *
+     * @param location input
+     * @return Y
+     */
+    private String lastPart(final String location) {
+        final int idx = location.lastIndexOf('/');
+        if (idx <= 0) {
+            return location;
+        }
+        return location.substring(idx + 1, location.length());
+    }
 }

Added: openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/http/Helper.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/http/Helper.java?rev=1233502&view=auto
==============================================================================
--- openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/http/Helper.java (added)
+++ openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/http/Helper.java Thu Jan 19 17:55:05 2012
@@ -0,0 +1,43 @@
+package org.apache.openejb.resolver.http;
+
+import org.apache.openejb.loader.FileUtils;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.Proxy;
+import java.net.ProxySelector;
+import java.net.URI;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.List;
+
+public class Helper {
+    private static final int CONNECT_TIMEOUT = 10000;
+
+    private Helper() {
+        // no-op
+    }
+
+    public static void copyTryingProxies(final URI source, final File destination) throws Exception {
+        final List<Proxy> proxies = ProxySelector.getDefault().select(source);
+        final URL url = source.toURL();
+        for (Proxy proxy : ProxySelector.getDefault().select(source)) {
+            InputStream is;
+
+            // try to connect
+            try {
+                URLConnection urlConnection = url.openConnection(proxy);
+                urlConnection.setConnectTimeout(CONNECT_TIMEOUT);
+                is = urlConnection.getInputStream();
+            } catch (IOException e) {
+                continue;
+            }
+
+            // parse
+            FileUtils.copy(new FileOutputStream(destination), is);
+            break;
+        }
+    }
+}