黄页网站推广效果怎么样,实用的wordpress插件,网站做nat映射需要哪些端口,电商网站建设 解决方案的设计这是一个非常不错的教程#xff0c;介绍了如何通过我们最新的JCG合作伙伴 “ The Holy Java ”博客#xff08;很酷的名字#xff09;实现“ 用Spring轻松将POJO作为JMX MBean公开 ”。 #xff08;注意#xff1a;对原始帖子进行了少量编辑以提高可读性#xff09; Jav… 这是一个非常不错的教程介绍了如何通过我们最新的JCG合作伙伴 “ The Holy Java ”博客很酷的名字实现“ 用Spring轻松将POJO作为JMX MBean公开 ”。 注意对原始帖子进行了少量编辑以提高可读性 Java管理扩展JMX技术是一种检查或更改变量状态或通过例如 JConsole之类的管理GUI在远程运行的应用程序中调用方法的好方法。 Spring使得在几分钟之内仅用很少的配置就可以将任何POJO公开为JMX MBean变得微不足道。 Spring JMX文档非常好但是有一段时间我一直在挣扎因此想在这里记录正确的解决方案。 我需要在服务器上运行的IBM JVM 1.5上使用Spring 2.5监视命令行Java应用程序。 监视将在Sun JVM 1.6上使用jconsole作为PC上的JMX客户端执行。 以下所有XML片段均来自相应的Spring application-context.xml。 将POJO变成MBean JMX可以公开以原语或复杂数据类型为参数的gettersetter和操作尽管除少数特殊类型外其他类型都要求客户端具有类。 您告诉Spring将POJO公开为MBean如下所示 bean idmyMBeanclassmy.package.JobPerformanceStatsfactory-methodinstance /bean classorg.springframework.jmx.export.MBeanExporter lazy-initfalseproperty namebeansmapentry keybean:nameMyMBeanName value-refmyMBean//map/property
/bean 首先您声明一个POJO类的实例– myMBean由于其他原因我拥有老式的单例并使用JobPerformanceStats.instance访问Bean。 接下来使用lazy-init “ false”声明一个MBeanExporter并向其介绍您的bean。 还有其他方法可以执行此操作包括自动发现。然后该bean将在其键即“ beanname MyMBeanName”下可见JConsole将其显示为“ MyMBeanName”。 注意由于MBeanExporter使用新的java.lang.management包因此它仅在JVM 1.5下工作。 在JDK 1.4下Spring会因以下错误而失败 java.lang.NoClassDefFoundErrorjavax / management / MBeanServerFactory 在org.springframework.jmx.support.MBeanServerFactoryBean.createMBeanServer处 默认情况下它将公开所有公共方法和属性。 您可以通过多种方式进行更改例如在界面的帮助下。 如果您不是在已经提供了MBean服务器的容器中运行在这里就是我的情况则必须告诉Spring启动一个容器 bean classorg.springframework.jmx.support.MBeanServerFactoryBean/ 启用远程访问 要使MBean可从另一台机器访问必须通过声明配置有适当通信机制的ConnectorServerFactoryBean将其公开。 通过JMXMP进行远程访问 默认情况下 ConnectorServerFactoryBean通过JMX消息传递协议JMXMP使用地址公开MBean。 服务jmxjmxmp// localhost9875 bean classorg.springframework.jmx.support.ConnectorServerFactoryBean / 但是现成的协议不支持此协议因此必须在MBean应用程序和jconsole客户端的类路径上都包含OpenDMK的一部分jmxremote_optional.jar这是OpenDMK的一部分以避免出现以下异常 org.springframework.beans.factory.BeanCreationException创建名称为org.springframework.jmx.support.ConnectorServerFactoryBean0的bean时出错 在类路径资源[application-context.xml]中定义初始化方法的调用失败 嵌套的异常是java.net.MalformedURLException不支持的协议jmxmp 通过RMI进行远程访问 或者您可以通过RMI公开MBean而没有其他依赖项 !--
Now expose the server for remote access via RMI
Local access: service:jmx:rmi://localhost/jndi/rmi://localhost:10099/myconnector
Remote access: service:jmx:rmi:///jndi/rmi://your.host:10099/myconnector
or service:jmx:rmi://localhost/jndi/rmi://localhost:10099/myconnector
--
beanclassorg.springframework.jmx.support.ConnectorServerFactoryBeandepends-onrmiRegistryproperty nameobjectName valueconnector:namermi /property nameserviceUrlvalueservice:jmx:rmi://localhost/jndi/rmi://localhost:10099/myconnector /
/beanbean idrmiRegistryclassorg.springframework.remoting.rmi.RmiRegistryFactoryBeanproperty nameport value10099 /
/bean 但是还必须避免一些陷阱 1.必须启动RMI注册表以便连接器可以在此处注册MBean。 它不会为你开始 2.您必须确保在连接器尝试使用之前启动注册表方法是在连接器之前声明注册表或者通过使用depends-on属性使此依赖关系显式 如果未正确设置则会出现如下异常 org.springframework.beans.factory.BeanCreationException创建名称为org.springframework.jmx.support.ConnectorServerFactoryBean0的bean时出错 在类路径资源[application-context.xml]中定义初始化方法的调用失败 嵌套异常是java.io.IOException无法绑定到URL [rmi// localhost10099 / jmxrmi]javax.naming.ServiceUnavailableException [根本异常是java.rmi.ConnectException连接被拒绝托管给主机localhost; 嵌套的异常是java.net.ConnectException拒绝连接connect]。 通过SSH隧道访问的本地MBean服务器 为了提高安全性您可能不希望通过仅从本地计算机127.0.0.1访问MBean并使用SSH隧道使MBean暴露给远程访问以便远程JConsole可以将它们作为本地应用程序进行访问。 这当然是可能的但可能会很困难因为通常JMX会通过RMI进行访问RMI 使用两个端口 一个用于RMI Registry另一个用于实际服务此处为MBean服务器通常在运行时随机选择而您d需要同时隧穿。 幸运的是 Spring使配置两个端口成为可能 beanclassorg.springframework.jmx.support.ConnectorServerFactoryBeandepends-onrmiRegistryproperty nameobjectName valueconnector:namermi /property nameserviceUrlvalueservice:jmx:rmi://127.0.0.1:STUBPORT/jndi/rmi://localhost:REGISTRYPORT/myconnector /
/beanbean idrmiRegistryclassorg.springframework.remoting.rmi.RmiRegistryFactoryBeanproperty nameport valueREGISTRYPORT /
/bean 将STUBPORT和REGISTRYPORT替换为合适的编号然后隧道传输这两个编号。 请注意连接器的serviceUrl和RMI注册表的端口属性中的REGISTRYPORT号相同。 警告上面的配置实际上并不能阻止从远程应用程序直接访问。 为了真正强制RMI注册表仅侦听来自本地主机的连接我们可能需要在不带Spring的Sun JVM下设置系统属性com.sun.management.jmxremote。 另外要强制注册表使用IP 120.0.0.1我们需要设置java.rmi.server.hostname localhost也适用于Spring。 请参阅有关强制本地访问的讨论 。 我不确定如何使用Spring获得相同的结果同时仍然保留指定两个RMI端口的功能。 还要检查Spring RmiServiceExporter的JavaDoc。 相关文章和文档 Alfresco的隧道调试和JMX A。使用Spring-请参见第二部分JMX的SSH隧道 自定义隧道RMI代理 –使用配置的端口而不是随机端口 使用SSH上的JMX监视ActiveMQ JMX 1.2规范和JMX 1.2远程API规范 来自JMX规范“ MBean服务器依赖协议适配器和连接器以使代理可以从代理JVM之外的管理应用程序访问代理。” 另一方面 Oracle JMX页面显示如果您设置com.sun.management.jmxremote而不是…jmxremote.port则可以“监视本地Java平台即在JVM上运行”。同一台机器” –因此不一定来自同一JVM。 与Jconsole连接 启动JConsole并键入适当的远程地址例如 服务jmxrmi/// jndi / rmi//your.server.com10099 / myconnector 如果连接到远程计算机上的应用程序则可以通过RMI访问your.server.com。 关于连接URL如果您有一个连接器其serviceUrl为 服务jmxrmi// myhost9999 / jndi / rmi// localhost10099 / myconnector 然后可以从客户使用 服务jmxrmi// myhost9999 / jndi / rmi//your.server.com10099 / myconnector 或简单地 服务jmxrmi/// jndi / rmi//your.server.com10099 / myconnector 因为根据JMX 1.2远程API规范第90页 …主机名和端口号 示例中为myhost9999不被客户端使用如果 当前本质上是注释。 连接器服务器地址 实际上存储在序列化的存根/ stub /形式或 目录条目/ jndi /格式。 IBM JVMJConsole和JMX配置 IBM JVM 5 SDK指南指出IBM SDK也包含JConsole并识别与JMX相关的相同系统属性 即com.sun.management.jmxremote。*尽管未提及“ com.sun.management.jmxremote”本身。 。 请注意IBM JConsole有点不同例如它缺少“本地”选项卡而通过指定命令行选项connection localhost来代替它在SDK指南中搜索“ JConsole监视工具的“本地选项卡””。 进一步改进 JVM 1.5公开MemoryMXBean 从Java 5.0开始有几个有用的平台MBean提供有关JVM的信息还包括java.lang.management.MemoryMXBean可让您查看堆使用情况调用GC等。 您可以按如下所示将其提供给JConsole和其他JMX代理使用尽管必须有一种更简单的方法 bean classorg.springframework.jmx.export.MBeanExporter lazy-initfalseproperty namebeansmapentry keybean:nameMemory2 value-refmemProxy/!-- other exported beans may follow ... --/map/property
/beanbean idmemProxyclassjava.lang.management.ManagementFactoryfactory-methodgetMemoryMXBean/ 更新通过使用工厂方法getPlatformMBeanServer将Spring的MBeanServerFactoryBean替换为java.lang.management.ManagementFactory似乎确实存在直接暴露平台MBean的更好的方法。 当然这需要JVM 1.5。 通过密码验证提高安全性 通过RMI访问MBean可能受密码保护。 根据讨论 身份验证是在服务器连接器上配置的 beanclassorg.springframework.jmx.support.ConnectorServerFactoryBeandepends-onrmiRegistryproperty nameobjectName valueconnector:namermi /property nameserviceUrlvalueservice:jmx:rmi://localhost/jndi/rmi://localhost:10099/myconnector /property nameenvironment!-- the following is only valid when the sun jmx implementation is used --mapentry keyjmx.remote.x.password.file valueetc/security/jmxremote.password/entry keyjmx.remote.x.access.file valueetc/security/jmxremote.access//map/property
/bean passwd和access文件遵循可在JDK / jre / lib / management文件夹中找到的模板。 摘要 使用Spring将POJO作为MBean公开很容易只是不要忘记启动MBean服务器和连接器。 对于JMXMP请包括jmxmp_impl。 在类路径上的jar以及对于RMI请确保在连接器之前启动RMI注册表。 相关文章 JBoss 4.2.x Spring 3 JPA Hibernate教程 GWT EJB3 Maven JBoss 5.1集成教程 调试生产服务器– Eclipse和JBoss展示 翻译自: https://www.javacodegeeks.com/2011/02/expose-pojo-jmx-mbean-spring.html