我使用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不存在
答案 0 :(得分:2)
使用karaf中的jndi访问服务的最简单方法是使用"jndi" feature。它使用jndi提供对所有OSGi服务的访问。
对于您的情况,您的服务的jndi名称将是:
osgi:service/<FQN of myFramework>
所以你只需要注册你的服务,而不需要关心在jndi注册。