2016-11-30 11 views
0

トピックを自分のコンテナに入れることができるかどうかテストしようとしています。しかし、私の工場内でcreateConnectionメソッドを呼び出すときには、nullポインタ例外が発生し続けます。ここに私のコードが実行されている方法です。ArquillianとJMSの統合テスト

@RunWith(Arquillian.class) 
public class TopicPublishTest { 

    @Resource(mappedName = "java:jboss/jms/topic/sample/MySample") 
    private Topic topic; 

    @Resource(mappedName = "java:/ConnectionFactory") 
    private ConnectionFactory factory; 

    @Test 
    public void testMessageInTopic() throws Exception { 
     final Connection connection = factory.createConnection(); 
     connection.start(); 
     final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 

     final MessageConsumer consumer = session.createConsumer(topic); 
     final TextMessage message = (TextMessage) consumer.receiveNoWait(); 
     System.out.println("### the mssage is " + message); 
    } 

} 

私はこのようにArquillianと展開があります。

@Deployment(name = "my-service", order = 1, testable = true) 
public static Archive<?> targetDeployment() { 
    final WebArchive archive = ShrinkWrap.createFromZipFile(WebArchive.class, new File(
      "target/my-service.war")); 
    return archive; 
} 

をマイJBossのEAP 6.0.0 G2の実装は、次のコード行が含まれています

<connection-factory name="InVmConnectionFactory"> 
    <connectors> 
     <connector-ref connector-name="in-vm"/> 
    </connectors> 
    <entries> 
     <entry name="java:/ConnectionFactory"/> 
    </entries> 
</connection-factory> 

.... 

<jms-topic name="MySample"> 
    <entry name="java:jboss/jms/topic/sample/MySample"/> 
    <entry name="java:jboss/exported/jms/topic/sample/MySample"/> 
</jms-topic> 

私は私の人生のために、なぜ

final Connection connection = factory.createConnection(); 
を把握することはできません

はNullPinterを投げています。明らかに、工場はインスタンス化することができず、Arquillianが私のjndiバインディングを見ることができないと私は信じています。私のコードの大半は、すべてが機能することに向けた良い足がかりだった、私は2つの主要コンポーネントが組み込まれたテストをトリガするために欠けていたが

@Resource(mappedName = "/ConnectionFactory") 
@Resource(mappedName = "ConnectionFactory") 

答えて

0

:しかし、工場のリソースをロードし、これらの組み合わせをしようとすると同じエラーがスローされます、テストを開始するための正しい注釈、およびjmsを待つ正しい方法。

@Test 
@OperateOnDeployment("my-service") 
public void testMessageInTopic() throws Exception { 
    // insert the message into the topic 
    final TextMessage message = (TextMessage) consumer.receive(15000); 
    // perform assertions after message received, not null, text, etc 
} 

元のリソース呼び出しを含め、テストケース内のその他すべてが正しく設定されています。

@Resource(mappedName = "java:jboss/jms/topic/sample/MySample") 
private Topic topic; 

@Resource(mappedName = "java:/ConnectionFactory") 
private ConnectionFactory factory;