Cannot instantiate class: org.apache.activemq.jndi.ActiveMQInitialContextFactory, using jmeter-maven-plugin

12,046

I think you need to add activemq-all.jar dependency to /lib/ext folder of the JMeter, as described here, which is slightly different syntax than <dependency> you used:

        <plugin>
            <groupId>com.lazerycode.jmeter</groupId>
            <artifactId>jmeter-maven-plugin</artifactId>
            <version>2.0.3</version>
            <executions>
                <execution>
                    <id>jmeter-test</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>jmeter</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <jmeterExtensions>
                    <artifact>org.apache.activemq:activemq-all:jar:${activemq.version}</artifact>
                </jmeterExtensions>
            </configuration>
        </plugin>
Share:
12,046
DemeCarvO
Author by

DemeCarvO

Updated on June 04, 2022

Comments

  • DemeCarvO
    DemeCarvO almost 2 years

    In few words, if I run the JMeter plan test below from Maven it gives the outcome:

    javax.naming.NamingException: javax.naming.NoInitialContextException: Cannot instantiate class: org.apache.activemq.jndi.ActiveMQInitialContextFactory [Root exception is java.lang.ClassNotFoundException: org.apache.activemq.jndi.ActiveMQInitialContextFactory]
    

    Nevertheless, if I run the same JMeter plan test without maven plugin, it runs correctly.

    Providing more details:

    If I start the ActiveMQ that way (Windows command prompty):

    cd C:\_d\server\ActiveMQ\apache-activemq-5.9.0\bin
    activemq.bat
    

    then, I run the the exact same jmx script that way:

    jmeter.bat -n -t C:\_d\scripts\JMeter\JMS_SQS_MVN\SQS.jmx -l C:\temp\activemq.jtl -j C:\temp\activemq.jmx.log
    

    I can go to ActiveMq console and see the queue created labeled sqs_dummy_mvn6 as it appears in such jmx script.

    Now, tring the same script but via maven plugin, it simply shows "Cannot instantiate class: org.apache.activemq.jndi.ActiveMQInitialContextFactory". Well, I understand that, whenever I use jmeter-maven-plugin, an embedded jmeter and an embedded activemq are started and stopped during the verify phase.

    I am calling the same script via maven that way:

    mvn clean verify
    

    ...\artproducer\src\test\jmeter\SQS.jmx (below just the publisher is enabled; the subscribe is disabled to make the test a bit simpler)

    <?xml version="1.0" encoding="UTF-8"?>
    <jmeterTestPlan version="1.2" properties="2.9" jmeter="3.0 r1743807">
      <hashTree>
        <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Plano de Teste SQS" enabled="true">
          <stringProp name="TestPlan.comments"></stringProp>
          <boolProp name="TestPlan.functional_mode">false</boolProp>
          <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
          <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="Variáveis Definidas Pelo Usuário" enabled="true">
            <collectionProp name="Arguments.arguments"/>
          </elementProp>
          <stringProp name="TestPlan.user_define_classpath"></stringProp>
        </TestPlan>
        <hashTree>
          <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Grupo de Usuários - Consumers" enabled="true">
            <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
            <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Controlador de Iteração" enabled="true">
              <boolProp name="LoopController.continue_forever">false</boolProp>
              <stringProp name="LoopController.loops">1</stringProp>
            </elementProp>
            <stringProp name="ThreadGroup.num_threads">1</stringProp>
            <stringProp name="ThreadGroup.ramp_time">1</stringProp>
            <longProp name="ThreadGroup.start_time">1484067293000</longProp>
            <longProp name="ThreadGroup.end_time">1484067293000</longProp>
            <boolProp name="ThreadGroup.scheduler">false</boolProp>
            <stringProp name="ThreadGroup.duration"></stringProp>
            <stringProp name="ThreadGroup.delay"></stringProp>
          </ThreadGroup>
          <hashTree>
            <SubscriberSampler guiclass="JMSSubscriberGui" testclass="SubscriberSampler" testname="JMS Subscriber" enabled="false">
              <stringProp name="jms.jndi_properties">false</stringProp>
              <stringProp name="jms.initial_context_factory">org.apache.activemq.jndi.ActiveMQInitialContextFactory</stringProp>
              <stringProp name="jms.provider_url">tcp://localhost:61616</stringProp>
              <stringProp name="jms.connection_factory">ConnectionFactory</stringProp>
              <stringProp name="jms.topic">dynamicQueues/sqs_dummy_mvn6</stringProp>
              <stringProp name="jms.security_principle"></stringProp>
              <stringProp name="jms.security_credentials"></stringProp>
              <boolProp name="jms.authenticate">false</boolProp>
              <stringProp name="jms.iterations">1</stringProp>
              <stringProp name="jms.read_response">true</stringProp>
              <stringProp name="jms.client_choice">jms_subscriber_on_message</stringProp>
              <boolProp name="jms.stop_between_samples">true</boolProp>
              <stringProp name="jms.timeout">60000</stringProp>
              <boolProp name="jms.destination_static">false</boolProp>
            </SubscriberSampler>
            <hashTree>
              <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="false">
                <boolProp name="ResultCollector.error_logging">false</boolProp>
                <objProp>
                  <name>saveConfig</name>
                  <value class="SampleSaveConfiguration">
                    <time>true</time>
                    <latency>true</latency>
                    <timestamp>true</timestamp>
                    <success>true</success>
                    <label>true</label>
                    <code>true</code>
                    <message>true</message>
                    <threadName>true</threadName>
                    <dataType>true</dataType>
                    <encoding>false</encoding>
                    <assertions>true</assertions>
                    <subresults>true</subresults>
                    <responseData>false</responseData>
                    <samplerData>false</samplerData>
                    <xml>false</xml>
                    <fieldNames>true</fieldNames>
                    <responseHeaders>false</responseHeaders>
                    <requestHeaders>false</requestHeaders>
                    <responseDataOnError>false</responseDataOnError>
                    <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
                    <assertionsResultsToSave>0</assertionsResultsToSave>
                    <bytes>true</bytes>
                    <threadCounts>true</threadCounts>
                    <idleTime>true</idleTime>
                  </value>
                </objProp>
                <stringProp name="filename"></stringProp>
              </ResultCollector>
              <hashTree/>
            </hashTree>
            <ResultCollector guiclass="GraphVisualizer" testclass="ResultCollector" testname="Graph Results" enabled="false">
              <boolProp name="ResultCollector.error_logging">false</boolProp>
              <objProp>
                <name>saveConfig</name>
                <value class="SampleSaveConfiguration">
                  <time>true</time>
                  <latency>true</latency>
                  <timestamp>true</timestamp>
                  <success>true</success>
                  <label>true</label>
                  <code>true</code>
                  <message>true</message>
                  <threadName>true</threadName>
                  <dataType>true</dataType>
                  <encoding>false</encoding>
                  <assertions>true</assertions>
                  <subresults>true</subresults>
                  <responseData>false</responseData>
                  <samplerData>false</samplerData>
                  <xml>false</xml>
                  <fieldNames>true</fieldNames>
                  <responseHeaders>false</responseHeaders>
                  <requestHeaders>false</requestHeaders>
                  <responseDataOnError>false</responseDataOnError>
                  <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
                  <assertionsResultsToSave>0</assertionsResultsToSave>
                  <bytes>true</bytes>
                  <threadCounts>true</threadCounts>
                  <idleTime>true</idleTime>
                </value>
              </objProp>
              <stringProp name="filename"></stringProp>
            </ResultCollector>
            <hashTree/>
            <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="false">
              <boolProp name="ResultCollector.error_logging">false</boolProp>
              <objProp>
                <name>saveConfig</name>
                <value class="SampleSaveConfiguration">
                  <time>true</time>
                  <latency>true</latency>
                  <timestamp>true</timestamp>
                  <success>true</success>
                  <label>true</label>
                  <code>true</code>
                  <message>true</message>
                  <threadName>true</threadName>
                  <dataType>true</dataType>
                  <encoding>false</encoding>
                  <assertions>true</assertions>
                  <subresults>true</subresults>
                  <responseData>false</responseData>
                  <samplerData>false</samplerData>
                  <xml>false</xml>
                  <fieldNames>true</fieldNames>
                  <responseHeaders>false</responseHeaders>
                  <requestHeaders>false</requestHeaders>
                  <responseDataOnError>false</responseDataOnError>
                  <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
                  <assertionsResultsToSave>0</assertionsResultsToSave>
                  <bytes>true</bytes>
                  <threadCounts>true</threadCounts>
                  <idleTime>true</idleTime>
                </value>
              </objProp>
              <stringProp name="filename"></stringProp>
            </ResultCollector>
            <hashTree/>
            <PublisherSampler guiclass="JMSPublisherGui" testclass="PublisherSampler" testname="JMS Publisher" enabled="true">
              <stringProp name="jms.jndi_properties">false</stringProp>
              <stringProp name="jms.initial_context_factory">org.apache.activemq.jndi.ActiveMQInitialContextFactory</stringProp>
              <stringProp name="jms.provider_url">tcp://localhost:61616</stringProp>
              <stringProp name="jms.connection_factory">ConnectionFactory</stringProp>
              <stringProp name="jms.topic">dynamicQueues/sqs_dummy_mvn6</stringProp>
              <stringProp name="jms.expiration"></stringProp>
              <stringProp name="jms.priority"></stringProp>
              <stringProp name="jms.security_principle"></stringProp>
              <stringProp name="jms.security_credentials"></stringProp>
              <stringProp name="jms.text_message">testando a partir do JMeter4444</stringProp>
              <stringProp name="jms.input_file"></stringProp>
              <stringProp name="jms.random_path"></stringProp>
              <stringProp name="jms.config_choice">jms_use_text</stringProp>
              <stringProp name="jms.config_msg_type">jms_text_message</stringProp>
              <stringProp name="jms.iterations">1</stringProp>
              <boolProp name="jms.authenticate">false</boolProp>
              <elementProp name="jms.jmsProperties" elementType="JMSProperties">
                <collectionProp name="JMSProperties.properties"/>
              </elementProp>
              <boolProp name="jms.destination_static">false</boolProp>
            </PublisherSampler>
            <hashTree>
              <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="false">
                <boolProp name="ResultCollector.error_logging">false</boolProp>
                <objProp>
                  <name>saveConfig</name>
                  <value class="SampleSaveConfiguration">
                    <time>true</time>
                    <latency>true</latency>
                    <timestamp>true</timestamp>
                    <success>true</success>
                    <label>true</label>
                    <code>true</code>
                    <message>true</message>
                    <threadName>true</threadName>
                    <dataType>true</dataType>
                    <encoding>false</encoding>
                    <assertions>true</assertions>
                    <subresults>true</subresults>
                    <responseData>false</responseData>
                    <samplerData>false</samplerData>
                    <xml>false</xml>
                    <fieldNames>true</fieldNames>
                    <responseHeaders>false</responseHeaders>
                    <requestHeaders>false</requestHeaders>
                    <responseDataOnError>false</responseDataOnError>
                    <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
                    <assertionsResultsToSave>0</assertionsResultsToSave>
                    <bytes>true</bytes>
                    <threadCounts>true</threadCounts>
                    <idleTime>true</idleTime>
                  </value>
                </objProp>
                <stringProp name="filename"></stringProp>
              </ResultCollector>
              <hashTree/>
            </hashTree>
          </hashTree>
        </hashTree>
      </hashTree>
    </jmeterTestPlan>
    

    ...\artproducer\target\jmeter\results\20170111-SQS.jtl

    <?xml version="1.0" encoding="UTF-8"?>
    <testResults version="1.2">
    <sample t="0" it="0" lt="0" ts="0" s="false" lb="JMS Publisher" rc="000" rm="javax.naming.NamingException: javax.naming.NoInitialContextException: Cannot instantiate class: org.apache.activemq.jndi.ActiveMQInitialContextFactory [Root exception is java.lang.ClassNotFoundException: org.apache.activemq.jndi.ActiveMQInitialContextFactory]" tn="Grupo de Usuários - Consumers 1-1" dt="" by="0" ng="1" na="1"/>
    
    </testResults>
    

    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>grpactivemq</groupId>
        <artifactId>artproducer</artifactId>
        <!-- <packaging>pom</packaging> -->
        <packaging>war</packaging>
        <version>0.0.1-SNAPSHOT</version>
        <name>artproducer Maven Webapp</name>
        <url>http://maven.apache.org</url>
        <!-- enviando queue para o broker do ActiveMq iniciado como serviço -->
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <jdk.version>1.8</jdk.version>
            <junit.version>4.11</junit.version>
            <activemq.version>5.9.0</activemq.version>
            <spring.version>4.1.5.RELEASE</spring.version>
        </properties>
    
        <dependencies>
            <!-- activemq -->
            <dependency>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-all</artifactId>
                <version>${activemq.version}</version>
            </dependency>
    
            <!-- Spring -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jms</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <!-- xbean -->
            <dependency>
                <groupId>org.apache.xbean</groupId>
                <artifactId>xbean-spring</artifactId>
                <version>3.7</version>
            </dependency>
    
            <!-- junit -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <!-- <scope>test</scope> -->
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
    
    <!--            <plugin>
                    <artifactId>exec-maven-plugin</artifactId>
                    <groupId>org.codehaus.mojo</groupId>
                    <executions>
                        <execution>
                            <id>Run load Test</id>
                            <phase>generate-sources</phase>
                            <goals>
                                <goal>exec</goal>
                            </goals>
                            <configuration>
                                <executable>${basedir}/scripts/jmeter_exe.sh</executable>
                            </configuration>
                        </execution>
                    </executions>
                </plugin> -->
    
                <plugin>
                    <groupId>com.lazerycode.jmeter</groupId>
                    <artifactId>jmeter-maven-plugin</artifactId>
                    <version>2.0.3</version>
                    <executions>
                        <execution>
                            <id>jmeter-test</id>
                            <phase>verify</phase>
                            <goals>
                                <goal>jmeter</goal>
                            </goals>
                        </execution>
                    </executions>
                    <dependencies>
                        <dependency>
                            <groupId>org.apache.activemq</groupId>
                            <artifactId>activemq-all</artifactId>
                            <version>${activemq.version}</version>
                        </dependency>
                    </dependencies>  
                </plugin>
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>${jdk.version}</source>
                        <target>${jdk.version}</target>
                    </configuration>
                </plugin>
            </plugins>
    
            <finalName>artproducer</finalName>
    
        </build>
    </project>
    
  • DemeCarvO
    DemeCarvO over 7 years
    Kiril, it is done. As an additional comment, what is the difference between <configuration><jmeterExtensions><artifact> and <dependencies><dependency>...<artifactId> under <build><plugin>? In oother words, what is the difference between your approach and mine. PS. Future readers maybe interested to know that it only works after I followed Kiril answer and I started ActiveMQ service as well, so, I am assuming that such maven plugin doesn't start an ActiveMQ embedded, very different from my assumption in my question.
  • Ardesco
    Ardesco over 7 years
    In 1.x versions of the plugin dependencies were pulled in by applying specific dependencies within the plugin configuration in the POM. We changed this for the 2.x versions of the plugin because we change the way we deal with getting and applying different artefacts. The current implementation should be more reliable.
  • UBIK LOAD PACK
    UBIK LOAD PACK over 6 years
    At the downvoter, can you please test the answer ? Member of our team is a core developper of jmeter-maven-plugin, so the answer is valid. Not very nice to downvote !
  • Ardesco
    Ardesco over 6 years
    The answer by Ubik Load Pack talking about the 2.6.0 version of the plugin is also correct and the way to do it moving forward.
  • Marek Bernád
    Marek Bernád about 6 years
    Same, this answer helped me to fix problems... just download and add this: java2s.com/Code/Jar/a/Downloadactivemqalljar.htm file to /lib/ext and do not forget to rerun / restart Jmeter program to load .jar dependencies