2015-12-14 61 views
1

我想在JBoss 6.4.0 EAP中使用Java客戶端。我測試此代碼:java.net.MalformedURLException:不支持的協議:遠程處理-jmx

public void testConnection() throws Exception 
    { 

     System.out.println("Starting lookup ..."); 

     ObjectName mBeanName = new ObjectName("java.lang:type=Runtime"); 
     String attributeName = "StartTime"; 

     String host = "104.233.103.41"; 
     int port = 9999; // management-native port 

     String urlString = System.getProperty("jmx.service.url", "service:jmx:remoting-jmx://" + host + ":" + port); 
     JMXServiceURL serviceURL = new JMXServiceURL(urlString); 
     JMXConnector jmxConnector = JMXConnectorFactory.connect(serviceURL, null); 
     MBeanServerConnection connection = jmxConnector.getMBeanServerConnection(); 

     Object attrVal = connection.getAttribute(mBeanName, attributeName); 
     System.out.println("Value via JMX: " + new Date((Long) attrVal)); 

    } 

我的項目是基於Maven的,所以我說這些依賴關係:

<dependencies> 
     <dependency> 
      <groupId>org.jboss.as</groupId> 
      <artifactId>jboss-as-ejb-client-bom</artifactId> 
      <type>pom</type> 
     </dependency> 
     <dependency> 
      <groupId>org.jboss.as</groupId> 
      <artifactId>jboss-as-jms-client-bom</artifactId> 
      <type>pom</type> 
     </dependency> 
    </dependencies> 

但是當我運行的代碼,我得到這個錯誤:

java.net.MalformedURLException: Unsupported protocol: remoting-jmx 
    at javax.management.remote.JMXConnectorFactory.newJMXConnector(JMXConnectorFactory.java:359) 
    at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:269) 

進入EAP -6.4.0/bin/client我發現這個描述:

jboss-client.jar是JBoss EAP 6的組合客戶端jar,用於在非Maven環境中使用。該jar應該僅用於獨立客戶端 ,而不是部署到JBoss EAP 6實例的部署。

此jar包含遠程JMS和EJB使用所需的類,它包含以下陰影文物:

org.jboss.spec.javax.jms:jboss-jms-api_1.1_spec 
org.jboss.spec.javax.transaction:jboss-transaction-api_1.1_spec 
org.jboss.spec.javax.ejb:jboss-ejb-api_3.1_spec 

org.jboss:jboss-ejb-client 
org.jboss:jboss-remote-naming 
org.jboss.logging:jboss-logging 
org.jboss.marshalling:jboss-marshalling 
org.jboss.marshalling:jboss-marshalling-river 
org.jboss.remoting3:jboss-remoting 
org.jboss.remoting3:remoting-jmx 
org.jboss.sasl:jboss-sasl 
org.jboss.xnio:xnio-api 
org.jboss.xnio:xnio-nio 
org.jboss.netty:netty 
org.hornetq:hornetq-core-client 
org.hornetq:hornetq-jms-client 

Maven用戶不應該使用這個罐子,而應使用以下BOM的依賴關係,而不是

<dependencies> 
    <dependency> 
     <groupId>org.jboss.as</groupId> 
     <artifactId>jboss-as-ejb-client-bom</artifactId> 
     <type>pom</type> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.as</groupId> 
     <artifactId>jboss-as-jms-client-bom</artifactId> 
     <type>pom</type> 
    </dependency> 
</dependencies> 

這是因爲使用maven與陰影jar有導致類版本衝突的非常高的機會,這就是爲什麼 我們不會將此jar發佈到maven存儲庫。

但我再次遇到這個錯誤。你能提出一些解決方案嗎?

回答

1

添加依賴於遠程-jmx的協議,每https://developer.jboss.org/thread/199914?tstart=0

<dependency> 
    <groupId>org.jboss.remoting3</groupId> 
    <artifactId>remoting-jmx</artifactId> 
    <version>1.0.1.Final</version> 
</dependency> 

org.jboss.remoting3:remoting-jmx作爲一個完整和工作POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>test</groupId> 
    <artifactId>test</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 

    <properties> 
     <maven.compiler.target>1.8</maven.compiler.target> 
     <maven.compiler.source>1.8</maven.compiler.source> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.jboss.as</groupId> 
      <artifactId>jboss-as-ejb-client-bom</artifactId> 
      <type>pom</type> 
      <version>7.2.0.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.jboss.as</groupId> 
      <artifactId>jboss-as-jms-client-bom</artifactId> 
      <type>pom</type> 
      <version>7.2.0.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.jboss.remoting3</groupId> 
      <artifactId>remoting-jmx</artifactId> 
      <version>1.0.1.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.12</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

</project> 

運行Maven構建與JBoss服務器上本地運行主機:

------------------------------------------------------- 
T E S T S 
------------------------------------------------------- 
Running test.ATest 
Starting lookup ... 
Dec 16, 2015 6:25:50 PM org.xnio.Xnio <clinit> 
INFO: XNIO Version 3.0.7.GA 
Dec 16, 2015 6:25:50 PM org.xnio.nio.NioXnio <clinit> 
INFO: XNIO NIO Implementation Version 3.0.7.GA 
Dec 16, 2015 6:25:50 PM org.jboss.remoting3.EndpointImpl <clinit> 
INFO: JBoss Remoting version 3.2.14.GA 
Value via JMX: Wed Dec 16 18:14:05 CST 2015 
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.89 sec 

Results : 

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 
+0

現在我得到'java.lang.AbstractMethodError:org.xnio.XnioWor ker.chooseThread()lorg/xnio/XnioIoThread;' –

+0

它爲我工作,檢查你的依賴性排序。我已經發布了我上面的完整測試項目。 –

+0

我得到'java.lang.RuntimeException:操作失敗,狀態爲WAITING \t at org.jboss.remoting3.jmx.RemotingConnector.connect(RemotingConnector.java:155)'你是否有同樣的問題? –