我已经使用GFSH来启动定位器,如下所示
start locator --name=gemfire_locator --security-properties-file="../config/gfsecurity.properties" --J=-Dgemfire.ssl-enabled-components=all --mcast-port=0 --J=-Dgemfire.jmx-manager-ssl=true
还启动了服务器
start server --name=server1 --security-properties-file="../config/gfsecurity.properties" --J=-Dgemfire.ssl-enabled-components=all --mcast-port=0 --J=-Dgemfire.jmx-manager-ssl=true
我正在尝试以ClientCache连接到Gemfire,它可以通过SSL正常运行。但是当我作为JMX客户端连接时,我发现Java代码和Jconsole都出现错误。
Error:
Exception in thread "main" java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: non-JRMP server at remote endpoint]
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:369)
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:270)
at SamplePlugin.main(SamplePlugin.java:101)
我还缺少其他配置吗?
这是我的JAVA_TOOL_OPTIONS
:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=true
-Djava.rmi.server.hostname=myhostname
答案 0 :(得分:0)
您还需要将geode-core
jar添加到jvisualvm的类路径中。使用--cp:a
选项。我建议您仅使用geode-dependencies.jar
,因为这样可以满足您的所有需求。
ContextAwareSSLRMIClientSocketFactory的注释中对此进行了解释。基本上,似乎RMI使用SSL时,必要的RMIClientSocketFactory
从 服务器 导出到客户端以供使用。通常,这只是SslRMIClientSocketFactory
。但是在我们的例子中,我们有一个自定义的套接字工厂,因此客户端(在本例中为jvisualvm)需要访问它。