[jboss-osgi-commits] JBoss-OSGI SVN: r93160 - in projects/jboss-osgi/projects/runtime/microcontainer/trunk/src: main/java/org/jboss/osgi/plugins/facade/classloading and 2 other directories.
jboss-osgi-commits at lists.jboss.org
jboss-osgi-commits at lists.jboss.org
Thu Sep 3 08:25:58 EDT 2009
Author: thomas.diesler at jboss.com
Date: 2009-09-03 08:25:57 -0400 (Thu, 03 Sep 2009)
New Revision: 93160
Added:
projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiClassLoaderDomain.java
Modified:
projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/bundle/OSGiBundleManager.java
projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiBundleClassLoadingDeployer.java
projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiClassLoaderSystem.java
projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/test/java/org/jboss/test/osgi/classloader/test/ClassLoaderDomainUnitTestCase.java
projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/test/resources/bootstrap/bootstrap.xml
Log:
Add OSGiClassLoaderDomain
Modified: projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/bundle/OSGiBundleManager.java
===================================================================
--- projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/bundle/OSGiBundleManager.java 2009-09-03 11:46:03 UTC (rev 93159)
+++ projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/bundle/OSGiBundleManager.java 2009-09-03 12:25:57 UTC (rev 93160)
@@ -582,6 +582,10 @@
*/
public boolean resolve(OSGiBundleState bundleState, boolean errorOnFail)
{
+ int state = bundleState.getState();
+ if (state == Bundle.RESOLVED || state == Bundle.ACTIVE)
+ return true;
+
try
{
String name = bundleState.getDeploymentUnit().getName();
@@ -839,6 +843,10 @@
*/
public void initFramework()
{
+ // Log INFO about this implementation
+ log.info(getClass().getPackage().getImplementationTitle());
+ log.info(getClass().getPackage().getImplementationVersion());
+
int state = systemBundle.getState();
// This method does nothing if called when this Framework is in the STARTING, ACTIVE or STOPPING state
Modified: projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiBundleClassLoadingDeployer.java
===================================================================
--- projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiBundleClassLoadingDeployer.java 2009-09-03 11:46:03 UTC (rev 93159)
+++ projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiBundleClassLoadingDeployer.java 2009-09-03 12:25:57 UTC (rev 93160)
@@ -21,10 +21,11 @@
*/
package org.jboss.osgi.plugins.facade.classloading;
+// $Id: $
+
import java.util.List;
import org.jboss.classloader.spi.ClassLoaderDomain;
-import org.jboss.classloader.spi.ClassLoaderSystem;
import org.jboss.classloading.spi.metadata.CapabilitiesMetaData;
import org.jboss.classloading.spi.metadata.ClassLoadingMetaData;
import org.jboss.classloading.spi.metadata.RequirementsMetaData;
@@ -45,11 +46,12 @@
* This deployer maps osgi metadata into our classloading metadata.
*
* @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author Thomas.Diesler at jboss.com
* @version $Revision: 1.1 $
*/
public class OSGiBundleClassLoadingDeployer extends AbstractSimpleRealDeployer<OSGiMetaData>
{
- private ClassLoaderSystem classLoaderSystem;
+ private ClassLoaderDomain domain;
/**
* Create a new OSGiBundleClassLoadingDeployer.
@@ -63,9 +65,9 @@
setTopLevelOnly(true);
}
- public void setClassLoaderSystem(ClassLoaderSystem classLoaderSystem)
+ public void setDomain(ClassLoaderDomain domain)
{
- this.classLoaderSystem = classLoaderSystem;
+ this.domain = domain;
}
@Override
@@ -83,13 +85,8 @@
ClassLoadingMetaData classLoadingMetaData = new ClassLoadingMetaData();
classLoadingMetaData.setName(osgiMetaData.getBundleSymbolicName());
classLoadingMetaData.setVersion(osgiMetaData.getBundleVersion());
+ classLoadingMetaData.setDomain(domain != null ? domain.getName() : null);
- if (classLoaderSystem != null)
- {
- ClassLoaderDomain defaultDomain = classLoaderSystem.getDefaultDomain();
- classLoadingMetaData.setParentDomain(defaultDomain.getName());
- }
-
CapabilitiesMetaData capabilities = classLoadingMetaData.getCapabilities();
RequirementsMetaData requirements = classLoadingMetaData.getRequirements();
Added: projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiClassLoaderDomain.java
===================================================================
--- projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiClassLoaderDomain.java (rev 0)
+++ projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiClassLoaderDomain.java 2009-09-03 12:25:57 UTC (rev 93160)
@@ -0,0 +1,132 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.osgi.plugins.facade.classloading;
+
+// $Id: $
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.classloader.spi.ClassLoaderDomain;
+import org.jboss.classloader.spi.ClassLoaderPolicy;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloader.spi.ParentPolicy;
+import org.jboss.classloader.spi.base.BaseClassLoader;
+import org.jboss.classloader.spi.filter.ClassFilter;
+import org.jboss.classloader.spi.filter.PackageClassFilter;
+import org.jboss.classloading.spi.vfs.policy.VFSClassLoaderPolicy;
+import org.jboss.osgi.plugins.facade.api.SystemPackagesPlugin;
+import org.jboss.osgi.plugins.facade.bundle.OSGiBundleManager;
+import org.jboss.virtual.VFS;
+import org.jboss.virtual.VirtualFile;
+
+/**
+ * OSGiClassLoaderDomain.<p>
+ *
+ * @author Thomas.Diesler at jboss.com
+ * @since 03-Sep-2009
+ */
+public class OSGiClassLoaderDomain extends ClassLoaderDomain
+{
+ private ClassLoaderSystem classLoaderSystem;
+ private OSGiBundleManager bundleManager;
+ private List<URL> classPath = new ArrayList<URL>();
+
+ /**
+ * Create a new OSGiClassLoaderDomain.
+ * @param domainName the domain name
+ * @throws IllegalArgumentException for a null bundle manager
+ */
+ public OSGiClassLoaderDomain(String domainName)
+ {
+ super(domainName);
+ }
+
+ public void setClassLoaderSystem(ClassLoaderSystem classLoaderSystem)
+ {
+ this.classLoaderSystem = classLoaderSystem;
+ }
+
+ public void setBundleManager(OSGiBundleManager bundleManager)
+ {
+ this.bundleManager = bundleManager;
+ }
+
+ public void setClassPath(List<URL> classPath)
+ {
+ this.classPath = classPath;
+ }
+
+ @Override
+ protected Class<?> loadClass(BaseClassLoader classLoader, String name, boolean allExports) throws ClassNotFoundException
+ {
+ return super.loadClass(classLoader, name, allExports);
+ }
+
+ public void start() throws IOException
+ {
+ if (classLoaderSystem == null)
+ throw new IllegalArgumentException("Null classLoaderSystem");
+ if (bundleManager == null)
+ throw new IllegalArgumentException("Null bundleManager");
+ if (classPath == null)
+ throw new IllegalArgumentException("Null classPath");
+
+ // Register the domain with the ClassLoaderSystem
+ classLoaderSystem.registerDomain(this);
+
+ // Initialize the configured system packages
+ String filteredPackages = getSystemPackagesAsString();
+ PackageClassFilter classFilter = PackageClassFilter.createPackageClassFilterFromString(filteredPackages);
+ classFilter.setIncludeJava(true);
+
+ // Setup the domain's parent policy
+ setParentPolicy(new ParentPolicy(classFilter, ClassFilter.NOTHING));
+
+ // Initialize the configured policy roots
+ VirtualFile[] roots = new VirtualFile[classPath.size()];
+ for (int i = 0; i < classPath.size(); i++)
+ roots[i] = VFS.createNewRoot(classPath.get(i));
+
+ // Create and register the ClassLoaderPolicy
+ ClassLoaderPolicy systemPolicy = new VFSClassLoaderPolicy("OSGiSystemPolicy", roots);
+ classLoaderSystem.registerClassLoaderPolicy(getName(), systemPolicy);
+ }
+
+ private String getSystemPackagesAsString()
+ {
+ SystemPackagesPlugin syspackPlugin = bundleManager.getPlugin(SystemPackagesPlugin.class);
+ List<String> sysPackages = syspackPlugin.getSystemPackages();
+ StringBuffer sysPackageString = new StringBuffer();
+ for (String name : sysPackages)
+ {
+ int semiIndex = name.indexOf(';');
+ if (semiIndex > 0)
+ name = name.substring(0, semiIndex);
+
+ sysPackageString.append(name + ",");
+ }
+ return sysPackageString.toString();
+ }
+}
\ No newline at end of file
Modified: projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiClassLoaderSystem.java
===================================================================
--- projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiClassLoaderSystem.java 2009-09-03 11:46:03 UTC (rev 93159)
+++ projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/main/java/org/jboss/osgi/plugins/facade/classloading/OSGiClassLoaderSystem.java 2009-09-03 12:25:57 UTC (rev 93160)
@@ -21,20 +21,13 @@
*/
package org.jboss.osgi.plugins.facade.classloading;
-import java.util.List;
-
-import org.jboss.classloader.plugins.filter.PatternClassFilter;
import org.jboss.classloader.plugins.jdk.AbstractJDKChecker;
import org.jboss.classloader.spi.ClassLoaderDomain;
import org.jboss.classloader.spi.ClassLoaderPolicy;
import org.jboss.classloader.spi.ClassLoaderSystem;
import org.jboss.classloader.spi.ParentPolicy;
import org.jboss.classloader.spi.base.BaseClassLoader;
-import org.jboss.classloader.spi.filter.ClassFilter;
-import org.jboss.classloader.spi.filter.PackageClassFilter;
-import org.jboss.osgi.plugins.facade.api.SystemPackagesPlugin;
import org.jboss.osgi.plugins.facade.bundle.AbstractBundleState;
-import org.jboss.osgi.plugins.facade.bundle.OSGiBundleManager;
import org.jboss.osgi.plugins.facade.bundle.OSGiBundleState;
/**
@@ -51,19 +44,11 @@
* @param bundleManager the bundleManager
* @throws IllegalArgumentException for a null bundle manager
*/
- public OSGiClassLoaderSystem(OSGiBundleManager bundleManager)
+ public OSGiClassLoaderSystem()
{
- if (bundleManager == null)
- throw new IllegalArgumentException("Null bundle manager");
-
ClassLoaderDomain domain = getDefaultDomain();
- // Initialize the configured system packages
- String sysPackageString = getSystemPackagesAsString(bundleManager);
- PatternClassFilter filter = PackageClassFilter.createPackageClassFilterFromString(sysPackageString);
- filter.setIncludeJava(true);
-
- domain.setParentPolicy(new ParentPolicy(filter, ClassFilter.NOTHING));
+ domain.setParentPolicy(ParentPolicy.BEFORE_BUT_JAVA_ONLY);
AbstractJDKChecker.getExcluded().add(AbstractBundleState.class);
AbstractJDKChecker.getExcluded().add(OSGiBundleState.class);
}
@@ -78,21 +63,4 @@
{
return new OSGiBundleClassLoader(policy);
}
-
- private String getSystemPackagesAsString(OSGiBundleManager bundleManager)
- {
- SystemPackagesPlugin syspackPlugin = bundleManager.getPlugin(SystemPackagesPlugin.class);
- List<String> sysPackages = syspackPlugin.getSystemPackages();
- StringBuffer sysPackageString = new StringBuffer();
- for (String name : sysPackages)
- {
- int semiIndex = name.indexOf(';');
- if (semiIndex > 0)
- name = name.substring(0, semiIndex);
-
- sysPackageString.append(name + ",");
- }
- return sysPackageString.toString();
- }
-
}
\ No newline at end of file
Modified: projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/test/java/org/jboss/test/osgi/classloader/test/ClassLoaderDomainUnitTestCase.java
===================================================================
--- projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/test/java/org/jboss/test/osgi/classloader/test/ClassLoaderDomainUnitTestCase.java 2009-09-03 11:46:03 UTC (rev 93159)
+++ projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/test/java/org/jboss/test/osgi/classloader/test/ClassLoaderDomainUnitTestCase.java 2009-09-03 12:25:57 UTC (rev 93160)
@@ -21,16 +21,22 @@
*/
package org.jboss.test.osgi.classloader.test;
-import static org.junit.Assert.*;
+// $Id$
+import static org.junit.Assert.fail;
+
import java.net.URL;
+import org.jboss.classloader.plugins.jdk.AbstractJDKChecker;
import org.jboss.classloader.plugins.system.DefaultClassLoaderSystem;
import org.jboss.classloader.spi.ClassLoaderDomain;
import org.jboss.classloader.spi.ClassLoaderPolicy;
import org.jboss.classloader.spi.ClassLoaderSystem;
import org.jboss.classloader.spi.ParentPolicy;
+import org.jboss.classloader.spi.filter.ClassFilter;
+import org.jboss.classloader.spi.filter.PackageClassFilter;
import org.jboss.classloading.spi.vfs.policy.VFSClassLoaderPolicy;
+import org.jboss.logging.Logger;
import org.jboss.osgi.plugins.facade.bundle.OSGiBundleManager;
import org.jboss.osgi.spi.testing.OSGiTestHelper;
import org.jboss.virtual.VFS;
@@ -43,7 +49,7 @@
* ClassLoaderDomainUnitTestCase.
*
* @author Thomas.Diesler at jboss.com
- * @version $Revision$
+ * @since 03-Sep-2009
*/
public class ClassLoaderDomainUnitTestCase
{
@@ -54,24 +60,53 @@
public void setUp()
{
classLoaderSystem = new DefaultClassLoaderSystem();
+ AbstractJDKChecker.getExcluded().add(getClass());
}
@Test
public void testSystemPolicy() throws Exception
{
ClassLoaderDomain domain = new ClassLoaderDomain(OSGI_CLASSLOADER_DOMAIN);
- domain.setParentPolicy(ParentPolicy.BEFORE_BUT_JAVA_ONLY);
- domain.setParent(null);
classLoaderSystem.registerDomain(domain);
+
+ // Setup the class filter
+ String filteredPackages = Logger.class.getPackage().getName();
+ PackageClassFilter classFilter = PackageClassFilter.createPackageClassFilterFromString(filteredPackages);
+ classFilter.setIncludeJava(true);
+ domain.setParentPolicy(new ParentPolicy(classFilter, ClassFilter.NOTHING));
+
URL coreURL = new OSGiTestHelper().getTestArchiveURL("bundles/org.osgi.core.jar");
VirtualFile coreVF = VFS.createNewRoot(coreURL);
ClassLoaderPolicy systemPolicy = new VFSClassLoaderPolicy("OSGiSystemPolicy", new VirtualFile[] { coreVF });
- classLoaderSystem.registerClassLoaderPolicy(OSGI_CLASSLOADER_DOMAIN, systemPolicy);
+ ClassLoader classLoader = classLoaderSystem.registerClassLoaderPolicy(OSGI_CLASSLOADER_DOMAIN, systemPolicy);
- assertNotNull("Can load JDK class", domain.loadClass(String.class.getName()));
- //assertNotNull("Can load OSGi Framework class", domain.loadClass(Bundle.class.getName()));
- assertNull("Cannot load OSGiBundleManager", domain.loadClass(OSGiBundleManager.class.getName()));
+ // Load JDK class
+ assertLoadClass(classLoader, String.class.getName(), true);
+
+ // Load from org.osgi.core
+ assertLoadClass(classLoader, Bundle.class.getName(), true);
+
+ // Load from system classpath
+ assertLoadClass(classLoader, Logger.class.getName(), true);
+
+ // No access to implementation
+ assertLoadClass(classLoader, OSGiBundleManager.class.getName(), false);
}
+
+ private void assertLoadClass(ClassLoader classLoader, String name, boolean success)
+ {
+ try
+ {
+ classLoader.loadClass(name);
+ if (success == false)
+ fail("Expected ClassNotFoundException for '" + name + "' from " + classLoader);
+ }
+ catch (ClassNotFoundException ex)
+ {
+ if (success)
+ fail("Cannot load '" + name + "' from " + classLoader);
+ }
+ }
}
Modified: projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/test/resources/bootstrap/bootstrap.xml
===================================================================
--- projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/test/resources/bootstrap/bootstrap.xml 2009-09-03 11:46:03 UTC (rev 93159)
+++ projects/jboss-osgi/projects/runtime/microcontainer/trunk/src/test/resources/bootstrap/bootstrap.xml 2009-09-03 12:25:57 UTC (rev 93160)
@@ -24,7 +24,12 @@
org.jboss.osgi.spi.management;version=1.0,
org.jboss.osgi.spi.service;version=1.0,
org.jboss.osgi.spi.testing;version=1.0,
- org.jboss.osgi.spi.util;version=1.0
+ org.jboss.osgi.spi.util;version=1.0,
+
+ org.osgi.framework,
+ org.osgi.framework.launch,
+ org.osgi.service.startlevel,
+ org.osgi.service.packageadmin
</value></entry>
</map>
</property>
@@ -96,7 +101,9 @@
<bean name="OSGiBundleStateDeployer" class="org.jboss.osgi.plugins.deployers.bundle.OSGiBundleStateDeployer">
<constructor><parameter><inject bean="OSGiBundleManager" /></parameter></constructor>
</bean>
- <bean name="OSGiBundleClassLoadingDeployer" class="org.jboss.osgi.plugins.facade.classloading.OSGiBundleClassLoadingDeployer"/>
+ <bean name="OSGiBundleClassLoadingDeployer" class="org.jboss.osgi.plugins.facade.classloading.OSGiBundleClassLoadingDeployer">
+ <property name="domain"><inject bean="OSGiClassLoaderDomain"/></property>
+ </bean>
<bean name="OSGiBundleActivatorDeployer" class="org.jboss.osgi.plugins.deployers.bundle.OSGiBundleActivatorDeployer" />
<!--
@@ -107,10 +114,13 @@
********************************
-->
- <!-- ClassLoading -->
- <bean name="ClassLoaderSystem" class="org.jboss.osgi.plugins.facade.classloading.OSGiClassLoaderSystem" >
- <constructor><parameter><inject bean="OSGiBundleManager" /></parameter></constructor>
+ <bean name="OSGiClassLoaderSystem" class="org.jboss.osgi.plugins.facade.classloading.OSGiClassLoaderSystem" />
+ <bean name="OSGiClassLoaderDomain" class="org.jboss.osgi.plugins.facade.classloading.OSGiClassLoaderDomain" >
+ <constructor><parameter>OSGiClassLoaderDomain</parameter></constructor>
+ <property name="classLoaderSystem"><inject bean="OSGiClassLoaderSystem"/></property>
+ <property name="bundleManager"><inject bean="OSGiBundleManager" /></property>
</bean>
+
<bean name="ClassLoading" class="org.jboss.classloading.spi.dependency.ClassLoading">
<incallback method="addModule" state="Configured" />
<uncallback method="removeModule" state="Configured" />
@@ -126,7 +136,7 @@
</bean>
<bean name="ClassLoaderDeployer" class="org.jboss.deployers.plugins.classloading.AbstractLevelClassLoaderSystemDeployer">
<property name="classLoading"><inject bean="ClassLoading" /></property>
- <property name="system"><inject bean="ClassLoaderSystem" /></property>
+ <property name="system"><inject bean="OSGiClassLoaderSystem" /></property>
</bean>
</deployment>
More information about the jboss-osgi-commits
mailing list