随着 RmiRegistryFactoryBean 已被弃用,ConnectorServerFactoryBean 的 RmiRegistryFactoryBean 的替代方案是什么?

问题描述 投票:0回答:1

我有一个现有代码,我们正在使用 org.springframework.remoting.rmi.RmiRegistryFactoryBean。 我正在升级我们的 Spring 版本,看起来 RmiRegistryFactoryBean 在最新的 spring(spring-context.jar) 版本中已被弃用。

下面是我正在使用的代码片段

<bean id="registry"
    class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">
    <property name="port" value="{jmx.port}" />
    <property name="clientSocketFactory" ref="sslRMIClientSocketFactory" />
    <property name="serverSocketFactory" ref="sslRMIServerSocketFactory" />
</bean>

<bean id="serverConnector"
    class="org.springframework.jmx.support.ConnectorServerFactoryBean"
    depends-on="registry">
    <property name="serviceUrl"
        value="service:jmx:rmi://0.0.0.0:{jmx.port}/jndi/rmi://0.0.0.0:{jmx.port}/drsrmi" />
    <property name="environment">
        <map>
            <entry key="jmx.remote.jndi.rebind" value="true"/>
            <entry key="jmx.remote.tls.need.client.authentication" value="true"/>
            <entry key="jmx.remote.rmi.server.socket.factory" value-ref="sslRMIServerSocketFactory"/>
            <entry key="jmx.remote.rmi.client.socket.factory" value-ref="sslRMIClientSocketFactory"/>
            <entry key="com.sun.jndi.rmi.factory.socket" value-ref="sslRMIClientSocketFactory"/>
        </map>
    </property>
</bean>

现在我的 ConnectorServerFactoryBean 依赖于注册表。我现在该如何处理这个问题,是否有 RmiRegistryFactoryBean 的替代方案,或者我可以在没有注册表的情况下创建 ConnectorServerFactoryBean?

spring rmi jmx deprecated spring-context
1个回答
0
投票

我浏览了一堆文档和 SO 帖子,发现这个解决方案可行(是否可以以编程方式启用远程 jmx 监控?

我确信您也可以将 XML 配置转换为 @Configuration 类,以使您的应用程序现代化:

    @Bean
    Registry rmiRegistry() throws Exception {
        
        var jmxPort = getJmxPort(); //get your port from a property? jmx.port
        var registry = LocateRegistry.createRegistry(jmxPort);
        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
        JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://0.0.0.0:"+jmxPort+"/jndi/rmi://127.0.0.1:"+jmxPort+"/jmxrmi");
        JMXConnectorServer srvr = JMXConnectorServerFactory.newJMXConnectorServer(url, getJmxEnvironment(), mbs);
        srvr.start();
        return registry;
    }

现在对于 getJmxEnvironment() 方法,将自定义对象添加到此映射(具有 jmx.remote.rmi.client.socket.factoryjmx.remote.rmi.server.socket.factory 的环境你的实现)

最后,检查这些文档以获取一些额外的配置点也没什么坏处:https://docs.oracle.com/en/java/javase/17/docs/api/java.management.rmi/javax/management/远程/rmi/package-summary.html

© www.soinside.com 2019 - 2024. All rights reserved.