j'ai une fonction de source de données qui exporte une source de données en tant que service OSGi:Karaf fonction d'installation manquant osgi.service exigence, mais il est là
> services -p 2038
OPS4J Pax JDBC Config (2038) provides:
--------------------------------------
objectClass = [org.osgi.service.cm.ManagedServiceFactory]
service.bundleid = 2038
service.id = 211
service.pid = org.ops4j.datasource
service.scope = singleton
----
databaseName = foobar
dataSourceName = fooDatasource
felix.fileinstall.filename = file:/home/foousr/apache-karaf-4.0.6/etc/org.ops4j.datasource-foo.cfg
objectClass = [javax.sql.DataSource]
osgi.jndi.service.name = fooDatasource
service.bundleid = 2038
service.factoryPid = org.ops4j.datasource
service.id = 251
service.pid = org.ops4j.datasource.b3020619-71b9-4876-94c3-477f3e4a503d
service.scope = singleton
url = jdbc:oracle:thin:@dbserver:99999/foo
user = FOOUSR
Dans le cadre de la DS-fonctionnalité qui crée et enregistre ce service DataSource , il contient également un paquet ping-ds que je peux utiliser pour tester la source de données:
> jdbc:ping-ds fooDatasource
Ping from localhost(127.0.0.1) as FOOUSR to schema FOOUSR on dbserver/foo
J'ai un paquet de plan qui utilise cette source de données:
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camel="http://camel.apache.org/schema/blueprint"
xsi:schemaLocation="
http://www.osgi.org/xmlns/blueprint/v1.0.0
http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://camel.apache.org/schema/blueprint
http://camel.apache.org/schema/blueprint/camel-blueprint.xsd
http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0
http://svn.apache.org/repos/asf/aries/trunk/blueprint/blueprint-cm/src/main/resources/org/apache/aries/blueprint/compendium/cm/blueprint-cm-1.1.0.xsd">
<reference id="ds" interface="javax.sql.DataSource" filter="(dataSourceName=fooDatasource)"/>
<camelContext id="fooDatasourceTestContext" trace="true" xmlns="http://camel.apache.org/schema/blueprint">
<route id="fooDatasourceTest">
<from uri="timer:/fooDatasourceTest?fixedRate=true&repeatCount=1"/>
<setBody>
<simple>
select * from FOOUSR.FOOTABLE
</simple>
</setBody>
<to uri="jdbc:ds" />
<to uri="log:fooDatasourceTest?showBody=true"/>
</route>
</camelContext>
</blueprint>
Lorsque je fais un feature:install foo-datasource-test-feature
je reçois une erreur en me plaignant de ne pas être en mesure de trouver le service de la source de données - mais c'est là et je peux y accéder très bien avec mon ping-ds cmd.
Error executing command: Unable to resolve root: missing requirement [root] osgi.identity;
osgi.identity=foo-datasource-test-feature; type=karaf.feature; version="[0.0.1.SNAPSHOT,0.0.1.SNAPSHOT]";
filter:="(&(osgi.identity=foo-datasource-test-feature)(type=karaf.feature)(version>=0.0.1.SNAPSHOT)(version<=0.0.1.SNAPSHOT))"
[caused by: Unable to resolve foo-datasource-test-feature/0.0.1.SNAPSHOT: missing requirement
[foo-datasource-test-feature/0.0.1.SNAPSHOT] osgi.identity; osgi.identity=com.company.project.foo-datasource-test;
type=osgi.bundle; version="[0.0.1.SNAPSHOT,0.0.1.SNAPSHOT]"; resolution:=mandatory [caused by: Unable to resolve
com.company.project.foo-datasource-test/0.0.1.SNAPSHOT: missing requirement
[com.company.project.foo-datasource-test/0.0.1.SNAPSHOT] osgi.service; effective:=active;
filter:="(&(objectClass=javax.sql.DataSource)(dataSourceName=fooDatasource))"]]
Il semble se plaindre qu'il ne peut pas trouver installé datasource du service OSGi:
osgi.service; effective:=active;
filter:="(&(objectClass=javax.sql.DataSource)(dataSourceName=fooDatasource))"]]
Ce qui est étrange, outre le fait que la commande ping-dSi écrit fonctionne très bien, est que si je viens d'installer le faisceau de test qui est dans la fonctionnalité dont il se plaint, cela fonctionne très bien. Ce qui signifie que c'est une sorte de problème avec la fonctionnalité: processus d'installation lui-même.
Dans la fonction foo-datasource-test-fonctionnalité, j'inclure une fonction foo-core qui fait référence à la DS-fonction:
foo-datasource-test-feature.xml:
<?xml version="1.0" encoding="utf-8"?>
<features name="foo-datasource-test" xmlns="http://karaf.apache.org/xmlns/features/v1.4.0">
<feature name="foo-datasource-test-feature" version="${project.version}">
<feature>foo-core-feature</feature>
<bundle>mvn:com.company.project/foo-datasource-test/${project.version}</bundle>
</feature>
</features
foo-core-feature.xml:
<?xml version="1.0" encoding="utf-8"?>
<features name="foo-core" xmlns="http://karaf.apache.org/xmlns/features/v1.4.0">
<feature name="foo-core-feature" version="${project.version}">
<feature>ds-feature</feature>
...
</feature>
</features>
ds-features.xml:
<?xml version="1.0" encoding="UTF-8"?>
<features name="ds-features" xmlns="http://karaf.apache.org/xmlns/features/v1.0.0">
<feature name="ds-feature" version="${project.version}" >
<feature>pax-jdbc-config</feature>
...
<bundle start-level="86">mvn:com.company.commons/foo-datasource/${project.version}</bundle>
</feature>
<feature name="ds-ping-datasource" version="${project.version}" >
<bundle start-level="80">mvn:com.company.commons/foo-ping-datasource/${project.version}</bundle>
<feature>pax-jdbc-config</feature>
</feature>
</features>
Cela pose-t-il un problème? Si c'est le cas, puisque la fonction foo-datasource-test-dépend du service de source de données déjà installé, quelle serait alors la bonne façon de décrire cette dépendance dans mes fonctionnalités?
utilisant:
Karaf Version 4.0.6
version Camel 2.16.5
MISE À JOUR
Je commentais la référence à la fonction de base de sorte que tout le paquet était dans la fonction de test et il se plaint encore. Cela n'a donc rien à voir avec la fonctionnalité permettant de gérer les dépendances. Je vais essayer la version 4.1.0 de Karaf.
MISE À JOUR
Pas de joie sur 4.1.0. En remarque, il y avait encore plus de problèmes puisque activemq-client 5.14.4 n'est pas encore construit.
Le correctif client-activemq a été créé pour le 5.14.4 aujourd'hui (https://repository.apache.org/content/repositories/releases/org/apache/activemq/activemq-client/5.14.4/), donc j'ai changé Retour à l'utilisation de karaf 4.1.0 et j'utilise les versions suivantes: activemq.version = 5.14.4 camel.version = 2.18.2 spring.version = 4.3.5.RELEASE – bmcdonald
J'ai juste le même problème, seulement avec l'en-tête Require-Capability généré automatiquement dans les bundles avec l'unité de persistance. Fait intéressant, il a déjà travaillé, puis «soudainement» arrêté. Malheureusement, il y a beaucoup de choses à Karaf qui sont terriblement écrites. –