In BeanConnect geben Sie beim Deployment einer Managed Connection Factory den EIS Partner an, der über diese Managed Connection Factory angesprochen werden soll. Sie verwenden die Methode lookup(), um nach der Connection Factory zu suchen und um ein Connectivity Objekt durch den Aufruf der Methode getConnection() zu erhalten.
Über die CCI-Verbindung, die Sie von der CCI-Connection Factory erhalten, können Sie ein Interaction Objekt anfordern. Das Interaction Objekt implementiert eine execute()-Methode, um eine Interaktion zu initiieren. Die Methode execute() kennt außer einem BCCciInteractionSpec-Objekt auch noch Input- und Output-Datensatz. In diesem BCCciInteractionSpec-Objekt definieren Sie ein interactionVerb (SYNC_SEND, SYNC_SEND_RECEIVE oder SYNC_RECEIVE) und gleichzeitig den Namen der EIS-Anwendung.
Somit können Sie eine Interaktion durch Bereitstellung passender Daten steuern, anstatt Methoden aufzurufen. Die Standardeinstellung für interactionVerb lautet SYNC_SEND_RECEIVE.
Weitere Einzelheiten hierzu finden Sie in der JavaDoc zu BeanConnect.
Programm-Framework für dialogbasierte Kommunikation (CCI)
Für dialogbasierte Kommunikation mit der Serveranwendung mittels des CCI-Interfaces in BeanConnect führen Sie folgende Aktionen aus:
Richten Sie den Initial-Kontext ein:
javax.naming.InitialContext ic = new InitialContext();Referenzieren Sie eine Connection Factory:
javax.resource.cci.ConnectionFactory cf =
(ConnectionFactory)ic.lookup("java:comp/env/eis/myEIS");Der von
eis/myEISreferenzierten Connection Factory wird ein Dialog-Service als Standard-Service zugewiesen.Richten Sie die Verbindung ein:
javax.resource.cci.Connection con =(Connection)cf.getConnection();Alternativ kann eine EJB sicherheitsbezogene Daten (Benutzerkennung/Passwort) in einem
BCCciConnectionSpecObjekt an BeanConnect weiterleiten. In diesem Fall geben Sie ein:net.fsc.jca.communication.cci.BCCciConnectionSpec; cred = new BCCciConnectionSpec("myuser", "mypass"); javax.resource.cci.Connection con = (Connection)cf.getConnection(cred);Erstellen Sie ein
Interaction-Objekt und einInteractionSpec-Objekt:Interaction ix = (Interaction)con.createInteraction(); BCCciInteractionSpec is = new BCCciInteractionSpec(InteractionSpec.SYNC_SEND_RECEIVE);
Während ein
Interaction-Objekt aus demConnection-Objekt erstellt wird, für das es verwendet werden soll, wird dasInteractionSpec-Objekt mit einem Konstruktor der Implementierungsklasse erstellt.Ein
Interaction-Objekt ermöglicht einer EJB die Kommunikation mit einer EIS-Anwendung. EinInteractionSpec-Objekt verfügt über Properties, mit denen eine Interaktion mit dieser EIS-Anwendung durchgeführt werden kann. Es wird von einer Interaktion zur Ausführung der angegebenen Funktion in der EIS-Anwendung verwendet.
Erstellen Sie ein
BCRecord-Objekt, das als Container für die Nachricht an das EIS dient, sowie ein weiteresBCRecord-Objekt, das als Container für die Reply Message dient. Dies geschieht mittels einesBCRecordFactory-Objekts:net.fsc.jca.communication.cci.BCRecordFactory rf = (BCRecordFactory)cf.getRecordFactory(); net.fsc.jca.communication.cci.BCRecord reqrec = (BCRecord) rf.createBCRecord("request"); net.fsc.jca.communication.cci.BCRecord replrec = (BCRecord) rf.createBCRecord("reply");Nach dem Erstellen enthält ein
BCRecord-Objekt ein leeresOltpMessage-Objekt, dasaus demBCRecord-Objekt abgerufen werden kann. In der Folge kann dasBCRecord-Objekt mitOltpMessageRecord- oderOltpMessagePart-Objekten bestückt werden.Versorgen Sie das
OltpMessage-Objekt der für das EIS bestimmten Nachricht mit Daten (hier: zweiOltpMessagePart-Objekte):net.fsc.jca.communication.OltpMessage request = reqrec.getOltpMessage(); request.addMessagePart("request - message part1"); request.addMessagePart("request - message part2");Führen Sie die Interaktion aus:
ix.execute(is, reqrec, replrec);Das aus diesem Aufruf zurückgegebene
BCRecord-Objekt enthält wieder einOltpMessage-Objekt, das seinerseits die Antwort enthält, die von der EIS-Anwendung in einemOltpMessageRecordoder in einemOltpMessagePart-Objekt gesendet wurde.Reply Message empfangen:
net.fsc.jca.communication.OltpMessage reply = replrec.getOltpMessage(); java.util.Iterator<net.fsc.jca.communication.OltpMessagePart> it = reply.getMessageParts(); net.fsc.jca.communication.OltpMessagePart msgPart; String msgText=""; while (it.hasNext()) { msgPart = (OltpMessagePart) it.next(); msgText += msgPart.getText(); }Schließen Sie die Verbindung:
con.close();
Weitere Informationen zur Programmierung der CCI-Interfaces finden Sie in der JavaDoc zur CCI.
Ein Code-Beispiel finden Sie im Beispiel 8 im Code-Beispiele für Outbound-Kommunikation.
Programm-Framework für asynchrone Kommunikation (CCI)
Für asynchrone Kommunikation mit der Serveranwendung mittels des CCI-Interfaces in BeanConnect führen Sie folgende Aktionen aus:
Richten Sie den Initial-Kontext ein:
javax.naming.Context ic = new InitialContext();Referenzieren Sie eine Connection Factory:
javax.resource.cci.ConnectionFactory cf =
(ConnectionFactory)ic.lookup("java:comp/env/eis/myAsyncEIS");Richten Sie die Verbindung ein:
javax.resource.cci.Connection con =(Connection)cf.getConnection();Alternativ kann eine EJB sicherheitsbezogene Daten (Benutzerkennung/Passwort) in einem
BCCciConnectionSpecObjekt an BeanConnect weiterleiten. In diesem Fall geben Sie ein:net.fsc.jca.communication.cci.BCCciConnectionSpec cred = new BCCciConnectionSpec("myuser", "mypass"); javax.resource.cci.Connection con = (Connection)cf.getConnection(cred);Erstellen Sie ein
Interaction-Objekt und einInteractionSpec-Objekt:Ein
Interaction-Objekt ermöglicht einer EJB die Kommunikation mit einer Partneranwendung. EinInteractionSpec-Objekt verfügt über Properties, mit denen eine Interaktion mit einer Partneranwendung durchgeführt werden kann. Es wird von einer Interaktion zur Ausführung der angegebenen Funktion in der EIS-Anwendung verwendet.Während ein
Interaction-Objekt aus demconnection-Objekt erstellt wird, für das es verwendet werden soll, wird dasInteractionSpec-Objekt mit einem Konstruktor der Implementierungsklasse erstellt:Interaction ix = (Interaction)con.createInteraction(); net.fsc.jca.communication.cci.BCCciInteractionSpec is = new BCCciInteractionSpec(InteractionSpec.SYNC_SEND, "ASYNTAC");Die Zuweisung des asynchronen Services
ASYNTAClegt fest, dass asynchrone Kommunikation stattfindet.Hier erzielt
SYNC_SENDdieselbe Wirkung wie einflush()-Aufruf bei der Verwendung der BeanConnect-spezifischen Interfaces.Erstellen Sie ein
BCRecord-Objekt, das als Container für die Anforderungsnachricht dient. Dies geschieht mit Hilfe einerrecordFactory:net.fsc.jca.communication.cci.BCRecordFactory rf= (BCRecordFactory)cf.getRecordFactory(); net.fsc.jca.communication.cci.BCRecord reqrec = rf.createBCRecord("request");Nach dem Erstellen enthält ein
BCRecord-Objekt ein leeresOltpMessage-Objekt, das aus demBCRecord-Objekt abgerufen werden kann, und dem dannOltpMessageRecord-Objekte und/oderOltpMessagePart-Objekte zugewiesen werden können.Versorgen Sie das
OltpMessage-Objekt des Anforderungsdatensatzes mit Daten (hier:zweiOltpMessagePart-Objekte):net.fsc.jca.communication.OltpMessage request = reqrec.getOltpMessage(); request.addMessagePart("request - message part1"); request.addMessagePart("request - message part2");Führen Sie die Interaktion aus:
ix.execute(is, reqrec);Schließen Sie die Verbindung:
con.close();