2016-03-24 12 views
0

Meine Message-Driven Bean verbinden:Wie Message-Driven Bean zu WebSphere MQ-Warteschlange ohne Aktivierungsspezifikation oder Listener-Port

@MessageDriven(
    activationConfig = { @ActivationConfigProperty(
      propertyName = "destination",  propertyValue = "jms/mytestqueue"), @ActivationConfigProperty(
      propertyName = "destinationType", propertyValue = "javax.jms.Queue") 
    }) 
public class MessageQueueInputBean implements MessageListener { 
    @Override 
    public void onMessage(Message msg) { 

in einer Web-Anwendung

befindet sich
<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <display-name>Test WebApp</display-name> 

Mein Ziel ist Verbinden Sie die MDB mit einer MQ-Warteschlange und einer MQ-Verbindungsfactory. in dieser Konstellation jedoch bekam ich nur die gefürchtete Nachricht

REQUIRED_BINDING_NOT_FOUND für MDB

wenn es auf einem WebSphere 8.5.5 bereitstellen.

Deshalb habe ich Datei ibm-ejb-jar-bnd.xml, die der Einsatz zum Erfolg führt:

<?xml version="1.0" encoding="UTF-8"?> 
<ejb-jar-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd" version="1.0"> 
    <message-driven name="MessageQueueGuidewireBatchInputBean"> 
     <jca-adapter activation-spec-binding-name="jms/myTestActivationSpecification" /> 
    </message-driven> 
</ejb-jar-bnd> 

Offenbar diese Konfiguration nur jca-adapter ermöglicht, was zu einer „Aktivierungsspezifikation“ bezieht sich in der WAS oder ein Listener-Port.

Mein Problem ist, dass, soweit ich weiß, im Zielsystem (von Leuten aus einem anderen Unternehmen verwaltet) keine Aktivierungsspezifikation existiert. Es gibt stattdessen eine Warteschlange und eine Verbindungsfactory.

Ist es möglich, die MDB nur für die Warteschlange und die Verbindungsfactory bereitzustellen?

+0

Ich habe nicht jedes Detail gelesen, aber bedenken Sie, dass Sie nicht nur eine Verbindung zu einem Endpunkt herstellen. Sie greifen auch auf einen Thread-Pool zu, dessen Threads zum Versand Ihrer MDBs verwendet werden (mit allen üblichen Service- und API-Qualitäten). Aus diesem Grund benötigen Sie das zusätzliche Konstrukt der Aktivierungsspezifikation oder des Listener-Ports. –

+0

Wenn das Zielsystem WebSphere ist, haben Sie immer Aktivierungsspezifikationen und/oder Listener-Ports. Es wird über die Admin-Konsole konfiguriert. – Gas

Antwort

1

Nein. Sie stellen nicht nur eine Verbindung zu einem Endpunkt her. Sie greifen auch auf einen Thread-Pool zu, dessen Threads zum Versand Ihrer MDBs verwendet werden (mit allen üblichen Service- und API-Qualitäten). Aus diesem Grund benötigen Sie das zusätzliche Konstrukt der Aktivierungsspezifikation oder des Listener-Ports.

+0

Thx zu Ihrer Information, Scott. Wir werden für eine Aktivierungsspezifikation gehen. – bgerth