ant Failed to retrieve RMIServer stub NameNotFoundException jmxrmi

2.5k Views Asked by At

I have alfresco 4.0d installed and I am trying to set up monitoring using cacti. I have got the template from percona. When i try to run the following command I get an error. I used the jar file as mentioned in the percona link from the tomcat/lib directory.

/opt/apache-ant-1.8.1/bin/ant -f jmx-monitor.xml -v -d

    Apache Ant version 1.8.1 compiled on April 30 2010
Buildfile: /home/cacti/jmx-monitor.xml
Adding reference: ant.PropertyHelper
Detected Java version: 1.6 in: /opt/alfresco-4.0.d/java/jre
Detected OS: Linux
Adding reference: ant.ComponentHelper
Setting ro project property: ant.file -> /home/cacti/jmx-monitor.xml
Setting ro project property: ant.file.type -> file
Adding reference: ant.projectHelper
Adding reference: ant.parsing.context
Adding reference: ant.targets
parsing buildfile /home/cacti/jmx-monitor.xml with URI = file:/home/cacti/jmx-monitor.xml
Setting ro project property: ant.project.name -> JMX Monitor
Adding reference: JMX Monitor
Setting ro project property: ant.project.default-target -> status
Setting ro project property: ant.file.JMX Monitor -> /home/cacti/jmx-monitor.xml
Setting ro project property: ant.file.type.JMX Monitor -> file
Project base dir set to: /home/cacti
 +Target: 
 +Target: status
