Search in sources :

Example 1 with Bundle

use of org.datanucleus.plugin.Bundle in project datanucleus-core by datanucleus.

the class OSGiBundleParser method parseManifest.

public static Bundle parseManifest(org.osgi.framework.Bundle osgiBundle) {
    Dictionary<String, String> headers = osgiBundle.getHeaders();
    Bundle bundle = null;
    try {
        String symbolicName = getBundleSymbolicName(headers, null);
        String bundleVersion = getBundleVersion(headers, null);
        String bundleName = getBundleName(headers, null);
        String bundleVendor = getBundleVendor(headers, null);
        bundle = new Bundle(symbolicName, bundleName, bundleVendor, bundleVersion, null);
        bundle.setRequireBundle(getRequireBundle(headers));
    } catch (NucleusException ne) {
        NucleusLogger.GENERAL.warn("Plugin at bundle " + osgiBundle.getSymbolicName() + " (" + osgiBundle.getBundleId() + ") failed to parse so is being ignored", ne);
        return null;
    }
    return bundle;
}
Also used : Bundle(org.datanucleus.plugin.Bundle) NucleusException(org.datanucleus.exceptions.NucleusException)

Example 2 with Bundle

use of org.datanucleus.plugin.Bundle in project datanucleus-core by datanucleus.

the class OSGiPluginRegistry method registerExtensions.

public void registerExtensions() {
    if (extensionPoints.length > 0) {
        return;
    }
    List registeringExtensions = new ArrayList();
    org.osgi.framework.Bundle bdl = FrameworkUtil.getBundle(this.getClass());
    BundleContext ctx = bdl.getBundleContext();
    if (ctx == null) {
        // TODO Any way we can handle this better? e.g force OSGi to start it?
        NucleusLogger.GENERAL.error("Bundle " + bdl.getSymbolicName() + " is in state " + bdl.getState() + " and has NULL context, so cannot register it properly!");
    } else {
        // parse the plugin files
        DocumentBuilder docBuilder = OSGiBundleParser.getDocumentBuilder();
        org.osgi.framework.Bundle[] osgiBundles = ctx.getBundles();
        for (org.osgi.framework.Bundle osgiBundle : osgiBundles) {
            URL pluginURL = osgiBundle.getEntry("plugin.xml");
            if (pluginURL == null) {
                continue;
            }
            Bundle bundle = registerBundle(osgiBundle);
            if (bundle == null) {
                // No MANIFEST.MF for this plugin.xml so ignore it
                continue;
            }
            List[] elements = OSGiBundleParser.parsePluginElements(docBuilder, this, pluginURL, bundle, osgiBundle);
            registerExtensionPointsForPluginInternal(elements[0], false);
            registeringExtensions.addAll(elements[1]);
        }
    }
    extensionPoints = extensionPointsByUniqueId.values().toArray(new ExtensionPoint[extensionPointsByUniqueId.values().size()]);
    // Register the extensions now that we have the extension-points all loaded
    for (int i = 0; i < registeringExtensions.size(); i++) {
        Extension extension = (Extension) registeringExtensions.get(i);
        ExtensionPoint exPoint = getExtensionPoint(extension.getExtensionPointId());
        if (exPoint == null) {
            if (extension.getPlugin() != null && extension.getPlugin().getSymbolicName() != null && extension.getPlugin().getSymbolicName().startsWith(DATANUCLEUS_PKG)) {
                NucleusLogger.GENERAL.warn(Localiser.msg("024002", extension.getExtensionPointId(), extension.getPlugin().getSymbolicName(), extension.getPlugin().getManifestLocation()));
            }
        } else {
            extension.setExtensionPoint(exPoint);
            exPoint.addExtension(extension);
        }
    }
}
Also used : Bundle(org.datanucleus.plugin.Bundle) ExtensionPoint(org.datanucleus.plugin.ExtensionPoint) ArrayList(java.util.ArrayList) URL(java.net.URL) ExtensionPoint(org.datanucleus.plugin.ExtensionPoint) Extension(org.datanucleus.plugin.Extension) DocumentBuilder(javax.xml.parsers.DocumentBuilder) ArrayList(java.util.ArrayList) List(java.util.List) BundleContext(org.osgi.framework.BundleContext)

Example 3 with Bundle

use of org.datanucleus.plugin.Bundle in project datanucleus-core by datanucleus.

the class PluginParserTest method testParseExtensionPoint.

