Какое имя JNDI я должен использовать для поиска удаленного интерфейса, развернутого в веб-сфере с помощью Spring Boot? - PullRequest
0 голосов
/ 27 октября 2019

У меня удаленный интерфейс, развернутый в websphere 8.5.5, и я хочу найти это в весенней загрузке приложения. Я сделал такой же интерфейс в моей весенней загрузке, что и общий интерфейс RMI Я также использовал SimpleRemoteStatelessSessionProxyFactoryBean, но прокси-сервер возвратил null, и он выдавал указатель null в proxy.invokeMethod()

@Configuration
public class Config {

    private static final String INITIAL_CONTEXT_FACTORY = "com.ibm.websphere.naming.WsnInitialContextFactory";
    private static final String PROVIDER_URL = "corbaname:iiop:localhost:2809/NameServiceServerRoot";

    @Primary
    @Bean
    public static AdminService adminService() {

        Properties jndiProps = new Properties();
        Properties properties = new Properties();
        properties.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY);
        properties.put(Context.PROVIDER_URL, PROVIDER_URL);

        SimpleRemoteStatelessSessionProxyFactoryBean factory = new SimpleRemoteStatelessSessionProxyFactoryBean();
        factory.setJndiEnvironment(jndiProps);
        factory.setJndiName("java:global/[AppName]/[ModuleName]/ejb/[BeanName]![RemoteInterface]");
        factory.setBusinessInterface(AdminService.class);
        factory.setResourceRef(true);
        AdminService proxy = (AdminService) factory.getObject();
        try {
            proxy.invokeMethod();
        }catch(RemoteException e) {
            e.printStackTrace();
        }

        return proxy;       
    }
}

Теперь выдает эту ошибку:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'AdminService' defined in class path resource [...Config.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [...AdminService]: Factory method 'adminEJBService' threw exception; nested exception is javax.naming.NameNotFoundException: Name [global/[AppName]/[ModuleName]/ejb/[BeanName]![RemoteInterface] is not bound in this Context. Unable to find [global].

1 Ответ

0 голосов
/ 28 октября 2019

Вы должны заменить все в [] действительным именем, поэтому не [AppName], а MyApp и т. Д. Если вы не уверены, вы можете определить точную строку поиска, посмотрев в SystemOut.log файл WebSphere. 8.5.5 сервер для сообщения CNTR0167I. Например, фактическое сообщение будет выглядеть так:

CNTR0167I: The server is binding the javax.management.j2ee.ManagementHome interface of the Management enterprise bean in the mejb.jar module of the ManagementEJB application.  The binding location is: java:global/ManagementEJB/mejb/Management!javax.management.j2ee.ManagementHome
...