Как настроить и найти службу OSGi через JNDI

Я создал пакет OSGi с помощью активатора пакета и развернул его в karaf, но в karaf, если вы укажете имя службы jndi:bind-id, он не будет существовать после выключения консоли karaf, потому что он не является постоянным.

Я хочу зарегистрировать службу в 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. Имя объекта: service/portframework, причина = javax.naming.NotContextException: Промежуточный контекст Myfr amework не существует


person Sachin Singh    schedule 16.06.2015    source источник


Ответы (1)


Самый простой способ получить доступ к службам с помощью jndi в karaf — использовать функцию "jndi". Он предоставляет доступ ко всем службам OSGi с помощью jndi.

В вашем случае имя jndi вашей службы будет:

osgi:service/<FQN of myFramework>

Так что вам просто нужно зарегистрировать свой сервис и не нужно заботиться о регистрации в jndi.

person Christian Schneider    schedule 16.06.2015
comment
спасибо Кристиан за ваш быстрый ответ, но я сомневаюсь, скажем, у меня есть имя пакета MyFramework, которое я развернул в karaf. Я хочу предоставить постоянное имя JNDI, которое не должно идти после закрытия консоли, чтобы другой клиент мог использовать эту службу, используя доступ JNDI , я дал команду, как при получении сообщения об ошибке karaf@root()> osgi:service/myframeworkservice Команда не найдена: osgi:service/portframeworkservice - person Sachin Singh; 16.06.2015
comment
То, что я написал, это имя jndi, а не команда. Он не зависит от консоли karaf. Зачем тебе вообще нужен jndi? Как ты это используешь? - person Christian Schneider; 16.06.2015
comment
Мне нужен JNDI, потому что я развернул пакет (например, пакет 1 MyFramework) в качестве службы с помощью bundleActivator (OSGi), мой другой пакет будет использовать пакет 1 с использованием JNDI, поэтому мне нужно назначить JNDI для пакета 1. - person Sachin Singh; 16.06.2015
comment
Просто используйте URL-адрес jndi, который я дал выше, в пакете, который хочет получить доступ к MyFramework. Вам не нужно использовать дополнительные команды оболочки. Однако вам следует подумать о доступе к MyFramework через службу. Это работает намного лучше с динамикой OSGi. JNDI не имеет возможности сообщить об удалении службы. Так что, если у вас есть эта динамика в вашем развертывании, jndi не так уж хорош. - person Christian Schneider; 18.06.2015
comment
пожалуйста, не могли бы вы поделиться некоторыми примерами, потому что я новичок во всем этом - person Sachin Singh; 19.06.2015
comment
Вы можете посмотреть мои уроки по карафу. Все они показывают, как работать с сервисами. liquid-reality.de/display/liquid/Karaf+Tutorials - person Christian Schneider; 14.12.2015