You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by rw...@apache.org on 2011/08/04 08:29:35 UTC

svn commit: r1153761 - in /geronimo/server/trunk/plugins/system-database/sysdb-portlets/src/main/java/org/apache/geronimo/console/databasemanager/wizard: DatabasePoolPortlet.java DriverDownloader.java

Author: rwonly
Date: Thu Aug  4 06:29:34 2011
New Revision: 1153761

URL: http://svn.apache.org/viewvc?rev=1153761&view=rev
Log:
GERONIMO-6102 Convert downloaded jdbc driver to OSGi bundle

Modified:
    geronimo/server/trunk/plugins/system-database/sysdb-portlets/src/main/java/org/apache/geronimo/console/databasemanager/wizard/DatabasePoolPortlet.java
    geronimo/server/trunk/plugins/system-database/sysdb-portlets/src/main/java/org/apache/geronimo/console/databasemanager/wizard/DriverDownloader.java

Modified: geronimo/server/trunk/plugins/system-database/sysdb-portlets/src/main/java/org/apache/geronimo/console/databasemanager/wizard/DatabasePoolPortlet.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/system-database/sysdb-portlets/src/main/java/org/apache/geronimo/console/databasemanager/wizard/DatabasePoolPortlet.java?rev=1153761&r1=1153760&r2=1153761&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/system-database/sysdb-portlets/src/main/java/org/apache/geronimo/console/databasemanager/wizard/DatabasePoolPortlet.java (original)
+++ geronimo/server/trunk/plugins/system-database/sysdb-portlets/src/main/java/org/apache/geronimo/console/databasemanager/wizard/DatabasePoolPortlet.java Thu Aug  4 06:29:34 2011
@@ -96,6 +96,9 @@ import org.apache.geronimo.deployment.se
 import org.apache.geronimo.deployment.tools.loader.ConnectorDeployable;
 import org.apache.geronimo.gbean.AbstractName;
 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
+import org.apache.geronimo.kernel.GBeanNotFoundException;
+import org.apache.geronimo.kernel.InternalKernelException;
+import org.apache.geronimo.kernel.KernelRegistry;
 import org.apache.geronimo.kernel.config.ConfigurationManager;
 import org.apache.geronimo.kernel.config.ConfigurationUtil;
 import org.apache.geronimo.kernel.management.State;
@@ -107,6 +110,7 @@ import org.apache.geronimo.kernel.reposi
 import org.apache.geronimo.kernel.util.XmlUtil;
 import org.apache.geronimo.management.geronimo.JCAManagedConnectionFactory;
 import org.apache.geronimo.management.geronimo.ResourceAdapterModule;
+import org.apache.geronimo.system.plugin.PluginInstallerGBean;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -249,7 +253,7 @@ public class DatabasePoolPortlet extends
         PortletSession session = request.getPortletSession(true);
         DriverDownloader.DriverInfo[] results = (DriverDownloader.DriverInfo[]) session.getAttribute(DRIVER_SESSION_KEY,
                 PortletSession.APPLICATION_SCOPE);
