FYI,
there is a change in the location of the org.osgi.service.jdbc package
(especially org.osgi.service.jdbc.DataSourceFactory):
In Karaf 2.2.x, which use OSGi r4.2, this package was provided in
org.osgi.enterprise.
In Karaf 2.3.x, which use OSGi r4.3, this package was provided in
org.osgi.compendium.
In next release using OSGi r5.0.0, it's back in org.osgi.enterprise.
So check the exported packages and the import in your bundle (especially
if you use a Required-Bundle).
Regards
JB
On 10/22/2012 04:06 PM, Charles Moulliard wrote:
This is correct
On Mon, Oct 22, 2012 at 2:29 PM, Bengt Rodehav <[email protected]
<mailto:[email protected]>> wrote:
Achim, no Grace Period for any of the bundles.
Charles, "headers 151" gives me the following:
/Connect :: filetransfer-history-domain (151)/
/--------------------------------------------/
/Manifest-Version = 1.0/
/Bnd-LastModified = 1350893282476/
/Tool = Bnd-0.0.357/
/Meta-Persistence = META-INF/persistence.xml/
/Built-By = berodeha/
/Implementation-Version = 2.3-SNAPSHOT/
/Build-Jdk = 1.6.0_32/
/Implementation-Title = Digia Connect/
/Created-By = Apache Maven Bundle Plugin/
/
/
/Bundle-Name = Connect :: filetransfer-history-domain/
/Bundle-SymbolicName =
se.digia.connect.services.filetransfer.history-domain/
/Bundle-Version = 2.3.0.SNAPSHOT/
/Bundle-ManifestVersion = 2/
/
/
/Import-Package =/
/ javax.persistence;resolution:=optional;version=1.1,/
/ javax.persistence.metamodel;resolution:=optional;version=1.1,/
/ javax.validation.constraints;resolution:=optional;version=1.0,/
/ org.apache.openjpa.enhance;resolution:=optional;version=2.1,/
/ org.apache.openjpa.util;resolution:=optional;version=2.1,/
/ se.digia.connect.filetransfer.history.domain;/
/ resolution:=optional;/
/ version=2.3,/
/
se.digia.connect.util.persistence;resolution:=optional;version=2.3/
/Export-Package =/
/ se.digia.connect.filetransfer.history.domain;/
/ uses:="org.apache.openjpa.util,/
/ se.digia.connect.util.persistence,/
/ javax.validation.constraints,/
/ org.apache.openjpa.enhance,/
/ javax.persistence,/
/ javax.persistence.metamodel";/
/ version=2.3.0.SNAPSHOT/
I think this is correct. Also, this has worked for quite some time
on Karaf 2.2.8 (which had an older Aries version).
/Bengt
2012/10/22 Charles Moulliard <[email protected]
<mailto:[email protected]>>
Have you added Meta-Persistence metadata in the MANIFEST file ?
I have created a ticket to provide a more end user message on
the console (https://issues.apache.org/jira/browse/ARIES-945)
On Mon, Oct 22, 2012 at 2:09 PM, Bengt Rodehav
<[email protected] <mailto:[email protected]>> wrote:
Thanks for your reply Charles,
Your're right I don't need the DataSourceFactory. I
mistakenly thought that the info message was connected to
the problem with not finding the data source via JNDI. Since
everything has worked before (using Karaf 2.2.8) I assumed
that the feature descriptor in Karaf 2.3.0 lacked a bundle
(that exported the org.osgi.service.jdbc package). That's
why I thought it was a Karaf problem and not an Aries problem.
So, I probably do not need the org.osgi.service.jdbc package
- it was a false lead. Still, I do have problems finding the
data source via jndi. I get:
/
2012-10-22 13:36:23,428 | ERROR | y/api/getEntries |
container |
ntainer.unit.impl.JndiDataSource 85 | The DataSource
osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
<http://osgi.jndi.service.name>=jdbc/filetransferhistoryjta)
required by bundle
se.digia.connect.services.filetransfer.history-domain/2.3.0.SNAPSHOT
could not be found.
javax.naming.NameNotFoundException:
osgi:service/javax.sql.DataSource/"(osgi.jndi.service.name
<http://osgi.jndi.service.name>=jdbc/filetransferhistoryjta)"
at
org.apache.aries.jndi.url.ServiceRegistryContext.lookup(ServiceRegistryContext.java:113)[139:org.apache.aries.jndi.url:1.0.0]
at
org.apache.aries.jndi.url.ServiceRegistryContext.lookup(ServiceRegistryContext.java:144)[139:org.apache.aries.jndi.url:1.0.0]
at
org.apache.aries.jndi.DelegateContext.lookup(DelegateContext.java:161)[137:org.apache.aries.jndi.core:1.0.0]
at
javax.naming.InitialContext.lookup(InitialContext.java:392)[:1.6.0_32]
at
org.apache.aries.jpa.container.unit.impl.JndiDataSource.getDs(JndiDataSource.java:65)[134:org.apache.aries.jpa.container:1.0.0]
at
org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource.getConnection(DelayedLookupDataSource.java:36)[134:org.apache.aries.jpa.container:1.0.0]
at
org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:137)[142:org.apache.openjpa:2.1.1]
at
org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:112)[142:org.apache.openjpa:2.1.1]
at
org.apache.openjpa.jdbc.schema.DataSourceFactory.installDBDictionary(DataSourceFactory.java:239)[142:org.apache.openjpa:2.1.1]
at
org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getConnectionFactory(JDBCConfigurationImpl.java:733)[142:org.apache.openjpa:2.1.1]
at
org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDataSource(JDBCConfigurationImpl.java:872)[142:org.apache.openjpa:2.1.1]
at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.getDataSource(JDBCStoreManager.java:179)[142:org.apache.openjpa:2.1.1]
at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.setContext(JDBCStoreManager.java:162)[142:org.apache.openjpa:2.1.1]
at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.setContext(JDBCStoreManager.java:148)[142:org.apache.openjpa:2.1.1]
at
org.apache.openjpa.kernel.DelegatingStoreManager.setContext(DelegatingStoreManager.java:79)[142:org.apache.openjpa:2.1.1]
at
org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:369)[142:org.apache.openjpa:2.1.1]
at
org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:323)[142:org.apache.openjpa:2.1.1]
at
org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:229)[142:org.apache.openjpa:2.1.1]
at
org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:213)[142:org.apache.openjpa:2.1.1]
at
org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)[142:org.apache.openjpa:2.1.1]
at
org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)[142:org.apache.openjpa:2.1.1]
at
org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)[142:org.apache.openjpa:2.1.1]
at
org.apache.aries.jpa.container.impl.CountingEntityManagerFactory.createEntityManager(CountingEntityManagerFactory.java:71)[134:org.apache.aries.jpa.container:1.0.0]
at
org.apache.aries.jpa.container.context.transaction.impl.JTAPersistenceContextRegistry.getCurrentPersistenceContext(JTAPersistenceContextRegistry.java:152)[135:org.apache.aries.jpa.container.context:1.0.1]
at
org.apache.aries.jpa.container.context.transaction.impl.JTAEntityManager.getPersistenceContext(JTAEntityManager.java:87)[135:org.apache.aries.jpa.container.context:1.0.1]
at
org.apache.aries.jpa.container.context.transaction.impl.JTAEntityManager.getCriteriaBuilder(JTAEntityManager.java:391)[135:org.apache.aries.jpa.container.context:1.0.1]
...
/
But the data source seem to be published as a service, the
command "ls | grep -A 4 -B 4 javax.sql.DataSource" gives me
the following output:
/Connect :: filetransfer-history-datasource (153) provides:/
/----------------------------------------------------------/
/javax.sql.XADataSource/
/javax.sql.DataSource/
/org.osgi.service.blueprint.container.BlueprintContainer/
I then execute "ls 153" and get:
/
Connect :: filetransfer-history-datasource (153) provides:
----------------------------------------------------------
objectClass = javax.sql.XADataSource
osgi.jndi.service.name <http://osgi.jndi.service.name> =
jdbc/filetransferhistoryjta
osgi.service.blueprint.compname = derbyXADataSource
service.id <http://service.id> = 493
----
objectClass = javax.sql.DataSource
osgi.jndi.service.name <http://osgi.jndi.service.name> =
jdbc/filetransferhistorynojta
osgi.service.blueprint.compname = derbyDataSource
service.id <http://service.id> = 494
----
objectClass =
org.osgi.service.blueprint.container.BlueprintContainer
osgi.blueprint.container.symbolicname =
se.digia.connect.services.filetransfer.h/
istory-datasource
/
osgi.blueprint.container.version = 2.3.0.SNAPSHOT
service.id <http://service.id> = 495
/
To me it looks like the service is provided with the correct
properties. Maybe it's a jndi problem? I was hoping there
was a "jndi" command in the Karaf shell that I could use to
see what can be resolved via jndi but I can't find such a
command.
I've actually encountered another strange problem. On
startup everything looks fine. But when I try to access the
webconsole - it's not there. I then start to type "list" in
the Karaf shell. But as soon as I type the "l" I get the
following message in the console:
/karaf@root> lError executing command: read() with timeout
cannot be called as no/
/n-blocking operation is disabled/
/ __ __ ____/
/ / //_/____ __________ _/ __//
/ / ,< / __ `/ ___/ __ `/ /_/
/ / /| |/ /_/ / / / /_/ / __//
/ /_/ |_|\__,_/_/ \__,_/_//
/
/
/ Apache Karaf (2.3.0)/
/
/
/Hit '<tab>' for a list of available commands/
/and '[cmd] --help' for help on a specific command./
/Hit '<ctrl-d>' or 'osgi:shutdown' to shutdown Karaf./
Note that the "Karaf" logo had already been shown so it's
shown twice. Also, in the log I get:
/2012-10-22 13:28:27,999 | ERROR | Thread-6 |
FeaturesServiceImpl |
s.internal.FeaturesServiceImpl$2 1143 | Error installing
boot features/
/java.lang.NullPointerException/
/at
org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1432)[org.apache.felix.framework-4.0.3.jar:]/
/at
org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)[org.apache.felix.framework-4.0.3.jar:]/
/at
org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)[org.apache.felix.framework-4.0.3.jar:]/
/at
java.lang.ClassLoader.loadClass(ClassLoader.java:247)[:1.6.0_32]/
/at
org.apache.karaf.features.internal.FeaturesServiceImpl.installFeatures(FeaturesServiceImpl.java:525)[20:org.apache.karaf.features.core:2.3.0]/
/at
org.apache.karaf.features.internal.FeaturesServiceImpl$2.run(FeaturesServiceImpl.java:1141)[20:org.apache.karaf.features.core:2.3.0]/
/2012-10-22 13:28:28,002 | ERROR | Thread-6 |
FeaturesServiceImpl |
res.internal.FeaturesServiceImpl 1227 | Error persisting
FeaturesService state/
/java.lang.IllegalStateException: Invalid BundleContext./
/at
org.apache.felix.framework.BundleContextImpl.checkValidity(BundleContextImpl.java:514)[org.apache.felix.framework-4.0.3.jar:]/
/at
org.apache.felix.framework.BundleContextImpl.getDataFile(BundleContextImpl.java:491)[org.apache.felix.framework-4.0.3.jar:]/
/at
org.apache.karaf.features.internal.FeaturesServiceImpl.saveState(FeaturesServiceImpl.java:1215)[20:org.apache.karaf.features.core:2.3.0]/
/at
org.apache.karaf.features.internal.FeaturesServiceImpl$2.run(FeaturesServiceImpl.java:1146)[20:org.apache.karaf.features.core:2.3.0]/
If I don't press a key in the shell, I never get these
messages but then the web service will never install. It's
as if the installation is hung, waiting for something.
Do you or anyone have any clue as to what is happening. I am
in the process of upgrading my custom distribution of Karaf
from 2.2.8 to 2.3.0 so I might have done something very
wrong but right now I have no clue as to where I should look
further,
/Bengt
2012/10/22 Charles Moulliard <[email protected]
<mailto:[email protected]>>
Bengt,
This package is not required by Aries JPA as resolution
is optional :
org.osgi.service.jdbc;resolution:=optional,
When the Aries JPA Container
/ManagedPersistenceUnitInfoImpl /class is called, Aries
does a check to verify if the OSGI service is provided.
If this is not the case, the info is displayed in the
log and Aries JPA Container continues to load the JPA
Container based on your config (persistence.xml,
datasource, ...). If you are using JPA, you shouldn't
use the DataSourceFactory.
These links could help you to configure your project
/http://stackoverflow.com/questions/11861414/openjpa-in-osgi-not-finding-mysql-jdbc-connector-bundle/
/http://aries.apache.org/modules/jpaproject.html/
/
/
Regards,
Charles
On Mon, Oct 22, 2012 at 11:25 AM, Bengt Rodehav
<[email protected] <mailto:[email protected]>> wrote:
I'm trying to upgrade fro Karaf 2.2.8 to Karaf 2.3.0
and have run into a problem regarding datasources. I
get the following in my log:
/2012-10-22 10:52:59,563 | INFO | Thread-7
| container |
l.ManagedPersistenceUnitInfoImpl 50 | The
org.osgi.service.jdbc package is unavailable. As a
result the Aries JPA container will not offer any
DataSourceFactory integration./
It's only an INFO message but it seems fatal to me
because later on I cannot find my datasource when I
try to use it. I publish a data source (for Derby)
using Blueprint. I use the following features from
the karaf-enterprise descriptor:
- transaction
- jpa
- jndi
When I execute "exports | grep -i
org.osgi.service.jdbc" on the command line I get an
empty result.
It seems like this package is needed for Aries JPA
Container. What bundle should export it?
/Bengt
--
Charles Moulliard
Apache Committer / Sr. Enterprise Architect (RedHat)
Twitter : @cmoulliard | Blog :
http://cmoulliard.blogspot.com
--
Charles Moulliard
Apache Committer / Sr. Enterprise Architect (RedHat)
Twitter : @cmoulliard | Blog : http://cmoulliard.blogspot.com
--
Charles Moulliard
Apache Committer / Sr. Enterprise Architect (RedHat)
Twitter : @cmoulliard | Blog : http://cmoulliard.blogspot.com
--
Jean-Baptiste Onofré
[email protected]
http://blog.nanthrax.net
Talend - http://www.talend.com