Welche XML-Dateien verwenden Sie? Wo steckst du sie in deine OSGi-Bundles (META-INF/spring, OSGi-INF)? Welche dieser Praktiken ermöglicht es Ihnen, Ihre Pakete in Kombination mit einer Nicht-Gemini-Implementierung von Blueprint zu verwenden?
Zwillinge Blueprint behandelt beiden Verzeichnisse gleich, aber OSGI-INF/blueprint/*.xml
ist die einzige, in der generischen OSGi Blueprint-Spezifikation festgelegt.
Eine vorgeschlagene Praxis von the Gemini Blueprint documentation ist:
[...] Ein vorgeschlagen Praxis ist die Anwendung Kontextkonfiguration in mindestens zwei Dateien, genannt vereinbarungsmodul-context.xml aufzuspalten und modulename-osgi-context.xml. Die Datei modulename-context.xml enthält reguläre Bean-Definitionen unabhängig von OSGi-Kenntnissen von . Die Datei modulename-osgi-context.xml enthält die Bean Definitionen zum Importieren und Exportieren von OSGi-Diensten. Es kann (aber ist nicht erforderlich) das Gemini Blueprint OSGi-Schema als den -Namespace der obersten Ebene anstelle des Spring-Beans-Namespaces verwenden.
Ich habe das versucht, und es funktioniert super. Ich verwende Gemini Blueprint für eines meiner Projekte, das die Dateien META-INF/spring/context.xml
enthält, in dem meine Beans und ihre Beziehungen definiert sind, und META-INF/spring/osgi-context.xml
, in dem definiert wird, welche Beans als OSGi-Services und wie importiert werden sollen.context.xml
sieht aus wie
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="myOrdinarySpringBean" class="com.acme.impl.Foo"/>
</beans>
und ist ein regelmäßiger gewöhnlicher Spring-Anwendungskontext ohne Blueprint/OSGi-Konfiguration überhaupt. osgi-context.xml
sieht aus wie
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
<service id="myOsgiService" ref="myOrdinarySpringBean" interface="com.acme.Foo"/>
</blueprint>
Sie könnten natürlich, verwenden Sie das <beans>
Namespace und Wurzelelement auch hier, aber Sie würden ein xmlns:osgi
und Präfix den Dienst wie so definieren müssen: <osgi:service .../>
dafür zu arbeiten. In meinem Fall benötige ich kein Gemini-spezifisches Blueprint-Zeug, daher bin ich mit dieser allgemeinen Blueprint-Konfiguration zufrieden. Ebenso könnte ich auch den <blueprint>
Namespace in context.xml
verwenden, aber diese spezielle Anwendung ist eine alte, die nach OSGi portiert wurde, daher bevorzuge ich, diese Konfiguration Spring spezifisch für jetzt zu behalten.
Eine weitere Anwendung wiederum hat seine eigene osgi-context.xml
wie
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
<reference id="myOrdinarySpringBeanImportedFromOsgi" interface="com.acme.Foo" availability="mandatory"/>
</blueprint>
und zu diesem Zeitpunkt nicht, aber konnte, haben ihre eigene context.xml
wie
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="myOrdinaryOtherSpringBean" class="com.acme.impl.Bar">
<property name="foo" ref="myOrdinarySpringBeanImportedFromOsgi"/>
</bean>
</beans>
und konnte nicht wirklich wurscht ob myOrdinarySpringBeanImportedFromOsgi
aus einem OSGi-Service importiert oder als regulärer Spring-Bean im selben Anwendungskontext definiert wird.
Diese META-INF/osgi-context.xml
Konfigurationen könnten trivialerweise zu OSGI-INF/blueprint/
verschoben werden, wenn ich mich von der Gemini Blueprint-Implementierung entkoppeln möchte, aber vorläufig bevorzuge ich die beiden Hälften an der gleichen Stelle zu halten, um ein Durcheinander der Verzeichnisstruktur zu vermeiden .
Ich glaube nicht, dass es in JBoss Fuse funktioniert. Importierte Dienste in Aries OSGi xml können in Spring DM xml nicht erkannt werden. – sancho21
Ich glaube nicht, dass Sie einen Dienst aus demselben Paket bereitstellen und konsumieren können. Dies ist kein Blaupause/Feder-Interoperabilitätsproblem. Das gleiche Problem wird mit nur Frühling oder nur Blaupause passieren. – mjmeno