Since Cayenne relies on thread ClassLoader to load classes
dynamically, you may try to fake that under OSGi. BTW, what's the
"standard" way to get a contextual ClassLoader in the OSGi environment
- we may add that as a strategy to Cayenne?
Anyways, assuming you know the answer to the above:
ClassLoader bundleCL = ...
ClassLoader oldCL = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(bundleCL);
// init cayenne...
...
Thread.currentThread().setContextClassLoader(oldCL);
Andrus
On Sep 4, 2009, at 4:18 PM, Cristiano Ghersi wrote:
> This is the stackTrace:
>
> ****************************************************************************
> *********************************
> Sep 4, 2009 3:17:14 PM org.apache.cayenne.conf.RuntimeLoadDelegate
> startedLoading
> INFO: started configuration loading.
> Sep 4, 2009 3:17:14 PM org.apache.cayenne.conf.RuntimeLoadDelegate
> shouldLoadDataDomain
> INFO: loaded domain: PacketDomain
> Sep 4, 2009 3:17:14 PM org.apache.cayenne.conf.RuntimeLoadDelegate
> loadDataMap
> INFO: loaded <map name='PacketMap' location='PacketMap.map.xml'>.
> Sep 4, 2009 3:17:14 PM org.apache.cayenne.conf.RuntimeLoadDelegate
> shouldLoadDataNode
> INFO: loading <node name='PacketNode'
> datasource='PacketNode.driver.xml'
> factory='org.apache.cayenne.conf.DriverDataSourceFactory'
> schema-update-
> strategy='org.apache.cayenne.access.dbsync.SkipSchemaUpdateStr
> ategy'>.
> java.lang.ClassCastException:
> org.apache.cayenne.access.dbsync.SkipSchemaUpdateStrategy cannot be
> cast to
> org.apache.cayenne.access.dbsync.SchemaUpdateStrategy
> at
> org
> .apache
> .cayenne.conf.RuntimeLoadDelegate.shouldLoadDataNode(RuntimeLoadDe
> legate.java:303)
> at
> org.apache.cayenne.conf.ConfigLoader
> $NodeHandler.init(ConfigLoader.java:345)
> at
> org.apache.cayenne.conf.ConfigLoader
> $DomainHandler.startElement(ConfigLoader
> .java:222)
> at
> com
> .sun
> .org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Ab
> stractSAXParser.java:501)
> at
> com
> .sun
> .org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartEl
> ement(XMLNSDocumentScannerImpl.java:400)
> at
> com
> .sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl
> $Fragm
> entContentDriver.next(XMLDocumentFragmentScannerImpl.java:2747)
> at
> com
> .sun
> .org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocum
> entScannerImpl.java:648)
> at
> com
> .sun
> .org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSD
> ocumentScannerImpl.java:140)
> at
> com
> .sun
> .org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanD
> ocument(XMLDocumentFragmentScannerImpl.java:510)
> at
> com
> .sun
> .org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Con
> figuration.java:807)
> at
> com
> .sun
> .org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Con
> figuration.java:737)
> at
> com
> .sun
> .org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:10
> 7)
> at
> com
> .sun
> .org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractS
> AXParser.java:1205)
> at
> com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl
> $JAXPSAXParser.parse(SA
> XParserImpl.java:522)
> at
> org.apache.cayenne.conf.ConfigLoader.loadDomains(ConfigLoader.java:78)
> at
> org
> .apache
> .cayenne.conf.DefaultConfiguration.initialize(DefaultConfiguration
> .java:152)
> at dbManager.DbManager.<init>(DbManager.java:43)
> at zzz_bundledbquery.DBQueryStarter.start(DBQueryStarter.java:28)
> at
> org.eclipse.osgi.framework.internal.core.BundleContextImpl
> $1.run(BundleConte
> xtImpl.java:782)
> at java.security.AccessController.doPrivileged(Native Method)
> at
> org
> .eclipse
> .osgi.framework.internal.core.BundleContextImpl.startActivator(Bu
> ndleContextImpl.java:773)
> at
> org
> .eclipse
> .osgi.framework.internal.core.BundleContextImpl.start(BundleConte
> xtImpl.java:754)
> at
> org
> .eclipse
> .osgi.framework.internal.core.BundleHost.startWorker(BundleHost.j
> ava:352)
> at
> org
> .eclipse
> .osgi.framework.internal.core.AbstractBundle.resume(AbstractBundl
> e.java:370)
> at
> org
> .eclipse
> .osgi.framework.internal.core.Framework.resumeBundle(Framework.ja
> va:1068)
> at
> org
> .eclipse
> .osgi.framework.internal.core.StartLevelManager.resumeBundles(Sta
> rtLevelManager.java:557)
> at
> org
> .eclipse
> .osgi.framework.internal.core.StartLevelManager.incFWSL(StartLeve
> lManager.java:464)
> at
> org
> .eclipse
> .osgi.framework.internal.core.StartLevelManager.doSetStartLevel(S
> tartLevelManager.java:248)
> at
> org
> .eclipse
> .osgi.framework.internal.core.StartLevelManager.dispatchEvent(Sta
> rtLevelManager.java:445)
> at
> org
> .eclipse
> .osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.
> java:220)
> at
> org.eclipse.osgi.framework.eventmgr.EventManager
> $EventThread.run(EventManage
> r.java:330)
> ****************************************************************************
> *********************************
>
> Thanks
> Cristiano
>
> -----Messaggio originale-----
> Da: Andrus Adamchik [mailto:andru..bjectstyle.org]
> Inviato: venerd́ 4 settembre 2009 15.10
> A: use..ayenne.apache.org
> Oggetto: Re: R: Error getting DataContext
>
> Hmm... Could you actually post the new stack trace? For one thing it
> should not contain this anymore:
>
> at
> org
> .apache
> .cayenne.conf.Configuration.initializeSharedConfiguration(Configur
> ation.java:168)
>
> Andrus
>
> On Sep 4, 2009, at 3:49 PM, Cristiano Ghersi wrote:
>> Hi Andrus,
>>
>>
>>
>> Thank you for your fast reply!
>>
>>
>>
>> I tried with the following as you have proposed:
>>
>>
>>
>> String pathWithConfigurationFiles = System.getProperty("user.dir") +
>> "/config/cayenne";
>>
>> config = new FileConfiguration("cayenne.xml");
>>
>> ((FileConfiguration) config).addFilesystemPath(new
>> File(pathWithConfigurationFiles));
>>
>> config.initialize();
>>
>> context = config.getDomain().createDataContext();
>>
>>
>>
>> Unfortunately this code doesn't solve the issue, still present with
>> the same
>> StackTrace.
>>
>>
>>
>> Other ideas?
>>
>>
>>
>> Thank you very much for the help!
>>
>> Cristiano
>>
>>
>>
>>
> ****************************************************************************
>> *********+
>>
>>
>>
>>
>>
>> Hi there,
>>
>>
>>
>> Looks like a static Configuration singleton is causing a problem.
>>
>> Could you just keep 2 Configurations separate and avoid using
>>
>> 'initializeSharedConfiguration'. E.g.:
>>
>>
>>
>> Configuration conf = ...;
>>
>> conf.initialize();
>>
>> // store conf reference for later use
>>
>>
>>
>> ...
>>
>> // use a stored conf to create the context:
>>
>> DataContext context = conf.getDomain().createDataContext();
>>
>>
>>
>> Hope this helps.
>>
>> Andrus
>>
>>
>>
>>
>>
>> On Sep 3, 2009, at 6:56 PM, Cristiano Ghersi wrote:
>>
>>
>>
>> Good morning,
>>
>>
>>
>> I've got a problem using the static method
>> DataContext.createDataContext();
>>
>>
>>
>> My environment is the following: I've got a library (let's call it
>> "DataLayer") which use cayenne for the communication towards a
>> single DB.
>>
>> In this library a class called DbManager create a DataContext in its
>> constructor using this piece of code:
>>
>>
>>
>> try {
>>
>> String pathWithConfigurationFiles = "/home/matteo/config/cayenne";
>>
>> org.apache.cayenne.conf.Configuration conf = new
>> FileConfiguration("cayenne.xml");
>>
>>
>>
>> // Cayenne configuration files can be found at this location
>>
>> ((FileConfiguration) conf).addFilesystemPath(new
>> File(pathWithConfigurationFiles));
>>
>> org
>> .apache
>> .cayenne.conf.Configuration.initializeSharedConfiguration(conf);
>>
>> } catch (Exception e){
>>
>> e.printStackTrace();
>>
>> }
>>
>>
>>
>> // Create a new one
>>
>> context = DataContext.createDataContext();
>>
>>
>>
>>
>>
>> This library is used by two different bundles (OSGi Framework);
>> let's call
>> these bundles Bundle1 and Bundle2.
>>
>>
>>
>> If I use only one of these bundles all goes perfectly well, but if I
>> try to
>> start Bundle2 when Bundle1 is already started, the following error
>> appears
>> and Bundle2 is stopped:
>>
>>
>>
>> INFO: loading <node name='PacketNode'
>> datasource='PacketNode.driver.xml'
>> factory='org.apache.cayenne.conf.DriverDataSourceFactory'
>> schema-update-
>> strategy='org.apache.cayenne.access.dbsync.SkipSchemaUpdateStr
>> ategy'>.
>>
>> org.apache.cayenne.ConfigurationException: [v.3.0M6 May 18 2009
>> 07:49:46]
>> Error during Configuration initialization.
>> org.apache.cayenne.access.dbsync.SkipSchemaUpdateStrategy cannot be
>> cast to
>> org.apache.cayenne.access.dbsync.SchemaUpdateStrategy
>>
>> at
>> org
>> .apache
>> .cayenne.conf.Configuration.initializeSharedConfiguration(Configur
>> ation.java:168)
>>
>> at dbManager.DbManager.<init>(DbManager.java:58)
>>
>> at
>> zzz_bundledbquery.DBQueryStarter.start(DBQueryStarter.java:20)
>>
>> at
>> org.eclipse.osgi.framework.internal.core.BundleContextImpl
>> $1.run(BundleConte
>> xtImpl.java:782)
>>
>> at java.security.AccessController.doPrivileged(Native
>> Method)
>>
>> at
>> org
>> .eclipse
>> .osgi.framework.internal.core.BundleContextImpl.startActivator(Bu
>> ndleContextImpl.java:773)
>>
>> at
>> org
>> .eclipse
>> .osgi.framework.internal.core.BundleContextImpl.start(BundleConte
>> xtImpl.java:754)
>>
>> at
>> org
>> .eclipse
>> .osgi.framework.internal.core.BundleHost.startWorker(BundleHost.j
>> ava:352)
>>
>> at
>> org
>> .eclipse
>> .osgi.framework.internal.core.AbstractBundle.start(AbstractBundle
>> .java:280)
>>
>> at
>> org
>> .eclipse
>> .osgi.framework.internal.core.AbstractBundle.start(AbstractBundle
>> .java:272)
>>
>> at
>> org
>> .eclipse
>> .osgi.framework.internal.core.FrameworkCommandProvider._start(Fra
>> meworkCommandProvider.java:253)
>>
>> 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:597)
>>
>> at
>> org
>> .eclipse
>> .osgi.framework.internal.core.FrameworkCommandInterpreter.execute
>> (FrameworkCommandInterpreter.java:155)
>>
>> at
>> org
>> .eclipse
>> .osgi.framework.internal.core.FrameworkConsole.docommand(Framewor
>> kConsole.java:303)
>>
>> at
>> org
>> .eclipse
>> .osgi.framework.internal.core.FrameworkConsole.console(FrameworkC
>> onsole.java:288)
>>
>> at
>> org
>> .eclipse
>> .osgi.framework.internal.core.FrameworkConsole.run(FrameworkConso
>> le.java:224)
>>
>> at java.lang.Thread.run(Thread.java:619)
>>
>> Caused by: java.lang.ClassCastException:
>> org.apache.cayenne.access.dbsync.SkipSchemaUpdateStrategy cannot be
>> cast to
>> org.apache.cayenne.access.dbsync.SchemaUpdateStrategy
>>
>> at
>> org
>> .apache
>> .cayenne.conf.RuntimeLoadDelegate.shouldLoadDataNode(RuntimeLoadDe
>> legate.java:303)
>>
>> at
>> org.apache.cayenne.conf.ConfigLoader
>> $NodeHandler.init(ConfigLoader.java:345)
>>
>> at
>> org.apache.cayenne.conf.ConfigLoader
>> $DomainHandler.startElement(ConfigLoader
>> .java:222)
>>
>> at
>> com
>> .sun
>> .org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Ab
>> stractSAXParser.java:501)
>>
>> at
>> com
>> .sun
>> .org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartEl
>> ement(XMLNSDocumentScannerImpl.java:400)
>>
>> at
>> com
>> .sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl
>> $Fragm
>> entContentDriver.next(XMLDocumentFragmentScannerImpl.java:2747)
>>
>> at
>> com
>> .sun
>> .org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocum
>> entScannerImpl.java:648)
>>
>> at
>> com
>> .sun
>> .org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSD
>> ocumentScannerImpl.java:140)
>>
>> at
>> com
>> .sun
>> .org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanD
>> ocument(XMLDocumentFragmentScannerImpl.java:510)
>>
>> at
>> com
>> .sun
>> .org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Con
>> figuration.java:807)
>>
>> at
>> com
>> .sun
>> .org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Con
>> figuration.java:737)
>>
>> at
>> com
>> .sun
>> .org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:10
>> 7)
>>
>> at
>> com
>> .sun
>> .org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractS
>> AXParser.java:1205)
>>
>> at
>> com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl
>> $JAXPSAXParser.parse(SA
>> XParserImpl.java:522)
>>
>> at
>> org.apache.cayenne.conf.ConfigLoader.loadDomains(ConfigLoader.java:
>> 78)
>>
>> at
>> org
>> .apache
>> .cayenne.conf.DefaultConfiguration.initialize(DefaultConfiguration
>> .java:152)
>>
>> at
>> org
>> .apache
>> .cayenne.conf.Configuration.initializeSharedConfiguration(Configur
>> ation.java:159)
>>
>> ... 19 more
>>
>>
>>
>>
>>
>> What I'm missing?
>>
>>
>>
>> Thank you very much for the help!!
>>
>>
>>
>> Cristiano Ghersi
>>
>>
>>
>
> Nessun virus nel messaggio in arrivo.
> Controllato da AVG - www.avg.com
> Versione: 8.5.409 / Database dei virus: 270.13.76/2345 - Data di
> rilascio:
> 09/04/09 05:51:00
>
>
This archive was generated by hypermail 2.0.0 : Fri Sep 04 2009 - 09:39:27 EDT