Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过JNDI配置和查找OSGi服务_Java_Osgi_Jndi_Apache Karaf_Osgi Bundle - Fatal编程技术网

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

Java 如何通过JNDI配置和查找OSGi服务,java,osgi,jndi,apache-karaf,osgi-bundle,Java,Osgi,Jndi,Apache Karaf,Osgi Bundle,我使用bundle activator创建了一个OSGi捆绑包,并部署在karaf中, 但在karaf中,如果您提供jndi:bind id服务名称,那么在karaf控制台关闭后它将不存在,因为它不是持久的 我想使用JNDi在OSGi中注册服务,JNDi是持久的,我可以使用JNDi访问它 我正在根据 bundleContext.registerService(myFramework.class.getName(),FrmFactory.initFramework(ctx), null); Co

我使用bundle activator创建了一个OSGi捆绑包,并部署在karaf中, 但在karaf中,如果您提供jndi:bind id服务名称,那么在karaf控制台关闭后它将不存在,因为它不是持久的

我想使用JNDi在OSGi中注册服务,JNDi是持久的,我可以使用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中的本地对象。对象名称:服务/端口框架,原因= javax.naming.NotContextException:中间上下文Myfr 工作不存在


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

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

osgi:service/<FQN of myFramework>
osgi:service/

因此,您只需注册您的服务,而不必关心在jndi中的注册。

感谢Christian的快速响应,但我的疑问是,假设我有一个捆绑包名称MyFramework,我在karaf部署了它,我想永久提供jndi名称,它不应该在console close之后出现,为了让其他客户端可以使用JNDI访问来使用该服务,我在getting error message下给出了命令karaf@root()>找不到osgi:service/myframeworkservice命令:osgi:service/portframeworkservice我写的是jndi名称,不是命令。它独立于karaf控制台。你为什么需要jndi?如何使用它?我需要JNDI,因为我已经使用bundleActivator(OSGi)部署了一个bundle(例如bundle1 MyFramework)作为服务,我的另一个bundle将使用bundle1使用JNDI,这就是为什么我需要为bundle1分配JNDI,只需使用我在想要访问MyFramework的bundle中提供的JNDI url。您不需要使用其他shell命令。你应该考虑通过服务来访问MyFramework。它与OSGi dynamics一起工作得更好。JNDI无法在服务被删除时进行通信。因此,如果您的部署中有这种动态,jndi就不是那么好了。请您分享一些例子,因为我对这一切都是新手