Hi,
What is the best way to implement Eclipselink into OSGi?
As far as I know there are two ways to implement it: using eclipse
Gemini or using the org.eclipse.persistence.jpa.osgi bundle.
However, we use PostgreSQL as DBMS and unfortunately PostgreSQL doesn't
provide us with a OSGi compatible JDBC driver (org.osgi.service.jdbc for
example). We tried to modify the driver so it works with the
org.osgi.service.jdbc API but we haven't come far.
If we use the org.eclipse.persistence.jpa.osgi bundle than we can't get
the PostgreSQL driver to work because of an exception which tells us
that the driver is not found. Which actually makes sense because the
PostgreSQL driver doesn't register itself anywhere but at the
org.osgi.service.jdbc API and while I was looking into the Apache Derby
code I found out that Derby actually uses MBeans to register itself..
The other possibility using eclipse gemini should work with the
org.osgi.service.jdbc API but we get another annoying exception on which
I have no idea how to fix. If we were to choose between the two
possiblities than we'd definitely prefer the latter one because it uses
an OSGi API instead of JMX.
My questions now actually are:
- Are these two options the only options I have to integrate
Eclipselink into OSGi
- Is it true that the first option uses JMX or did I misunderstood?
- Is it true that eclipse gemini is based on the org.osgi.service.jdbc
API?
- What should I do to integrate Eclipselink into my OSGi container?
- Why does the exception occur with the latter option?
My log overview on the latter option:
Listening for transport dt_socket at address: 8000
DEBUG: EventAdmin: org.apache.felix.eventadmin.CacheSize=30
DEBUG: EventAdmin: org.apache.felix.eventadmin.ThreadPoolSize=20
DEBUG: EventAdmin: org.apache.felix.eventadmin.Timeout=5000
DEBUG: EventAdmin: org.apache.felix.eventadmin.RequireTopic=true
DEBUG: EventAdmin: org.apache.felix.eventadmin.CacheSize=30
DEBUG: EventAdmin: org.apache.felix.eventadmin.ThreadPoolSize=20
DEBUG: EventAdmin: org.apache.felix.eventadmin.Timeout=5000
DEBUG: EventAdmin: org.apache.felix.eventadmin.RequireTopic=true
_______________
Welcome to Apache Felix Gogo
g! Gemini DBAccess Derby starting
Gemini javax.persistence active
Sep 27, 2010 3:51:00 AM org.eclipse.gemini.naming.Activator start
INFO: Initializing Gemini Naming Factory Manager Bundle
Sep 27, 2010 3:51:00 AM org.eclipse.gemini.naming.Activator start
INFO: Installing Static Singletons
Sep 27, 2010 3:51:00 AM org.eclipse.gemini.naming.Activator start
INFO: Registering URL Context Factory for 'osgi' URL scheme
Sep 27, 2010 3:51:00 AM org.eclipse.gemini.naming.Activator start
INFO: Registering Default Runtime Builder for JRE-provided factories
Sep 27, 2010 3:51:00 AM org.eclipse.gemini.naming.Activator start
INFO: Registering ContextManager service
Sep 27, 2010 3:51:00 AM org.eclipse.gemini.naming.Activator start
INFO: Registering ProviderAdmin service
lb
START LEVEL 1
ID|State |Level|Name
0|Active | 0|System Bundle (3.0.1)
1|Active | 1|Apache Derby 10.6 (10.6.1000000.938214)
2|Active | 1|EclipseLink JPA Canonical Model Processing
Service (2.1.1.v20100817-r8050)
3|Active | 1|Java Persistence API 2.0 (2.0.1.v201006031150)
4|Active | 1|Apache Derby JDBC (10.5.1.1)
5|Active | 1|Apache Felix Bundle Repository (1.6.2)
6|Active | 1|Apache Felix Configuration Admin Service (1.2.4)
7|Active | 1|Apache Felix EventAdmin (1.2.2)
8|Active | 1|Apache Felix File Install (3.0.0)
9|Resolved | 1|Apache Felix Security Provider (1.3.0.SNAPSHOT)
10|Active | 1|Apache Felix Gogo Command (0.6.0)
11|Active | 1|Apache Felix Gogo Runtime (0.6.0)
12|Active | 1|Apache Felix Gogo Shell (0.6.0)
13|Active | 1|Apache Felix Http Bundle (2.0.4)
14|Active | 1|Apache Felix Log Service (1.0.0)
15|Active | 1|Apache Felix Preferences Service (1.0.4)
16|Active | 1|Apache Felix Shell Service (1.4.2)
17|Active | 1|Apache Felix Remote Shell (1.0.4)
18|Active | 1|Apache Felix Web Management Console (3.1.0)
19|Active | 1|Gemini DBAccess (Incubation) (1.0.0.M1-incubation)
20|Active | 1|Gemini javax.persistence (Incubation)
(2.0.0.M1-incubation)
21|Resolved | 1|Gemini JPA Dynamic Weaving Fragment (Incubation)
(1.0.0.M1-incubation)
22|Active | 1|Gemini JPA (Incubation) (1.0.0.M1-incubation)
23|Active | 1|org.eclipse.gemini.naming.framework (Incubation)
(1.0.0)
24|Active | 1|EclipseLink ANTLR (2.1.1.v20100817-r8050)
25|Active | 1|EclipseLink ASM (2.1.1.v20100817-r8050)
26|Active | 1|EclipseLink Core (2.1.1.v20100817-r8050)
27|Active | 1|EclipseLink JPA (2.1.1.v20100817-r8050)
28|Active | 1|osgi.enterprise (4.2.0.201003190513)
g! startfile:eclipselink.jar
Performing test using emm as the JPA Provider and HSQLDB as the Database
Engine:
*** FATAL ERROR *** createEntityManagerFactory() called on provider, but
provider has not registered the p-unit todos
An Error Occured when Running JPA Example Bundle:
java.lang.RuntimeException: createEntityManagerFactory() called on
provider, but provider has not registered the p-unit todos
at org.eclipse.gemini.jpa.GeminiUtil.fatalError(GeminiUtil.java:92)
at
org.eclipse.gemini.jpa.provider.EclipseLinkOSGiProvider.createEntityManagerFactory(EclipseLinkOSGiProvider.java:299)
at
javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
at
javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
at internal.JpaTest.run(JpaTest.java:16)
at internal.Activator.start(Activator.java:11)
at
org.apache.felix.framework.util.SecureAction$Actions.run(SecureAction.java:1254)
at java.security.AccessController.doPrivileged(Native Method)
at
org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:624)
at org.apache.felix.framework.Felix.activateBundle(Felix.java:1862)
at org.apache.felix.framework.Felix.startBundle(Felix.java:1779)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:905)
at org.apache.felix.gogo.command.Basic.start(Basic.java:758)
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.apache.felix.gogo.runtime.Reflective.method(Reflective.java:136)
at
org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:82)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:421)
at
org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:335)
at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:184)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:121)
at
org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:78)
at org.apache.felix.gogo.shell.Console.run(Console.java:62)
at org.apache.felix.gogo.shell.Shell.console(Shell.java:197)
at org.apache.felix.gogo.shell.Shell.gosh(Shell.java:123)
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.apache.felix.gogo.runtime.Reflective.method(Reflective.java:136)
at
org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:82)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:421)
at
org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:335)
at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:184)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:121)
at
org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:78)
at org.apache.felix.gogo.shell.Activator.run(Activator.java:72)
at java.lang.Thread.run(Thread.java:619)
g!
My example bundle (eclipselink.jar) is a very simple osgi project which
only has a persistence.xml in which I tell the provider to use
PostgreSQL as the driver and I define the persistence unit 'todos'.
Somehow it seems that Eclipselink isn't able to find the
persistence.xml... But I don't understand why it doesn't.
Any help will be greatly appreciated.
Best regards,
Sander de Groot
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users