You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by "Kelvin Goodson (JIRA)" <tu...@ws.apache.org> on 2007/11/21 12:16:43 UTC

[jira] Commented: (TUSCANY-1293) SDO does not work with OSGi

    [ https://issues.apache.org/jira/browse/TUSCANY-1293?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12544420 ] 

Kelvin Goodson commented on TUSCANY-1293:
-----------------------------------------

There's an offer of help from Rajini to get this fixed that's current on the tuscany-dev mailing list.  I'm actively trying to help Rajini with her request for info,  but if anyone watching this JRIA wan't to pitch in,  please do so.
See http://marc.info/?l=tuscany-dev&m=119563682818977&w=2

> SDO does not work with OSGi
> ---------------------------
>
>                 Key: TUSCANY-1293
>                 URL: https://issues.apache.org/jira/browse/TUSCANY-1293
>             Project: Tuscany
>          Issue Type: Bug
>          Components: Java SDO Implementation
>    Affects Versions: Java-SDO-beta1
>         Environment: OS X Eclipse 3.3 M7
>            Reporter: Bryan Hunt
>            Priority: Blocker
>             Fix For: Java-SDO-Next
>
>
> When I execute:
> XSDHelper.INSTANCE.define(schema, null);
> I end up with a NullPointerException.  I've tracked down root cause ...
> The static initializer of the HelperProvider executes this code:
>   provider = getInstance(HelperProvider.class.getClassLoader());
> which ends up calling:
>   HelperProvider provider = loadImplementation(cl, implName);
> implName is null so
>         if (implName == null) {
>             implName = getImplementationName(cl);
>         }
> ends up calling
>   implName = getImplementationName(cl);
> which ends up calling:
>   InputStream is = cl.getResourceAsStream(SERVICE_RESOURCE_NAME);
> where SERVICE_RESORUCE_NAME = "META-INF/services/commonj.sdo.impl.HelperProvider"
> getResourceAsStream() return null because META-INF/services does not exist in the API bundle.  It exists in the IMPL bundle and since you are using the class loader from the API bundle, it won't work.  
> You can set
> -Dcommonj.sdo.impl.HelperProvider=org.apache.tuscany.sdo.helper.HelperProviderImpl
> to get around the above problem, but as soon as 
>   return (HelperProvider) cl.loadClass(implName).newInstance();
> executes, you get a CalssNotFoundException.  Again, this is because you are trying to load a class outside the bundle with the wrong class loader.
>  tried modifying the API manifest by hand to add
> Eclipse-BuddyPolicy: dependent
> and
> Eclipse-BuddyPolicy: global
> Either of those buddy policies will get past the class loader problem (although I believe this is specific to eclipse and won't work for OSGi in general), but when HelperProvider is initializing, you get the following exception:
> java.lang.ExceptionInInitializerError
> at org.apache.tuscany.sdo.impl.AttributeImpl.<clinit>(AttributeImpl.java:126)
> at org.apache.tuscany.sdo.impl.SDOFactoryImpl.createAttribute(SDOFactoryImpl.java:239)
> at org.apache.tuscany.sdo.impl.ClassImpl.<clinit>(ClassImpl.java:68)
> at org.apache.tuscany.sdo.impl.SDOFactoryImpl$SDOEcoreFactory.createEClass(SDOFactoryImpl.java:76)
> at org.apache.tuscany.sdo.impl.SDOPackageImpl.createEClass(SDOPackageImpl.java:622)
> at org.apache.tuscany.sdo.impl.SDOPackageImpl.createPackageContents(SDOPackageImpl.java:550)
> at org.apache.tuscany.sdo.impl.SDOPackageImpl.init(SDOPackageImpl.java:259)
> at org.apache.tuscany.sdo.SDOPackage.<clinit>(SDOPackage.java:76)
> at sun.misc.Unsafe.ensureClassInitialized(Native Method)
> at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:25)
> at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:122)
> at java.lang.reflect.Field.acquireFieldAccessor(Field.java:917)
> at java.lang.reflect.Field.getFieldAccessor(Field.java:898)
> at java.lang.reflect.Field.get(Field.java:357)
> at org.apache.tuscany.sdo.util.SDOUtil.registerStaticTypes(SDOUtil.java:196)
> at org.apache.tuscany.sdo.model.impl.ModelFactoryImpl.init(ModelFactoryImpl.java:731)
> at org.apache.tuscany.sdo.model.ModelFactory.<clinit>(ModelFactory.java:41)
> at org.apache.tuscany.sdo.helper.TypeHelperImpl.getBuiltInModels(TypeHelperImpl.java:61)
> at org.apache.tuscany.sdo.helper.TypeHelperImpl.<init>(TypeHelperImpl.java:79)
> at org.apache.tuscany.sdo.helper.HelperContextImpl.<init>(HelperContextImpl.java:46)
> at org.apache.tuscany.sdo.helper.HelperProviderImpl.createDefaultHelpers(HelperProviderImpl.java:38)
> at org.apache.tuscany.sdo.rtlib.helper.HelperProviderBase.<init>(HelperProviderBase.java:78)
> at org.apache.tuscany.sdo.helper.HelperProviderImpl.<init>(HelperProviderImpl.java:31)
> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
> at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
> at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
> at java.lang.Class.newInstance0(Class.java:350)
> at java.lang.Class.newInstance(Class.java:303)
> at commonj.sdo.impl.HelperProvider.loadImplementation(HelperProvider.java:157)
> at commonj.sdo.impl.HelperProvider.getInstance(HelperProvider.java:126)
> at commonj.sdo.impl.HelperProvider.<clinit>(HelperProvider.java:69)
> at commonj.sdo.helper.XSDHelper.<clinit>(XSDHelper.java:195)
> at notification.sdo.Application.start(Application.java:23)
> at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:153)
> at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
> at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
> at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
> at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:585)
> at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:497)
> at org.eclipse.equinox.launcher.Main.basicRun(Main.java:436)
> at org.eclipse.equinox.launcher.Main.run(Main.java:1162)
> at org.eclipse.equinox.launcher.Main.main(Main.java:1137)
> Caused by: java.lang.NullPointerException
> at org.apache.tuscany.sdo.impl.AttributeImpl.eStaticClass(AttributeImpl.java:73)
> at org.eclipse.emf.ecore.impl.EObjectImpl.eClass(EObjectImpl.java:224)
> at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eDynamicInverseAdd(BasicEObjectImpl.java:1413)
> at org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.eInverseAdd(EStructuralFeatureImpl.java:514)
> at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eInverseAdd(BasicEObjectImpl.java:1389)
> at org.eclipse.emf.ecore.util.EcoreEList.inverseAdd(EcoreEList.java:282)
> at org.eclipse.emf.common.notify.impl.NotifyingListImpl.addUnique(NotifyingListImpl.java:318)
> at org.eclipse.emf.common.util.BasicEList.add(BasicEList.java:626)
> at org.eclipse.emf.ecore.impl.EPackageImpl.createEAttribute(EPackageImpl.java:745)
> at org.apache.tuscany.sdo.impl.FactoryBase.createDocumentRoot(FactoryBase.java:301)
> at org.apache.tuscany.sdo.impl.FactoryBase.initXSD(FactoryBase.java:156)
> at org.apache.tuscany.sdo.model.internal.impl.InternalFactoryImpl.createXSDMetaData(InternalFactoryImpl.java:211)
> at org.apache.tuscany.sdo.model.internal.impl.InternalFactoryImpl.initializeMetaData(InternalFactoryImpl.java:206)
> at org.apache.tuscany.sdo.model.internal.impl.InternalFactoryImpl.init(InternalFactoryImpl.java:172)
> at org.apache.tuscany.sdo.model.internal.InternalFactory.<clinit>(InternalFactory.java:41)
> ... 47 more

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-dev-help@ws.apache.org