-        if (results == null) {
+        if (results == null || results.length ==0) {
             DriverDownloader downloader = new DriverDownloader();
             try {
                 results = downloader.loadDriverInfo(new URL(DRIVER_INFO_URL));
@@ -335,14 +339,23 @@ public class DatabasePoolPortlet extends
             }
             if (found != null) {
                 data.jars = new String[]{found.getRepositoryURI()};
-                WriteableRepository repo = PortletManager.getCurrentServer(actionRequest).getWritableRepositories()[0];
-                final PortletSession session = actionRequest.getPortletSession();
-                ProgressInfo progressInfo = new ProgressInfo();
-                progressInfo.setMainMessage("Downloading " + found.getName());
-                session.setAttribute(ProgressInfo.PROGRESS_INFO_KEY, progressInfo, PortletSession.APPLICATION_SCOPE);
-                // Start the download monitoring
-                new Thread(new Downloader(found, progressInfo, repo)).start();
-                actionResponse.setRenderParameter(MODE_KEY, DOWNLOAD_STATUS_MODE);
+                try {
+                    PluginInstallerGBean installer = KernelRegistry.getSingleKernel().getGBean(PluginInstallerGBean.class);
+                    //WriteableRepository repo = PortletManager.getCurrentServer(actionRequest).getWritableRepositories()[0];
+                    final PortletSession session = actionRequest.getPortletSession();
+                    ProgressInfo progressInfo = new ProgressInfo();
+                    progressInfo.setMainMessage("Downloading " + found.getName());
+                    session.setAttribute(ProgressInfo.PROGRESS_INFO_KEY, progressInfo, PortletSession.APPLICATION_SCOPE);
+                    // Start the download monitoring
+                    new Thread(new Downloader(found, progressInfo, installer)).start();
+                    actionResponse.setRenderParameter(MODE_KEY, DOWNLOAD_STATUS_MODE);
+                } catch (GBeanNotFoundException e) {
+                    throw new PortletException(e);
+                } catch (InternalKernelException e) {
+                    throw new PortletException(e);
+                } catch (IllegalStateException e) {
+                    throw new PortletException(e);
+                }
             } else {
                 actionResponse.setRenderParameter(MODE_KEY, DOWNLOAD_MODE);
             }
@@ -440,20 +453,20 @@ public class DatabasePoolPortlet extends
     }
 
     private static class Downloader implements Runnable {
-        private WriteableRepository repo;
+        private PluginInstallerGBean installer;
         private DriverDownloader.DriverInfo driver;
         private ProgressInfo progressInfo;
 
-        public Downloader(DriverDownloader.DriverInfo driver, ProgressInfo progressInfo, WriteableRepository repo) {
+        public Downloader(DriverDownloader.DriverInfo driver, ProgressInfo progressInfo, PluginInstallerGBean installer) {
             this.driver = driver;
             this.progressInfo = progressInfo;
-            this.repo = repo;
+            this.installer = installer;
         }
 
         public void run() {
             DriverDownloader downloader = new DriverDownloader();
             try {
-                downloader.loadDriver(repo, driver, new FileWriteMonitor() {
+                downloader.loadDriver(installer, driver, new FileWriteMonitor() {
                     private int fileSize;
 
                     public void writeStarted(String fileDescription, int fileSize) {

Modified: geronimo/server/trunk/plugins/system-database/sysdb-portlets/src/main/java/org/apache/geronimo/console/databasemanager/wizard/DriverDownloader.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/system-database/sysdb-portlets/src/main/java/org/apache/geronimo/console/databasemanager/wizard/DriverDownloader.java?rev=1153761&r1=1153760&r2=1153761&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/system-database/sysdb-portlets/src/main/java/org/apache/geronimo/console/databasemanager/wizard/DriverDownloader.java (original)
+++ geronimo/server/trunk/plugins/system-database/sysdb-portlets/src/main/java/org/apache/geronimo/console/databasemanager/wizard/DriverDownloader.java Thu Aug  4 06:29:34 2011
@@ -41,6 +41,9 @@ import org.slf4j.LoggerFactory;
 import org.apache.geronimo.kernel.repository.Artifact;
 import org.apache.geronimo.kernel.repository.FileWriteMonitor;
 import org.apache.geronimo.kernel.repository.WriteableRepository;
+import org.apache.geronimo.kernel.util.FileUtils;
+import org.apache.geronimo.kernel.util.IOUtils;
+import org.apache.geronimo.system.plugin.PluginInstallerGBean;
 
 /**
  * A utility that handles listing and downloading available JDBC driver JARs.
@@ -117,7 +120,7 @@ public class DriverDownloader {
     /**
      * Downloads a driver and loads it into the local repository.
      */
-    public void loadDriver(WriteableRepository repo, DriverInfo driver, FileWriteMonitor monitor) throws IOException {
+    public void loadDriver(PluginInstallerGBean installer, DriverInfo driver, FileWriteMonitor monitor) throws IOException {
         int urlIndex = 0;
         if (driver.urls.length > 1) {
             if (random == null) {
@@ -167,8 +170,7 @@ public class DriverDownloader {
                 if (entry == null) {
                     log.error("Cannot extract driver JAR " + driver.unzipPath + " from download file " + url);
                 } else {
-                    in = jar.getInputStream(entry);
-                    repo.copyToRepository(in, (int)entry.getSize(), Artifact.create(uri), monitor);
+                    install(installer, jar.getInputStream(entry), Artifact.create(uri));
                 }
             } finally {
                 if (jar != null) try {
@@ -183,9 +185,27 @@ public class DriverDownloader {
         } else {
             URLConnection con = url.openConnection();
             in = con.getInputStream();
-            repo.copyToRepository(in, con.getContentLength(), Artifact.create(uri), monitor);
+            install(installer, in, Artifact.create(uri));
         }
     }
+    
+    private void install(PluginInstallerGBean installer, InputStream is, Artifact artifact) throws IOException{
+        // convert input stream to file
+        File file = File.createTempFile("geronimo-driver-to-install", "");
+        file.deleteOnExit();
+        OutputStream os = new FileOutputStream(file);
+        int bytesRead = 0;
+        byte[] buffer = new byte[8192];
+        while ((bytesRead = is.read(buffer, 0, 8192)) != -1) {
+            os.write(buffer, 0, bytesRead);
+        }
+        IOUtils.close(os);
+        IOUtils.close(is);
+        
+        // install
+        installer.installLibrary(file, artifact);
+    }
+    
 
     public static class DriverInfo implements Comparable, Serializable {
         private final static long serialVersionUID = -1202452382992975449L;