You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pa...@apache.org on 2020/01/24 00:47:39 UTC

svn commit: r1873081 - in /felix/sandbox/pauls/connect/src: main/java/org/apache/felix/framework/ main/java/org/apache/felix/framework/cache/ test/java/org/apache/felix/framework/

Author: pauls
Date: Fri Jan 24 00:47:39 2020
New Revision: 1873081

URL: http://svn.apache.org/viewvc?rev=1873081&view=rev
Log:
Update to latest connect interfaces

Modified:
    felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleImpl.java
    felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleRevisionImpl.java
    felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleWiringImpl.java
    felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/Felix.java
    felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java
    felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/cache/BundleCache.java
    felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/cache/ConnectContentContent.java
    felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/cache/ConnectRevision.java
    felix/sandbox/pauls/connect/src/test/java/org/apache/felix/framework/ConnectTest.java

Modified: felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleImpl.java?rev=1873081&r1=1873080&r2=1873081&view=diff
==============================================================================
--- felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleImpl.java (original)
+++ felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleImpl.java Fri Jan 24 00:47:39 2020
@@ -189,16 +189,23 @@ class BundleImpl implements Bundle, Bund
         {
             // Get current revision, since we can reuse it.
             BundleRevisionImpl current = adapt(BundleRevisionImpl.class);
-            // Close all existing revisions.
-            closeRevisions();
-            // Clear all revisions.
-            m_revisions.clear();
 
-            // Purge all old archive revisions, only keeping the newest one.
-            m_archive.purge();
+            if (isRemovalPending()) {
+                closeRevisions();
+                // Purge all old archive revisions, only keeping the newest one.
+                m_archive.purge();
+
+                current.resetContent(m_archive.getCurrentRevision().getContent());
+            }
+            else {
+                // Remove the revision from the resolver state.
+                getFramework().getResolver().removeRevision(current);
+                current.resolve(null);
+                current.disposeContentPath();
+            }
+
+            m_revisions.clear();
 
-            // Reset the content of the current bundle revision.
-            current.resetContent(m_archive.getCurrentRevision().getContent());
             // Re-add the revision to the bundle.
             addRevision(current);
 

Modified: felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleRevisionImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleRevisionImpl.java?rev=1873081&r1=1873080&r2=1873081&view=diff
==============================================================================
--- felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleRevisionImpl.java (original)
+++ felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleRevisionImpl.java Fri Jan 24 00:47:39 2020
@@ -18,6 +18,7 @@
  */
 package org.apache.felix.framework;
 
+import org.apache.felix.framework.cache.ConnectContentContent;
 import org.apache.felix.framework.cache.Content;
 import org.apache.felix.framework.util.FelixConstants;
 import org.apache.felix.framework.util.MultiReleaseContent;
@@ -321,6 +322,15 @@ public class BundleRevisionImpl implemen
         }
     }
 
+    synchronized void disposeContentPath()
+    {
+        for (int i = 0; (m_contentPath != null) && (i < m_contentPath.size()); i++)
+        {
+            m_contentPath.get(i).close();
+        }
+        m_contentPath = null;
+    }
+
     public void setProtectionDomain(ProtectionDomain pd)
     {
         m_protectionDomain = pd;
@@ -618,6 +628,29 @@ public class BundleRevisionImpl implemen
         return getContentPath().get(index - 1).getEntryAsStream(urlPath);
     }
 
+
+    public long getContentTime(int index, String urlPath)
+    {
+        if (urlPath.startsWith("/"))
+        {
+            urlPath = urlPath.substring(1);
+        }
+        Content content;
+        if (index == 0)
+        {
+            content = getContent();
+        }
+        else {
+            content = getContentPath().get(index - 1);
+        }
+        if (content instanceof ConnectContentContent) {
+            return ((ConnectContentContent) content).getContentTime(urlPath);
+        }
+        else {
+            return m_bundle.getLastModified();
+        }
+    }
+
     public URL getLocalURL(int index, String urlPath)
     {
         if (urlPath.startsWith("/"))

Modified: felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleWiringImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleWiringImpl.java?rev=1873081&r1=1873080&r2=1873081&view=diff
==============================================================================
--- felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleWiringImpl.java (original)
+++ felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/BundleWiringImpl.java Fri Jan 24 00:47:39 2020
@@ -1561,24 +1561,36 @@ public class BundleWiringImpl implements
                 // If not found, try the revision's own class path.
                 if (result == null)
                 {
-                    if (isClass)
+                    ClassLoader cl = getClassLoaderInternal();
+                    if (cl == null)
                     {
-                        ClassLoader cl = getClassLoaderInternal();
-                        if (cl == null)
+                        if (isClass)
                         {
                             throw new ClassNotFoundException(
-                                    "Unable to load class '"
-                                            + name
-                                            + "' because the bundle wiring for "
-                                            + m_revision.getSymbolicName()
-                                            + " is no longer valid.");
+                                "Unable to load class '"
+                                    + name
+                                    + "' because the bundle wiring for "
+                                    + m_revision.getSymbolicName()
+                                    + " is no longer valid.");
+                        }
+                         else
+                        {
+                            throw new ResourceNotFoundException("Unable to load resource '"
+                                + name
+                                + "' because the bundle wiring for "
+                                + m_revision.getSymbolicName()
+                                + " is no longer valid.");
                         }
-                        result = cl instanceof BundleClassLoader ? ((BundleClassLoader) cl).findClass(name) : cl.loadClass(name);
                     }
-                    else
+                    if (cl instanceof BundleClassLoader)
                     {
-                        result = m_revision.getResourceLocal(name);
+                        result = isClass ? ((BundleClassLoader) cl).findClass(name) :
+                            ((BundleClassLoader) cl).findResource(name);
                     }
+                    else {
+                        result = isClass ? cl.loadClass(name) : cl.getResource(name);
+                    }
+
 
                     // If still not found, then try the revision's dynamic imports.
                     if (result == null)

Modified: felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/Felix.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/Felix.java?rev=1873081&r1=1873080&r2=1873081&view=diff
==============================================================================
--- felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/Felix.java (original)
+++ felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/Felix.java Fri Jan 24 00:47:39 2020
@@ -736,6 +736,10 @@ public class Felix extends BundleImpl im
                             throw new BundleException("Unable to flush bundle cache.", ex);
                         }
                     }