Re: [jira] Commented: (TUSCANY-1293) SDO does not work with OSGi

Posted by be...@agfa.com.
Do you want to go as far as automatically unregistering types when the 
bundle that contains the implementation classes becomes unavailable?


Bert




"Kelvin Goodson (JIRA)" <tu...@ws.apache.org> 
21/11/2007 12:16
Please respond to
tuscany-dev@ws.apache.org


To
tuscany-dev@ws.apache.org
cc

Subject
[jira] Commented: (TUSCANY-1293) SDO does not work with OSGi








    [ 
https://issues.apache.org/jira/browse/TUSCANY-1293?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12544420 
] 

Kelvin Goodson commented on TUSCANY-1293:
-----------------------------------------

There's an offer of help from Rajini to get this fixed that's current on 
the tuscany-dev mailing list.  I'm actively trying to help Rajini with her 
request for info,  but if anyone watching this JRIA wan't to pitch in, 
please do so.
See http://marc.info/?l=tuscany-dev&m=119563682818977&w=2

> SDO does not work with OSGi
> ---------------------------
>
>                 Key: TUSCANY-1293
>                 URL: https://issues.apache.org/jira/browse/TUSCANY-1293
>             Project: Tuscany
>          Issue Type: Bug
>          Components: Java SDO Implementation
>    Affects Versions: Java-SDO-beta1
>         Environment: OS X Eclipse 3.3 M7
>            Reporter: Bryan Hunt
>            Priority: Blocker
>             Fix For: Java-SDO-Next
>
>
> When I execute:
> XSDHelper.INSTANCE.define(schema, null);
> I end up with a NullPointerException.  I've tracked down root cause ...
> The static initializer of the HelperProvider executes this code:
>   provider = getInstance(HelperProvider.class.getClassLoader());
> which ends up calling:
>   HelperProvider provider = loadImplementation(cl, implName);
> implName is null so
>         if (implName == null) {
>             implName = getImplementationName(cl);
>         }
> ends up calling
>   implName = getImplementationName(cl);
> which ends up calling:
>   InputStream is = cl.getResourceAsStream(SERVICE_RESOURCE_NAME);
> where SERVICE_RESORUCE_NAME = 
"META-INF/services/commonj.sdo.impl.HelperProvider"
> getResourceAsStream() return null because META-INF/services does not 
exist in the API bundle.  It exists in the IMPL bundle and since you are 
using the class loader from the API bundle, it won't work. 
> You can set
> 
-Dcommonj.sdo.impl.HelperProvider=org.apache.tuscany.sdo.helper.HelperProviderImpl
> to get around the above problem, but as soon as 
>   return (HelperProvider) cl.loadClass(implName).newInstance();
> executes, you get a CalssNotFoundException.  Again, this is because you 
are trying to load a class outside the bundle with the wrong class loader.
>  tried modifying the API manifest by hand to add
> Eclipse-BuddyPolicy: dependent
> and
> Eclipse-BuddyPolicy: global
> Either of those buddy policies will get past the class loader problem 
(although I believe this is specific to eclipse and won't work for OSGi in 
general), but when HelperProvider is initializing, you get the following 
exception:
> java.lang.ExceptionInInitializerError
> at 
org.apache.tuscany.sdo.impl.AttributeImpl.<clinit>(AttributeImpl.java:126)
> at 
org.apache.tuscany.sdo.impl.SDOFactoryImpl.createAttribute(SDOFactoryImpl.java:239)
> at org.apache.tuscany.sdo.impl.ClassImpl.<clinit>(ClassImpl.java:68)
> at 
org.apache.tuscany.sdo.impl.SDOFactoryImpl$SDOEcoreFactory.createEClass(SDOFactoryImpl.java:76)
> at 
org.apache.tuscany.sdo.impl.SDOPackageImpl.createEClass(SDOPackageImpl.java:622)
> at 
org.apache.tuscany.sdo.impl.SDOPackageImpl.createPackageContents(SDOPackageImpl.java:550)
> at 
org.apache.tuscany.sdo.impl.SDOPackageImpl.init(SDOPackageImpl.java:259)
> at org.apache.tuscany.sdo.SDOPackage.<clinit>(SDOPackage.java:76)
> at sun.misc.Unsafe.ensureClassInitialized(Native Method)
> at 
sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:25)
> at 
sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:122)
> at java.lang.reflect.Field.acquireFieldAccessor(Field.java:917)
> at java.lang.reflect.Field.getFieldAccessor(Field.java:898)
> at java.lang.reflect.Field.get(Field.java:357)
> at 
org.apache.tuscany.sdo.util.SDOUtil.registerStaticTypes(SDOUtil.java:196)
> at 
org.apache.tuscany.sdo.model.impl.ModelFactoryImpl.init(ModelFactoryImpl.java:731)
> at 
org.apache.tuscany.sdo.model.ModelFactory.<clinit>(ModelFactory.java:41)
> at 
org.apache.tuscany.sdo.helper.TypeHelperImpl.getBuiltInModels(TypeHelperImpl.java:61)
> at 
org.apache.tuscany.sdo.helper.TypeHelperImpl.<init>(TypeHelperImpl.java:79)
> at 
org.apache.tuscany.sdo.helper.HelperContextImpl.<init>(HelperContextImpl.java:46)
> at 
org.apache.tuscany.sdo.helper.HelperProviderImpl.createDefaultHelpers(HelperProviderImpl.java:38)
> at 
org.apache.tuscany.sdo.rtlib.helper.HelperProviderBase.<init>(HelperProviderBase.java:78)
> at 
org.apache.tuscany.sdo.helper.HelperProviderImpl.<init>(HelperProviderImpl.java:31)
> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
> at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
> at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
> at java.lang.Class.newInstance0(Class.java:350)
> at java.lang.Class.newInstance(Class.java:303)
> at 
commonj.sdo.impl.HelperProvider.loadImplementation(HelperProvider.java:157)
> at commonj.sdo.impl.HelperProvider.getInstance(HelperProvider.java:126)
> at commonj.sdo.impl.HelperProvider.<clinit>(HelperProvider.java:69)
> at commonj.sdo.helper.XSDHelper.<clinit>(XSDHelper.java:195)
> at notification.sdo.Application.start(Application.java:23)
> at 
org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:153)
> at 
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
> at 
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
> at 
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
> at 
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:585)
> at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:497)
> at org.eclipse.equinox.launcher.Main.basicRun(Main.java:436)
> at org.eclipse.equinox.launcher.Main.run(Main.java:1162)
> at org.eclipse.equinox.launcher.Main.main(Main.java:1137)
> Caused by: java.lang.NullPointerException
> at 
org.apache.tuscany.sdo.impl.AttributeImpl.eStaticClass(AttributeImpl.java:73)
> at org.eclipse.emf.ecore.impl.EObjectImpl.eClass(EObjectImpl.java:224)
> at 
org.eclipse.emf.ecore.impl.BasicEObjectImpl.eDynamicInverseAdd(BasicEObjectImpl.java:1413)
> at 
org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.eInverseAdd(EStructuralFeatureImpl.java:514)
> at 
org.eclipse.emf.ecore.impl.BasicEObjectImpl.eInverseAdd(BasicEObjectImpl.java:1389)
> at org.eclipse.emf.ecore.util.EcoreEList.inverseAdd(EcoreEList.java:282)
> at 
org.eclipse.emf.common.notify.impl.NotifyingListImpl.addUnique(NotifyingListImpl.java:318)
> at org.eclipse.emf.common.util.BasicEList.add(BasicEList.java:626)
> at 
org.eclipse.emf.ecore.impl.EPackageImpl.createEAttribute(EPackageImpl.java:745)
> at 
org.apache.tuscany.sdo.impl.FactoryBase.createDocumentRoot(FactoryBase.java:301)
> at org.apache.tuscany.sdo.impl.FactoryBase.initXSD(FactoryBase.java:156)
> at 
org.apache.tuscany.sdo.model.internal.impl.InternalFactoryImpl.createXSDMetaData(InternalFactoryImpl.java:211)
> at 
org.apache.tuscany.sdo.model.internal.impl.InternalFactoryImpl.initializeMetaData(InternalFactoryImpl.java:206)
> at 
org.apache.tuscany.sdo.model.internal.impl.InternalFactoryImpl.init(InternalFactoryImpl.java:172)
> at 
org.apache.tuscany.sdo.model.internal.InternalFactory.<clinit>(InternalFactory.java:41)
> ... 47 more

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-dev-help@ws.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-dev-help@ws.apache.org