我有一个现有代码,我们正在使用 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?
我浏览了一堆文档和 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.factory 和 jmx.remote.rmi.server.socket.factory 的环境你的实现)
最后,检查这些文档以获取一些额外的配置点也没什么坏处:https://docs.oracle.com/en/java/javase/17/docs/api/java.management.rmi/javax/management/远程/rmi/package-summary.html