Adding reference: ant.LocalProperties
parsing buildfile jar:file:/opt/apache-ant-1.8.1/lib/ant.jar!/org/apache/tools/ant/antlib.xml with URI = jar:file:/opt/apache-ant-1.8.1/lib/ant.jar!/org/apache/tools/ant/antlib.xml from a zip file
Setting project property: jmx.server.name -> hector
Setting project property: jmx.server.port -> 50500
Setting ro project property: ant.project.invoked-targets -> status
Attempting to create object of type org.apache.tools.ant.helper.DefaultExecutor
Adding reference: ant.executor
Build sequence for target(s) `status' is [status]
Complete build sequence is [status, ]

status:
parsing buildfile jar:file:/home/cacti/.ant/lib/catalina-ant.jar!/org/apache/catalina/ant/jmx/antlib.xml with URI = jar:file:/home/cacti/.ant/lib/catalina-ant.jar!/org/apache/catalina/ant/jmx/antlib.xml from a zip file
Class org.apache.catalina.ant.jmx.JMXAccessorTask loaded from parent loader (parentFirst)
 +Datatype antlib:org.apache.catalina.ant.jmx:open org.apache.catalina.ant.jmx.JMXAccessorTask
Class org.apache.catalina.ant.jmx.JMXAccessorSetTask loaded from parent loader (parentFirst)
 +Datatype antlib:org.apache.catalina.ant.jmx:set org.apache.catalina.ant.jmx.JMXAccessorSetTask
Class org.apache.catalina.ant.jmx.JMXAccessorGetTask loaded from parent loader (parentFirst)
 +Datatype antlib:org.apache.catalina.ant.jmx:get org.apache.catalina.ant.jmx.JMXAccessorGetTask
Class org.apache.catalina.ant.jmx.JMXAccessorInvokeTask loaded from parent loader (parentFirst)
 +Datatype antlib:org.apache.catalina.ant.jmx:invoke org.apache.catalina.ant.jmx.JMXAccessorInvokeTask
Class org.apache.catalina.ant.jmx.JMXAccessorQueryTask loaded from parent loader (parentFirst)
 +Datatype antlib:org.apache.catalina.ant.jmx:query org.apache.catalina.ant.jmx.JMXAccessorQueryTask
Class org.apache.catalina.ant.jmx.JMXAccessorCreateTask loaded from parent loader (parentFirst)
 +Datatype antlib:org.apache.catalina.ant.jmx:create org.apache.catalina.ant.jmx.JMXAccessorCreateTask
Class org.apache.catalina.ant.jmx.JMXAccessorUnregisterTask loaded from parent loader (parentFirst)
 +Datatype antlib:org.apache.catalina.ant.jmx:unregister org.apache.catalina.ant.jmx.JMXAccessorUnregisterTask
Class org.apache.catalina.ant.jmx.JMXAccessorEqualsCondition loaded from parent loader (parentFirst)
 +Datatype antlib:org.apache.catalina.ant.jmx:equals org.apache.catalina.ant.jmx.JMXAccessorEqualsCondition
Class org.apache.catalina.ant.jmx.JMXAccessorCondition loaded from parent loader (parentFirst)
 +Datatype antlib:org.apache.catalina.ant.jmx:condition org.apache.catalina.ant.jmx.JMXAccessorCondition

BUILD FAILED
/home/cacti/jmx-monitor.xml:29: java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.NameNotFoundException: jmxrmi
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:338)
    at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248)
    at org.apache.catalina.ant.jmx.JMXAccessorTask.createJMXConnection(JMXAccessorTask.java:385)
    at org.apache.catalina.ant.jmx.JMXAccessorTask.accessJMXConnection(JMXAccessorTask.java:441)
    at org.apache.catalina.ant.jmx.JMXAccessorTask.getJMXConnection(JMXAccessorTask.java:479)
    at org.apache.catalina.ant.jmx.JMXAccessorTask.execute(JMXAccessorTask.java:346)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:390)
    at org.apache.tools.ant.Target.performTasks(Target.java:411)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1397)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1366)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1249)
    at org.apache.tools.ant.Main.runBuild(Main.java:801)
    at org.apache.tools.ant.Main.startAnt(Main.java:218)
    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
Caused by: javax.naming.NameNotFoundException: jmxrmi
    at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:99)
    at com.sun.jndi.toolkit.url.GenericURLContext.lookup(GenericURLContext.java:185)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(RMIConnector.java:1886)
    at javax.management.remote.rmi.RMIConnector.findRMIServer(RMIConnector.java:1856)
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:257)
    ... 22 more

Total time: 0 seconds

The contents of jmx-monitor.xml is as follows

    <project name="JMX Monitor" 
        xmlns:jmx="antlib:org.apache.catalina.ant.jmx" 
        default="status"
        basedir=".">
    <property name="jmx.server.name" value="hector" />
    <property name="jmx.server.port" value="50500" />

    <target name="status" description="Show JMX Cluster state">
        <jmx:open
            host="${jmx.server.name}"
            port="${jmx.server.port}"
            username="controlRole"
            password="change_asap"/>
        <jmx:get
            name="java.lang:type=Memory" 
            attribute="HeapMemoryUsage"
            resultproperty="HeapMemoryUsage"
            />
        <jmx:get
            name="java.lang:type=Memory" 
            attribute="NonHeapMemoryUsage"
            resultproperty="NonHeapMemoryUsage"
            />
        <jmx:get
            name="java.lang:type=OperatingSystem"
            attribute="OpenFileDescriptorCount"
            resultproperty="OpenFileDescriptorCount"
            />
        <jmx:get
            name="java.lang:type=OperatingSystem"
            attribute="MaxFileDescriptorCount"
            resultproperty="MaxFileDescriptorCount"
            />
            <jmx:get
                    name="Catalina:type=ThreadPool,name=${jmx.catalina.threadpool.name}"
                    attribute="currentThreadsBusy"
                    resultproperty="currentThreadsBusy"
                    />
            <jmx:get
                    name="Catalina:type=ThreadPool,name=${jmx.catalina.threadpool.name}"
                    attribute="currentThreadCount"
                    resultproperty="currentThreadCount"
                    />
            <jmx:get
                    name="Catalina:type=ThreadPool,name=${jmx.catalina.threadpool.name}"
                    attribute="maxThreads"
                    resultproperty="maxThreads"
                    />
    <echo>heap_memory_used: ${HeapMemoryUsage.used}
heap_memory_committed: ${HeapMemoryUsage.committed}
heap_memory_max: ${HeapMemoryUsage.max}
non_heap_memory_used: ${NonHeapMemoryUsage.used}
non_heap_memory_committed: ${NonHeapMemoryUsage.committed}
non_heap_memory_max: ${NonHeapMemoryUsage.max}
open_file_descriptors: ${OpenFileDescriptorCount}
max_file_descriptors: ${MaxFileDescriptorCount}
current_threads_busy: ${currentThreadsBusy}
current_thread_count: ${currentThreadCount}
max_threads: ${maxThreads}
</echo>
    </target>

</project>

UPDATE

I can monitor something using jconsole on windows 64bit once I have set the required values.

### RMI service ports ###
alfresco.rmi.services.port=50500
monitor.rmi.service.port=50508
alfresco.rmi.services.external.host=172.16.0.49

And on ctl.sh - -Dcom.sun.management.jmxremote=true -Djava.rmi.server.hostname=172.16.0.36

My cacti server is 172.16.0.15 and my windows 64bit with jconsole is 172.16.0.49 and my alfresco server is 172.16.0.36. If i can do it with jconsole how can i monitor with cacti?

When i run ant -e -q -f jmx-monitor.xml i get the following

BUILD FAILED
/home/cacti/jmx-monitor.xml:22: Problem: failed to create task or type antlib:org.apache.catalina.ant.jmx:open
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.
No types or tasks have been defined in this namespace yet

This appears to be an antlib declaration. 
Action: Check that the implementing library exists in one of:
        -/usr/share/ant/lib
        -/root/.ant/lib
        -a directory added on the command line with the -lib argument

I have tried using ports 9012, 50500, 50508

On jconsole i use the following command service:jmx:rmi:///jndi/rmi://172.16.0.36:50500/alfresco/jmxrmi and it works with the credentials in webapps/alfresco/WEB-INF/classes/alfresco/alfresco-jmxrmi.*

I have updated setenv.sh and added

CATALINA_OPTS="-Dcom.sun.management.jmxremote
  -Dcom.sun.management.jmxremote.port=%9012%
  -Dcom.sun.management.jmxremote.ssl=false
  -Dcom.sun.management.jmxremote.authenticate=false"
export CATALINA_OPTS

I can monitor tomcat using jconsole url: service:jmx:rmi:///jndi/rmi://172.16.0.36:9012/jmxrmi

1

There are 1 best solutions below

2
On

JMX isn't available in Alfresco Community Edition.