OSGi клиент для Wildfly 16 - PullRequest
0 голосов
/ 15 мая 2019

У меня был рабочий клиент OSGi, который подключался к Wildfly 8 через Java 8.

Для этого у нас есть пакет-обертка вокруг клиентского JAR-файла Wildfly с Eclipse-BuddyPolicy: registered, и все пакеты с API имеют Eclipse-BuddyPolicy: global.

Я обновил проект до Java 11 и Wildfly 16. Теперь описанный выше сценарий больше не работает.

Вместо этого я получаю

javax.naming.CommunicationException: EJBCLIENT000062: Failed to look up "org.acme.ear/GreatModule/RemoteInterface!org.acme.api.RemoteInterface?stateless" [Root exception is java.lang.ClassNotFoundException: org.acme.api.RemoteInterface]
    at org.jboss.ejb.client.EJBRootContext.lookupNative(EJBRootContext.java:148)
    at org.wildfly.naming.client.AbstractContext.lookup(AbstractContext.java:84)
    at org.wildfly.naming.client.WildFlyRootContext.lookup(WildFlyRootContext.java:144)
    at java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409)
    ... 77 more
Caused by: java.lang.ClassNotFoundException: org.acme.api.RemoteInterface
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at org.eclipse.osgi.internal.framework.ContextFinder.loadClass(ContextFinder.java:135)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:398)
    at org.jboss.ejb.client.EJBRootContext.lookupNative(EJBRootContext.java:146)
    ... 83 more

Код для вызова компонента выглядит примерно так (вызывается только в контексте OSGi):

    final Properties properties = new Properties();
    properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
    properties.put(Context.PROVIDER_URL, "remote+http://localhost:8080/");
    properties.put(Context.SECURITY_PRINCIPAL, "test");
    properties.put(Context.SECURITY_CREDENTIALS, "test");
    final InitialContext context = new InitialContext(properties);

    final RemoteInterface result = (RemoteInterface) context
            .lookup("org.acme.ear/GreatModule/RemoteInterface!org.acme.api.RemoteInterface?stateless");
    System.out.println(result);

Я понятия не имею, с чего начать отладку этой проблемы.

Как мне создать OSGi-клиент для Wildfly 16?

...