还有一个关于Spring-data-couchbase和OSGI的问题。
我想根据功能使用不同的持久性捆绑包但我希望有一个共同的捆绑包,同时为我提供了与couchbase的连接。 如果我想从另一个包中扫描存储库,我必须将template-ref对象传递给它。
<couchbase:repositories base-package="xyz.abc.model"
couchbase-template-ref="cb-template-first">
</couchbase:repositories>
按照示例
的方式创建模板,如下所示<couchbase:template id="cb-template-first"
client-ref="cb-first" />
基本上,我想知道有没有办法将模板公开为OSGI服务,以便可以在我的其他包中引用此服务。
答案 0 :(得分:0)
如果你只使用&#34; OSGi&#34;如您的评论中所述,您有一个bundle activator类,用于初始化您的上下文。 在这种情况下,您的激活器将如下所示:
public class Activator implements BundleActivator
{
@Override
public void start( BundleContext context ) throws Exception
{
// start spring application context
// template-interface = application context get bean
context.registerService( template-interface.class.getName(), template-interface, null );
}
}
但是如果你想建立一个基于spring的OSGi应用程序,我建议使用gemini blueprint来删除样板代码。 Gemini Blueprint是一个扩展,它扫描所有已启动的捆绑包,用于META-INF / spring内部的上下文文件,并自动启动它们。由于gemini蓝图的名称空间支持,您可以在上下文中发布或获取服务:
<osgi:service id="simpleServiceOsgi" ref="simpleService" interface="org.xyz.MyService" />
<osgi:reference id="messageService" interface="com.xyz.MessageService"/>