public void testParseExtensionPoint() {
    ClassLoaderResolver clr = new ClassLoaderResolverImpl();
    NonManagedPluginRegistry mgr = new NonManagedPluginRegistry(clr, "EXCEPTION", true);
    assertEquals(0, mgr.getExtensionPoints().length);
    Bundle bundle0 = mgr.registerBundle(clr.getResource("/org/datanucleus/samples/plugin/MANIFEST0.MF", null));
    mgr.registerExtensionsForPlugin(clr.getResource("/org/datanucleus/samples/plugin/plugin1expoint.xml", null), bundle0);
    assertEquals(2, mgr.getExtensionPoints().length);
    assertNull(mgr.getExtensionPoint("testID"));
    assertNull(mgr.getExtensionPoint("testID2"));
    assertNotNull(mgr.getExtensionPoint("org.datanucleus.testID"));
    assertNotNull(mgr.getExtensionPoint("org.datanucleus.testID2"));
    ExtensionPoint point = mgr.getExtensionPoint("org.datanucleus.testID");
    assertEquals("testID", point.getId());
    assertEquals("org.datanucleus.testID", point.getUniqueId());
    assertEquals("testName", point.getName());
    assertNotNull(clr.getResource("/org/datanucleus/samples/plugin/plugin1.xsd", null));
    assertEquals(clr.getResource("/org/datanucleus/samples/plugin/plugin1.xsd", null), point.getSchema());
    assertEquals(0, point.getExtensions().length);
    mgr.registerExtensionsForPlugin(clr.getResource("/org/datanucleus/samples/plugin/plugin1.xml", null), bundle0);
    assertEquals(2, point.getExtensions().length);
    Extension[] exts = point.getExtensions();
    assertEquals(exts[0].getPlugin(), exts[1].getPlugin());
    assertEquals(2, exts[0].getConfigurationElements().length);
    ConfigurationElement[] level1 = exts[0].getConfigurationElements();
    assertEquals(2, level1[0].getChildren().length);
    assertEquals("level1", level1[0].getName());
    assertEquals(1, level1[0].getAttributeNames().length);
    assertEquals("1", level1[0].getAttribute("attr11"));
    assertNull(level1[0].getAttribute("attr11XXX"));
    ConfigurationElement[] level2 = level1[0].getChildren();
    assertEquals(1, level2[0].getChildren().length);
    assertEquals("level2", level2[0].getName());
    assertEquals(2, level2[0].getAttributeNames().length);
    assertEquals("attr21", level2[0].getAttributeNames()[0]);
    assertEquals("attr22", level2[0].getAttributeNames()[1]);
    assertEquals("2211", level2[0].getAttribute("attr21"));
    assertEquals("2221", level2[0].getAttribute("attr22"));
    assertNull(level2[0].getAttribute("attr11XXX"));
    assertEquals(0, level1[1].getChildren().length);
    assertEquals("2", level1[1].getAttribute("attr11"));
    assertEquals(1, exts[1].getConfigurationElements().length);
    level1 = exts[1].getConfigurationElements();
    assertEquals("A", level1[0].getAttribute("attr11"));
    assertEquals(0, level1[0].getChildren().length);
}
Also used : Extension(org.datanucleus.plugin.Extension) ConfigurationElement(org.datanucleus.plugin.ConfigurationElement) NonManagedPluginRegistry(org.datanucleus.plugin.NonManagedPluginRegistry) Bundle(org.datanucleus.plugin.Bundle) ExtensionPoint(org.datanucleus.plugin.ExtensionPoint) ClassLoaderResolver(org.datanucleus.ClassLoaderResolver) ClassLoaderResolverImpl(org.datanucleus.ClassLoaderResolverImpl)

Example 4 with Bundle

use of org.datanucleus.plugin.Bundle in project datanucleus-core by datanucleus.

the class PluginParserTest method testRequireBundle.

