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