如何通过JNDI配置和查找OSGi服务

时间:2015-06-16 06:47:59

标签: java osgi jndi apache-karaf osgi-bundle

我使用bundle activator创建了一个OSGi包并部署在karaf中, 但是在karaf中,如果你给jndi:bind-id service-name,那么在karaf控制台关闭后它就不会存在,因为它不是持久性的。

我想使用持久的JNDi在OSGi中注册服务,我可以使用JNDI访问。

我正在注册服务,

 bundleContext.registerService(myFramework.class.getName(),FrmFactory.initFramework(ctx), null);
Context ctx = null;
        try
        {
            ctx = new InitialContext();
            ctx.bind("service/myframework", frmFactory.initFramework(ctx));
        }

请建议这是正确的方法,如果没有请建议, 因为我得到例外

  

errorMessage = jndiobjectBindError,errorMessage =无法绑定   jndi中的本地对象。对象名称:service / portframework,cause =   javax.naming.NotContextException:中间上下文Myfr   amework不存在

1 个答案:

答案 0 :(得分:2)

使用karaf中的jndi访问服务的最简单方法是使用"jndi" feature。它使用jndi提供对所有OSGi服务的访问。

对于您的情况,您的服务的jndi名称将是:

osgi:service/<FQN of myFramework>

所以你只需要注册你的服务,而不需要关心在jndi注册。