У меня был рабочий клиент 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?