+                    if (m_connectFramework != null)
+                    {
+                        m_connectFramework.initialize(m_cache.getCacheDir(), (Map) m_configMap);
+                    }
                 }
 
                 // Initialize installed bundle data structures.
@@ -793,12 +797,6 @@ public class Felix extends BundleImpl im
                 // First get cached bundle identifiers.
                 try
                 {
-
-                    if (m_connectFramework != null)
-                    {
-                        m_connectFramework.initialize(m_cache.getSystemBundleDataFile(""), (Map) m_configMap);
-                        m_connectFramework.createBundleActivator().ifPresent(m_activatorList::add);
-                    }
                     archives = m_cache.getArchives(m_connectFramework);
                 }
                 catch (Exception ex)
@@ -865,6 +863,12 @@ public class Felix extends BundleImpl im
                     m_extensionManager.startExtensionBundle(this, (BundleImpl) extension);
                 }
 
+
+                if (m_connectFramework != null)
+                {
+                    m_connectFramework.createBundleActivator().ifPresent(m_activatorList::add);
+                }
+
                 // Now that we have loaded all cached bundles and have determined the
                 // max bundle ID of cached bundles, we need to try to load the next
                 // bundle ID from persistent storage. In case of failure, we should
@@ -5249,6 +5253,7 @@ public class Felix extends BundleImpl im
                         throwable);
                 }
             }
+            m_activatorList.clear();
             if (m_securityManager != null)
             {
                 System.setSecurityManager(null);

Modified: felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java?rev=1873081&r1=1873080&r2=1873081&view=diff
==============================================================================
--- felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java (original)
+++ felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java Fri Jan 24 00:47:39 2020
@@ -35,7 +35,7 @@ class URLHandlersBundleURLConnection ext
     private Felix m_framework;
     private BundleRevision m_targetRevision;
     private int m_classPathIdx = -1;
-    private int m_contentLength;
+    private long m_contentLength;
     private long m_contentTime;
     private String m_contentType;
     private InputStream m_is;
@@ -83,7 +83,6 @@ class URLHandlersBundleURLConnection ext
         {
             throw new IOException("No bundle associated with resource: " + url);
         }
-        m_contentTime = bundle.getLastModified();
 
         // Get the bundle's revisions to find the target revision.
         BundleRevisions revisions = bundle.adapt(BundleRevisions.class);
@@ -145,6 +144,7 @@ class URLHandlersBundleURLConnection ext
             m_is = ((BundleRevisionImpl)
                 m_targetRevision).getInputStream(m_classPathIdx, url.getPath());
             m_contentLength = (m_is == null) ? 0 : m_is.available();
+            m_contentTime = ((BundleRevisionImpl) m_targetRevision).getContentTime(m_classPathIdx, url.getPath());
             m_contentType = URLConnection.guessContentTypeFromName(url.getFile());
             connected = true;
         }
@@ -160,6 +160,11 @@ class URLHandlersBundleURLConnection ext
 
     public int getContentLength()
     {
+        return (int) getContentLengthLong();
+    }
+
+    public long getContentLengthLong()
+    {
         try
         {
             connect();
@@ -172,11 +177,6 @@ class URLHandlersBundleURLConnection ext
         return m_contentLength;
     }
 
-    public long getContentLengthLong()
-    {
-        return getContentLength();
-    }
-
     public long getLastModified()
     {
         try

Modified: felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/cache/BundleCache.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/cache/BundleCache.java?rev=1873081&r1=1873080&r2=1873081&view=diff
==============================================================================
--- felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/cache/BundleCache.java (original)
+++ felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/cache/BundleCache.java Fri Jan 24 00:47:39 2020
@@ -387,6 +387,10 @@ public class BundleCache
         }
     }
 
