Exemple de MDB pour la réception des demandes d'appel d'IMS

Comme un MDB (bean géré par message) implémente l'interface InboundListener, vous devez implémenter les méthodes onMessage() et onNotification() qui servent respectivement au traitement des messages synchrones et au traitement des messages asynchrones.

L'exemple suivant montre la classe d'implémentation d'un bean MDB (IMSCalloutIVPMDBBean) qui est configuré pour écouter à la fois les messages synchrones et les messages asynchrones émis par IMS.

package ejbs;

import java.io.IOException;
import javax.resource.ResourceException;
import javax.resource.cci.Record;
import com.ibm.connector2.ims.ico.IMSInputStreamRecord;
import commonj.connector.runtime.InboundInteractionSpec;

/**
 * Classe d'implémentation du bean Enterprise : IMSInboundMessage
 */
public class IMSCalloutIVPMDBBean
	implements
		javax.ejb.MessageDrivenBean,
		com.ibm.j2ca.base.ExtendedInboundListener {

	private javax.ejb.MessageDrivenContext fMessageDrivenCtx;

	/**
	 * getMessageDrivenContext
	 */
	public javax.ejb.MessageDrivenContext getMessageDrivenContext() {
		return fMessageDrivenCtx;
	}

	/**
	 * setMessageDrivenContext
	 */
	public void setMessageDrivenContext(javax.ejb.MessageDrivenContext ctx) {
		fMessageDrivenCtx = ctx;
	}

	/**
	 * ejbCreate
	 */
	public void ejbCreate() {
	}

	/**
	 * onMessage
	 */
	public void onMessage(javax.jms.Message msg) {
	}

	/**
	 * ejbRemove
	 */
	public void ejbRemove() {
	}

	/**
	  * onMessage
	  */
	public javax.resource.cci.Record onMessage(
		javax.resource.cci.Record arg0,
		javax.resource.cci.InteractionSpec arg1)
		throws javax.resource.ResourceException {
		
		return processSyncMessageReceived(arg1);
	}

	/**
	 * onNotification
	 */
	public void onNotification(
		javax.resource.cci.Record arg0,
		javax.resource.cci.InteractionSpec arg1)
		throws javax.resource.ResourceException {
		
		processAsyncMessageReceived(arg0);	
	}

	public void onNotification(Record arg0) throws ResourceException {
		processAsyncMessageReceived(arg0);	
	}

	public Record onMessage(Record arg0) throws ResourceException {
		return processSyncMessageReceived(arg0);
	}

	public Record onMessage(InboundInteractionSpec arg0, Record arg1) 
throws ResourceException {
		return processSyncMessageReceived(arg1);
	}

	public void onNotification(InboundInteractionSpec arg0, Record arg1) 
throws ResourceException {
		processAsyncMessageReceived(arg1);	
	}
	
	/*
	 * Traiter les demandes d'appel synchrones d'IMS et renvoyer une réponse
	 */
	public Record processSyncMessageReceived(Object event) {
		
        SYNCCALLOUTREQUEST request = new SYNCCALLOUTREQUEST();
		SYNCCALLOUTRESPONSE response = new SYNCCALLOUTRESPONSE();
    	
    	try {
    		// Demande
    		request.setBytes(((IMSInputStreamRecord)event).getBytes());
			
			System.out.println("Demande synchrone d'IMS : " +
					request.getSync__callout__request__str());

			// Réponse
			response.setSync__callout__response__str("T'AS LE BONJOUR DU MDB WEBSPHERE");

			System.out.println("Réponse synchrone du MDB WAS : " + 
					response.getSync__callout__response__str());

    	} catch (IOException e) {
        	System.err.println(e);
       }
        		
		return response;
	}
	
	/*
	 * Recevoir des demandes d'appel asynchrones d'IMS
	 */
	public void processAsyncMessageReceived(Object event) {
        ASYNCCALLOUTREQUEST request = new ASYNCCALLOUTREQUEST();
    	
    	try {
    		request.setBytes(((IMSInputStreamRecord)event).getBytes());
			
			System.out.println("Demande asynchrone d'IMS : " + 
				request.getAsync__callout__request__str());
			
        } catch (IOException e) {
        	System.err.println(e);
        }
	}
}

Vos commentaires