Hi,

if you have such a name during JNDI lookup osgi:service/**
javax.sql.DataSource/(osgi.**jndi.service.name<http://osgi.jndi.service.name/>
=osgi:**service/javax.sql.DataSource/(**osgi.jndi.service.name<http://osgi.jndi.service.name/>
=ch.**eugster.herakles.persistence.**data.source) you will have the
necessity to use OSGI based JNDI provider.

If you are in a JEE container I am not sure it is possible. In simple J2SE
aries-jndi does that. Did you drop the aries jndi bundle also into your
OSGI container? As it has to start before your persistence unit is loaded
the start level of jndi bundle should be low.

Regards,
Balazs Zsoldos




On Wed, Jun 20, 2012 at 9:16 PM, Christian Eugster <
[email protected]> wrote:

>
> Hi,
>
> I try to build a Java SE application based on OSGi 4.2(+). I have read a
> lot of blogs, documentation, tutorials but it seems, that (almost) all
> of them point to server side contexts.
>
> I have the aries + eclipselink bundles in my classpath. I added a bundle
> that has dependencies to the eclipselink bundles and the exposes a
> service providing the PersistenceProvider. So to say, it is my jpa
> persistence provider bundle.
>
> Further bundles provide each one or several DataSourceFactories (for
> each database platform, connection-type respective (e.g. mysql,
> derby.client, derby.embedded, and so on).
>
> As third part there is a persistence bundle, containing the
> Meta-Persistence header in MANIFEST.MF and a persistence.xml and several
> entity classes. The same bundle registers a service exposing a
> datasource obtained from on of the DataSourceFactory services (e.g.
> mysql) containing the connection information for database access.
>
> These bundles are started at start-level 3 and auto-start set to true.
> The aries jpa-container bundle is started on level 2 with auto-start =
> true.
>
> For Testing I added a fragment bundle to the persistence bundle that
> tracks EntityManagerFactory Service. This service runs ok but obtaining
> an EntityManager from the EntityManagerFactory results in an exception
> (see the following stack trace). Because I do not know JEE technology, I
> do not understand, where the problem lies. Can anyone give me a hint?
> Thank you
>
> Christian
>
> persistence.xml:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <persistence version="2.0" 
> xmlns="http://java.sun.com/**xml/ns/persistence<http://java.sun.com/xml/ns/persistence>"
> xmlns:xsi="http://www.w3.org/**2001/XMLSchema-instance<http://www.w3.org/2001/XMLSchema-instance>"
> xsi:schemaLocation="http://**java.sun.com/xml/ns/**persistence<http://java.sun.com/xml/ns/persistence>
> http://java.sun.com/xml/ns/**persistence/persistence_2_0.**xsd<http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd>
> ">
>        <persistence-unit name="herakles" transaction-type="JTA">
>                <provider>org.eclipse.**persistence.jpa.**
> PersistenceProvider</provider>
>
>                <jta-data-source>osgi:service/**javax.sql.DataSource/(osgi.
> **jndi.service.name <http://osgi.jndi.service.name>=osgi:**
> service/javax.sql.DataSource/(**osgi.jndi.service.name<http://osgi.jndi.service.name>
> =ch.**eugster.herakles.persistence.**data.source)</jta-data-source>
>
>                <mapping-file>META-INF/orm.**xml</mapping-file>
>
>                <class>ch.eugster.herakles.**persistence.model.**
> AbstractEntity</class>
>        <class>ch.eugster.herakles.**persistence.model.Tectonics</**class>
>                <class>ch.eugster.herakles.**persistence.model.**
> TectonicsLevel</class>
>                <class>ch.eugster.herakles.**persistence.model.**
> TectonicsLevelLink</class>
>                <class>ch.eugster.persistence.**model.User</class>
>                <class>ch.eugster.persistence.**model.UserProperty</class>
>
>        <exclude-unlisted-classes>**true</exclude-unlisted-**classes>
>                <properties>
>  <!--           <property name="javax.persistence.jdbc.**driver"
> value="com.mysql.jdbc.Driver"/**>
>            <property name="javax.persistence.jdbc.**url"
> value="jdbc:mysql://localhost:**3306/test"/>
>            <property name="javax.persistence.jdbc.**user" value="root"/>
>            <property name="javax.persistence.jdbc.**password" value=""/>
>            <property name="eclipselink.ddl-**generation"
> value="drop-and-create-tables"**/> -->
>            <property name="eclipselink.logging.**level" value="FINEST"/>
>                </properties>
>        </persistence-unit>
> </persistence>
>
> stack-trace:
>
>  20.06.2012 20:46:30 org.slf4j.impl.**JCLLoggerAdapter error
> SCHWERWIEGEND: No JTA datasource could be located using the JNDI name
> osgi:service/javax.sql.**DataSource/(osgi.jndi.service.**name<http://osgi.jndi.service.name>
> =osgi:service/javax.sql.**DataSource/(osgi.jndi.service.**name<http://osgi.jndi.service.name>
> =ch.eugster.herakles.**persistence.data.source)
> javax.naming.**NoInitialContextException: Need to specify class name in
> environment or system property, or as an applet parameter, or in an
> application resource file:  java.naming.factory.initial
>    at
> javax.naming.spi.**NamingManager.**getInitialContext(**
> NamingManager.java:645)
>    at
> javax.naming.InitialContext.**getDefaultInitCtx(**InitialContext.java:288)
>    at
> javax.naming.InitialContext.**getURLOrDefaultInitCtx(**
> InitialContext.java:325)
>    at javax.naming.InitialContext.**lookup(InitialContext.java:**392)
>    at
> org.apache.aries.jpa.**container.unit.impl.**
> DelayedLookupDataSource.getDs(**DelayedLookupDataSource.java:**55)
>    at
> org.apache.aries.jpa.**container.unit.impl.**DelayedLookupDataSource.**
> getConnection(**DelayedLookupDataSource.java:**74)
>    at
> org.eclipse.persistence.**sessions.JNDIConnector.**
> connect(JNDIConnector.java:**123)
>    at
> org.eclipse.persistence.**sessions.DatasourceLogin.**connectToDatasource(*
> *DatasourceLogin.java:162)
>    at
> org.eclipse.persistence.**internal.sessions.**DatabaseSessionImpl.**
> loginAndDetectDatasource(**DatabaseSessionImpl.java:584)
>    at
> org.eclipse.persistence.**internal.jpa.**EntityManagerFactoryProvider.**
> login(**EntityManagerFactoryProvider.**java:206)
>    at
> org.eclipse.persistence.**internal.jpa.**EntityManagerSetupImpl.deploy(**
> EntityManagerSetupImpl.java:**488)
>    at
> org.eclipse.persistence.**internal.jpa.**EntityManagerFactoryDelegate.**
> getDatabaseSession(**EntityManagerFactoryDelegate.**java:188)
>    at
> org.eclipse.persistence.**internal.jpa.**EntityManagerFactoryDelegate.**
> createEntityManagerImpl(**EntityManagerFactoryDelegate.**java:277)
>    at
> org.eclipse.persistence.**internal.jpa.**EntityManagerFactoryImpl.**
> createEntityManagerImpl(**EntityManagerFactoryImpl.java:**294)
>    at
> org.eclipse.persistence.**internal.jpa.**EntityManagerFactoryImpl.**
> createEntityManager(**EntityManagerFactoryImpl.java:**272)
>    at
> org.apache.aries.jpa.**container.impl.**CountingEntityManagerFactory.**
> createEntityManager(**CountingEntityManagerFactory.**java:64)
>    at
> ch.eugster.herakles.**persistence.test.**PersistenceTestCase.**
> testEntityManager(**PersistenceTestCase.java:53)
>    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.junit.runners.model.**FrameworkMethod$1.**runReflectiveCall(**
> FrameworkMethod.java:44)
>    at
> org.junit.internal.runners.**model.ReflectiveCallable.run(**
> ReflectiveCallable.java:15)
>    at
> org.junit.runners.model.**FrameworkMethod.**invokeExplosively(**
> FrameworkMethod.java:41)
>    at
> org.junit.internal.runners.**statements.InvokeMethod.**
> evaluate(InvokeMethod.java:20)
>    at
> org.junit.internal.runners.**statements.RunBefores.**
> evaluate(RunBefores.java:28)
>    at
> org.junit.internal.runners.**statements.RunAfters.evaluate(**
> RunAfters.java:31)
>    at
> org.junit.runners.**BlockJUnit4ClassRunner.**runNotIgnored(**
> BlockJUnit4ClassRunner.java:**79)
>    at
> org.junit.runners.**BlockJUnit4ClassRunner.**runChild(**
> BlockJUnit4ClassRunner.java:**71)
>    at
> org.junit.runners.**BlockJUnit4ClassRunner.**runChild(**
> BlockJUnit4ClassRunner.java:**49)
>    at org.junit.runners.**ParentRunner$3.run(**ParentRunner.java:193)
>    at org.junit.runners.**ParentRunner$1.schedule(**ParentRunner.java:52)
>    at org.junit.runners.**ParentRunner.runChildren(**
> ParentRunner.java:191)
>    at org.junit.runners.**ParentRunner.access$000(**ParentRunner.java:42)
>    at org.junit.runners.**ParentRunner$2.evaluate(**ParentRunner.java:184)
>    at org.junit.runners.**ParentRunner.run(ParentRunner.**java:236)
>    at
> org.eclipse.jdt.internal.**junit4.runner.**JUnit4TestReference.run(**
> JUnit4TestReference.java:50)
>    at
> org.eclipse.jdt.internal.**junit.runner.TestExecution.**
> run(TestExecution.java:38)
>    at
> org.eclipse.jdt.internal.**junit.runner.RemoteTestRunner.**
> runTests(RemoteTestRunner.**java:467)
>    at
> org.eclipse.jdt.internal.**junit.runner.RemoteTestRunner.**
> runTests(RemoteTestRunner.**java:683)
>    at
> org.eclipse.jdt.internal.**junit.runner.RemoteTestRunner.**
> run(RemoteTestRunner.java:390)
>    at
> org.eclipse.pde.internal.**junit.runtime.**RemotePluginTestRunner.main(**
> RemotePluginTestRunner.java:**62)
>    at
> org.eclipse.pde.internal.**junit.runtime.**CoreTestApplication.run(**
> CoreTestApplication.java:23)
>    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.equinox.internal.**app.EclipseAppContainer.**
> callMethodWithException(**EclipseAppContainer.java:587)
>    at
> org.eclipse.equinox.internal.**app.EclipseAppHandle.run(**
> EclipseAppHandle.java:198)
>    at
> org.eclipse.core.runtime.**internal.adaptor.**EclipseAppLauncher.**
> runApplication(**EclipseAppLauncher.java:110)
>    at
> org.eclipse.core.runtime.**internal.adaptor.**EclipseAppLauncher.start(**
> EclipseAppLauncher.java:79)
>    at
> org.eclipse.core.runtime.**adaptor.EclipseStarter.run(**
> EclipseStarter.java:353)
>    at
> org.eclipse.core.runtime.**adaptor.EclipseStarter.run(**
> EclipseStarter.java:180)
>    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.equinox.launcher.**Main.invokeFramework(Main.**java:629)
>    at org.eclipse.equinox.launcher.**Main.basicRun(Main.java:584)
>    at org.eclipse.equinox.launcher.**Main.run(Main.java:1438)
>    at org.eclipse.equinox.launcher.**Main.main(Main.java:1414)
> [EL Severe]: 2012-06-20
> 20:46:30.62--ServerSession(**374527572)--Thread(Thread[**
> Thread-1,5,main])--java.lang.**RuntimeException:
> The DataSource
> osgi:service/javax.sql.**DataSource/(osgi.jndi.service.**name<http://osgi.jndi.service.name>
> =osgi:service/javax.sql.**DataSource/(osgi.jndi.service.**name<http://osgi.jndi.service.name>
> =ch.eugster.herakles.**persistence.data.source)
> could not be used.
>    at
> org.apache.aries.jpa.**container.unit.impl.**
> DelayedLookupDataSource.getDs(**DelayedLookupDataSource.java:**59)
>    at
> org.apache.aries.jpa.**container.unit.impl.**DelayedLookupDataSource.**
> getConnection(**DelayedLookupDataSource.java:**74)
>    at
> org.eclipse.persistence.**sessions.JNDIConnector.**
> connect(JNDIConnector.java:**123)
>    at
> org.eclipse.persistence.**sessions.DatasourceLogin.**connectToDatasource(*
> *DatasourceLogin.java:162)
>    at
> org.eclipse.persistence.**internal.sessions.**DatabaseSessionImpl.**
> loginAndDetectDatasource(**DatabaseSessionImpl.java:584)
>    at
> org.eclipse.persistence.**internal.jpa.**EntityManagerFactoryProvider.**
> login(**EntityManagerFactoryProvider.**java:206)
>    at
> org.eclipse.persistence.**internal.jpa.**EntityManagerSetupImpl.deploy(**
> EntityManagerSetupImpl.java:**488)
>    at
> org.eclipse.persistence.**internal.jpa.**EntityManagerFactoryDelegate.**
> getDatabaseSession(**EntityManagerFactoryDelegate.**java:188)
>    at
> org.eclipse.persistence.**internal.jpa.**EntityManagerFactoryDelegate.**
> createEntityManagerImpl(**EntityManagerFactoryDelegate.**java:277)
>    at
> org.eclipse.persistence.**internal.jpa.**EntityManagerFactoryImpl.**
> createEntityManagerImpl(**EntityManagerFactoryImpl.java:**294)
>    at
> org.eclipse.persistence.**internal.jpa.**EntityManagerFactoryImpl.**
> createEntityManager(**EntityManagerFactoryImpl.java:**272)
>    at
> org.apache.aries.jpa.**container.impl.**CountingEntityManagerFactory.**
> createEntityManager(**CountingEntityManagerFactory.**java:64)
>    at
> ch.eugster.herakles.**persistence.test.**PersistenceTestCase.**
> testEntityManager(**PersistenceTestCase.java:53)
>    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.junit.runners.model.**FrameworkMethod$1.**runReflectiveCall(**
> FrameworkMethod.java:44)
>    at
> org.junit.internal.runners.**model.ReflectiveCallable.run(**
> ReflectiveCallable.java:15)
>    at
> org.junit.runners.model.**FrameworkMethod.**invokeExplosively(**
> FrameworkMethod.java:41)
>    at
> org.junit.internal.runners.**statements.InvokeMethod.**
> evaluate(InvokeMethod.java:20)
>    at
> org.junit.internal.runners.**statements.RunBefores.**
> evaluate(RunBefores.java:28)
>    at
> org.junit.internal.runners.**statements.RunAfters.evaluate(**
> RunAfters.java:31)
>    at
> org.junit.runners.**BlockJUnit4ClassRunner.**runNotIgnored(**
> BlockJUnit4ClassRunner.java:**79)
>    at
> org.junit.runners.**BlockJUnit4ClassRunner.**runChild(**
> BlockJUnit4ClassRunner.java:**71)
>    at
> org.junit.runners.**BlockJUnit4ClassRunner.**runChild(**
> BlockJUnit4ClassRunner.java:**49)
>    at org.junit.runners.**ParentRunner$3.run(**ParentRunner.java:193)
>    at org.junit.runners.**ParentRunner$1.schedule(**ParentRunner.java:52)
>    at org.junit.runners.**ParentRunner.runChildren(**
> ParentRunner.java:191)
>    at org.junit.runners.**ParentRunner.access$000(**ParentRunner.java:42)
>    at org.junit.runners.**ParentRunner$2.evaluate(**ParentRunner.java:184)
>    at org.junit.runners.**ParentRunner.run(ParentRunner.**java:236)
>    at
> org.eclipse.jdt.internal.**junit4.runner.**JUnit4TestReference.run(**
> JUnit4TestReference.java:50)
>    at
> org.eclipse.jdt.internal.**junit.runner.TestExecution.**
> run(TestExecution.java:38)
>    at
> org.eclipse.jdt.internal.**junit.runner.RemoteTestRunner.**
> runTests(RemoteTestRunner.**java:467)
>    at
> org.eclipse.jdt.internal.**junit.runner.RemoteTestRunner.**
> runTests(RemoteTestRunner.**java:683)
>    at
> org.eclipse.jdt.internal.**junit.runner.RemoteTestRunner.**
> run(RemoteTestRunner.java:390)
>    at
> org.eclipse.pde.internal.**junit.runtime.**RemotePluginTestRunner.main(**
> RemotePluginTestRunner.java:**62)
>    at
> org.eclipse.pde.internal.**junit.runtime.**CoreTestApplication.run(**
> CoreTestApplication.java:23)
>    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.equinox.internal.**app.EclipseAppContainer.**
> callMethodWithException(**EclipseAppContainer.java:587)
>    at
> org.eclipse.equinox.internal.**app.EclipseAppHandle.run(**
> EclipseAppHandle.java:198)
>    at
> org.eclipse.core.runtime.**internal.adaptor.**EclipseAppLauncher.**
> runApplication(**EclipseAppLauncher.java:110)
>    at
> org.eclipse.core.runtime.**internal.adaptor.**EclipseAppLauncher.start(**
> EclipseAppLauncher.java:79)
>    at
> org.eclipse.core.runtime.**adaptor.EclipseStarter.run(**
> EclipseStarter.java:353)
>    at
> org.eclipse.core.runtime.**adaptor.EclipseStarter.run(**
> EclipseStarter.java:180)
>    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.equinox.launcher.**Main.invokeFramework(Main.**java:629)
>    at org.eclipse.equinox.launcher.**Main.basicRun(Main.java:584)
>    at org.eclipse.equinox.launcher.**Main.run(Main.java:1438)
>    at org.eclipse.equinox.launcher.**Main.main(Main.java:1414)
> Caused by: javax.naming.**NoInitialContextException: Need to specify class
> name in environment or system property, or as an applet parameter, or in
> an application resource file: java.naming.factory.initial
>    at
> javax.naming.spi.**NamingManager.**getInitialContext(**
> NamingManager.java:645)
>    at
> javax.naming.InitialContext.**getDefaultInitCtx(**InitialContext.java:288)
>    at
> javax.naming.InitialContext.**getURLOrDefaultInitCtx(**
> InitialContext.java:325)
>    at javax.naming.InitialContext.**lookup(InitialContext.java:**392)
>    at
> org.apache.aries.jpa.**container.unit.impl.**
> DelayedLookupDataSource.getDs(**DelayedLookupDataSource.java:**55)
>    ... 56 more
>
>
>
>
>
>

Reply via email to