public void testRequireBundle() {
    ClassLoaderResolver clr = new ClassLoaderResolverImpl();
    NonManagedPluginRegistry mgr = new NonManagedPluginRegistry(clr, "EXCEPTION", true);
    assertEquals(0, mgr.getExtensionPoints().length);
    Bundle bundle3 = mgr.registerBundle(clr.getResource("/org/datanucleus/samples/plugin/MANIFEST3.MF", null));
    Bundle bundle4 = mgr.registerBundle(clr.getResource("/org/datanucleus/samples/plugin/MANIFEST4.MF", null));
    Bundle bundle5 = mgr.registerBundle(clr.getResource("/org/datanucleus/samples/plugin/MANIFEST5.MF", null));
    assertEquals(1, bundle3.getRequireBundle().size());
    assertEquals("org.datanucleus.plugin.test4", (bundle3.getRequireBundle().iterator().next()).getBundleSymbolicName());
    assertEquals(0, bundle4.getRequireBundle().size());
    assertEquals(2, bundle5.getRequireBundle().size());
    assertEquals("org.datanucleus.plugin.test6", (bundle5.getRequireBundle().get(0)).getBundleSymbolicName());
    assertEquals("org.datanucleus.plugin.test7", (bundle5.getRequireBundle().get(1)).getBundleSymbolicName());
    assertEquals("org.datanucleus.plugin.test7", (bundle5.getRequireBundle().get(1)).getBundleSymbolicName());
    assertEquals("optional", (bundle5.getRequireBundle().get(1)).getParameter("resolution"));
}
Also used : NonManagedPluginRegistry(org.datanucleus.plugin.NonManagedPluginRegistry) Bundle(org.datanucleus.plugin.Bundle) ClassLoaderResolver(org.datanucleus.ClassLoaderResolver) ClassLoaderResolverImpl(org.datanucleus.ClassLoaderResolverImpl)

Example 5 with Bundle

use of org.datanucleus.plugin.Bundle in project datanucleus-core by datanucleus.

the class PluginParserTest method testParseSymbolicName.

public void testParseSymbolicName() {
    ClassLoaderResolver clr = new ClassLoaderResolverImpl();
    NonManagedPluginRegistry mgr = new NonManagedPluginRegistry(clr, "EXCEPTION", true);
    Bundle bundle1 = mgr.registerBundle(clr.getResource("/org/datanucleus/samples/plugin/MANIFEST1.MF", null));
    mgr.registerExtensionsForPlugin(clr.getResource("/org/datanucleus/samples/plugin/plugin1expoint.xml", null), bundle1);
    assertEquals(2, mgr.getExtensionPoints().length);
    assertNull(mgr.getExtensionPoint("testID"));
    assertNull(mgr.getExtensionPoint("testID2"));
    assertNotNull(mgr.getExtensionPoint("org.datanucleus.plugin.test1.testID"));
    assertNotNull(mgr.getExtensionPoint("org.datanucleus.plugin.test1.testID2"));
    Bundle bundle2 = mgr.registerBundle(clr.getResource("/org/datanucleus/samples/plugin/MANIFEST2.MF", null));
    mgr.registerExtensionsForPlugin(clr.getResource("/org/datanucleus/samples/plugin/plugin1expoint.xml", null), bundle2);
    assertEquals(4, mgr.getExtensionPoints().length);
    assertNotNull(mgr.getExtensionPoint("org.datanucleus.plugin.test2.testID"));
    assertNotNull(mgr.getExtensionPoint("org.datanucleus.plugin.test2.testID2"));
    Extension[] ex = mgr.getExtensionPoint("org.datanucleus.plugin.test2.testID").getExtensions();
    assertEquals(ex.length, 0);
/*assertEquals("org.datanucleus.plugin.test2",ex[ex.length-1].getPlugin().getSymbolicName());*/
}
Also used : Extension(org.datanucleus.plugin.Extension) NonManagedPluginRegistry(org.datanucleus.plugin.NonManagedPluginRegistry) Bundle(org.datanucleus.plugin.Bundle) ClassLoaderResolver(org.datanucleus.ClassLoaderResolver) ClassLoaderResolverImpl(org.datanucleus.ClassLoaderResolverImpl)

Aggregations

Bundle (org.datanucleus.plugin.Bundle)6 ClassLoaderResolver (org.datanucleus.ClassLoaderResolver)3 ClassLoaderResolverImpl (org.datanucleus.ClassLoaderResolverImpl)3 Extension (org.datanucleus.plugin.Extension)3 NonManagedPluginRegistry (org.datanucleus.plugin.NonManagedPluginRegistry)3 ArrayList (java.util.ArrayList)2 ExtensionPoint (org.datanucleus.plugin.ExtensionPoint)2 URL (java.net.URL)1 List (java.util.List)1 DocumentBuilder (javax.xml.parsers.DocumentBuilder)1 NucleusException (org.datanucleus.exceptions.NucleusException)1 ConfigurationElement (org.datanucleus.plugin.ConfigurationElement)1 Parser (org.datanucleus.plugin.PluginParser.Parser)1 BundleContext (org.osgi.framework.BundleContext)1