+    public File getCacheDir() {
+        return determineCacheDir(m_configMap);
+    }
+
     /* package */ static SecureAction getSecureAction()
     {
         return m_secureAction;

Modified: felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/cache/ConnectContentContent.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/cache/ConnectContentContent.java?rev=1873081&r1=1873080&r2=1873081&view=diff
==============================================================================
--- felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/cache/ConnectContentContent.java (original)
+++ felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/cache/ConnectContentContent.java Fri Jan 24 00:47:39 2020
@@ -23,6 +23,7 @@ import java.io.InputStream;
 import java.net.URL;
 import java.util.Enumeration;
 import java.util.Iterator;
+import java.util.Optional;
 
 import org.osgi.framework.connect.ConnectContent;
 
@@ -31,7 +32,7 @@ public class ConnectContentContent imple
 
     private final ConnectContent m_content;
 
-    public ConnectContentContent(ConnectContent content)
+    public ConnectContentContent(ConnectContent content) throws IOException
     {
        m_content = content;
     }
@@ -39,14 +40,7 @@ public class ConnectContentContent imple
     @Override
     public void close()
     {
-        try
-        {
-            m_content.close();
-        }
-        catch (IOException e)
-        {
-            e.printStackTrace();
-        }
+        // TODO: Connect
     }
 
     @Override
@@ -86,30 +80,35 @@ public class ConnectContentContent imple
     @Override
     public byte[] getEntryAsBytes(String name)
     {
-        try
-        {
-            return m_content.getEntry(name).get().getBytes();
-        }
-        catch (Exception e)
+        return m_content.getEntry(name).flatMap(entry ->
         {
-            // TODO: log this or something
-            e.printStackTrace();
-            return null;
-        }
+            try
+            {
+                return Optional.of(entry.getBytes());
+            }
+            catch (IOException e)
+            {
+                e.printStackTrace();
+                return null;
+            }
+        }).orElse(null);
     }
 
     @Override
     public InputStream getEntryAsStream(String name) throws IOException
     {
-        try
+        return m_content.getEntry(name).flatMap(entry ->
         {
-            return m_content.getEntry(name).get().getInputStream();
-        }
-        catch (Exception iae)
-        {
-            iae.printStackTrace();
-            return null;
-        }
+            try
+            {
+                return Optional.of(entry.getInputStream());
+            }
+            catch (IOException e)
+            {
+                e.printStackTrace();
+                return null;
+            }
+        }).orElse(null);
     }
 
     public ClassLoader getClassLoader() {
@@ -136,4 +135,9 @@ public class ConnectContentContent imple
         // TODO: Connect
         return null;
     }
+
+    public long getContentTime(String urlPath)
+    {
+        return m_content.getEntry(urlPath).flatMap(entry -> Optional.of(entry.getLastModified())).orElse(-1L);
+    }
 }

Modified: felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/cache/ConnectRevision.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/cache/ConnectRevision.java?rev=1873081&r1=1873080&r2=1873081&view=diff
==============================================================================
--- felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/cache/ConnectRevision.java (original)
+++ felix/sandbox/pauls/connect/src/main/java/org/apache/felix/framework/cache/ConnectRevision.java Fri Jan 24 00:47:39 2020
@@ -37,7 +37,7 @@ public class ConnectRevision extends Bun
     public ConnectRevision(Logger logger, Map configMap, File revisionRootDir, String location, ConnectModule module) throws Exception
     {
         super(logger, configMap, revisionRootDir, location);
-        m_module = module.getContent();
+        m_module = module.getContent().open();
         // If the revision directory exists, then we don't
         // need to initialize since it has already been done.
         if (BundleCache.getSecureAction().fileExists(getRevisionRootDir()))
@@ -80,6 +80,6 @@ public class ConnectRevision extends Bun
     @Override
     protected void close() throws Exception
     {
-        // TODO: close this maybe?
+        m_module.close();
     }
 }

Modified: felix/sandbox/pauls/connect/src/test/java/org/apache/felix/framework/ConnectTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pauls/connect/src/test/java/org/apache/felix/framework/ConnectTest.java?rev=1873081&r1=1873080&r2=1873081&view=diff
==============================================================================
--- felix/sandbox/pauls/connect/src/test/java/org/apache/felix/framework/ConnectTest.java (original)
+++ felix/sandbox/pauls/connect/src/test/java/org/apache/felix/framework/ConnectTest.java Fri Jan 24 00:47:39 2020
@@ -138,13 +138,13 @@ public class ConnectTest extends TestCas
                                 @Override
                                 public ConnectContent open() throws IOException
                                 {
-                                    return null;
+                                    return this;
                                 }
 
                                 @Override
                                 public ConnectContent close() throws IOException
                                 {
-                                    return null;
+                                    return this;
                                 }
 
                                 @Override