0

My problem is that I am new in jpos, and I want to test my application, my application consist of having a Server A that Link between Server B and Client (requester) So I have to implement a client to send a message to server A, then forwarding the message to server B, then waiting to response from Server B and forward it to Client, the server A is listening On 8001 and forward the messages from client via port 8000 and host address 127.0.0.1 to server B, this is my final implementation:

My Generic Packager (basic.xml):

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE isopackager SYSTEM "genericpackager.dtd">
<isopackager>
  <isofield
      id="0"
      length="4"
      name="MESSAGE TYPE INDICATOR"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="1"
      length="64"
      name="BIT MAP"
      class="org.jpos.iso.IFA_BITMAP"/>
  <isofield
      id="3"
      length="6"
      name="PROCESSING CODE"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="4"
      length="12"
      name="AMOUNT, TRANSACTION"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="7"
      length="10"
      name="TRANSMISSION DATE AND TIME"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="11"
      length="6"
      name="SYSTEM TRACE AUDIT NUMBER"
      class="org.jpos.iso.IFA_NUMERIC"/>
  <isofield
      id="44"
      length="25"
      name="ADITIONAL RESPONSE DATA"
      class="org.jpos.iso.IFA_LLCHAR"/>
  <isofield
      id="105"
      length="999"
      name="RESERVED ISO USE"
      class="org.jpos.iso.IFA_LLLCHAR"/>
</isopackager>

00_logger.xml:
-------------------------------------------------------
<logger name="Q2" class="org.jpos.q2.qbean.LoggerAdaptor">
  <log-listener class="org.jpos.util.SimpleLogListener" />
  <log-listener class="org.jpos.util.BufferedLogListener">
    <property name="max-size" value="100" />
    <property name="name" value="logger.Q2.buffered" />
  </log-listener>

  <log-listener class="org.jpos.util.DailyLogListener">
    <property name="window" value="86400" /> <!-- optional, default one day -->
    <!--needed-->
    <property name="prefix" value="log/q2" />
    <property name="suffix" value=".log"/> <!-- optional -->
    <!--optional the default is "-yyyy-MM-dd" -->
    <property name="date-format" value="-yyyy-MM-dd-HH"/>
    <!--optional the default is gzip-->
    <property name="compression-format" value="gzip"/> 
  </log-listener>
</logger>
-------------------------------------------------------------
10_server_A.xml :
--------------------------------------------------------------
<server class="org.jpos.q2.iso.QServer" logger="Q2" name="Server-A">
    <attr name="port" type="java.lang.Integer">8001</attr>
    <attr name="maxSessions" type="java.lang.Integer">20</attr> 
    <attr name="minSessions" type="java.lang.Integer">10</attr>

    <channel name="Server-A-Channel" class="org.jpos.iso.channel.HEXChannel" logger="Q2"
                packager="org.jpos.iso.packager.GenericPackager">
        <property name="packager-config" value="basic.xml" /> 
    </channel>

    <request-listener class="serverFront.ServerListener" logger="Q2">
        <property name="space" value="transient:default" />
        <property name="queue" value="TransactionQueue" />
        <property name="timeout" value="10000" />
    </request-listener>

</server>
-----------------------------------------------------------
11_server_B.xml :
------------------------------------------------------------
<server class="org.jpos.q2.iso.QServer" logger="Q2" name="Server-B">
    <attr name="port" type="java.lang.Integer">8000</attr>
    <attr name="maxSessions" type="java.lang.Integer">100</attr>    
    <attr name="minSessions" type="java.lang.Integer">10</attr>

    <channel name="Server-B-Channel" class="org.jpos.iso.channel.HEXChannel" logger="Q2"
                packager="org.jpos.iso.packager.GenericPackager">
        <property name="packager-config" value="basic.xml" />
    </channel>

    <request-listener class="serverB.ServerBListener" logger="Q2">
        <property name="space" value="transient:default" />
        <property name="queue" value="TransactionQueue" />
        <property name="timeout" value="10000" />
    </request-listener>
</server>
--------------------------------------------------------------------------------
30_client_channel.xml:
-------------------------------------------------------------------------------

<channel-adaptor name='client-adaptor' class="org.jpos.q2.iso.ChannelAdaptor"
    logger="Q2">

    <channel class="org.jpos.iso.channel.HEXChannel" packager="org.jpos.iso.packager.GenericPackager"
        logger="Q2">
        <property name="packager-config" value="basic.xml" />
        <!-- Server A Address -->
        <property name="host" value="127.0.0.1" />
        <property name="port" value="8001" />
    </channel>

    <in>client-send</in>
    <out>client-receive</out>
    <reconnect-delay>10000</reconnect-delay>
</channel-adaptor>
-----------------------------------------------------------------------------
32_server_A_forward_channel.xml :
-----------------------------------------------------------------------------

<channel-adaptor name='server-A-adaptor' class="org.jpos.q2.iso.ChannelAdaptor" logger="Q2">

    <channel class="org.jpos.iso.channel.HEXChannel" 
        packager="org.jpos.iso.packager.GenericPackager" logger="Q2">

        <property name="packager-config" value="basic.xml" />
        <property name="host" value="127.0.0.1" />
        <property name="port" value="8000" />
    </channel>

    <in>serverA-forward-send</in>
    <out>serverA-forward-receive</out>
    <reconnect-delay>10000</reconnect-delay>
</channel-adaptor>
----------------------------------------------------------------------------
40_client_mux.xml :
----------------------------------------------------------------------------
<mux class="org.jpos.q2.iso.QMUX" logger="Q2" name="client-mux">
    <in>client-receive</in>
    <out>client-send</out>
</mux>
---------------------------------------------------------------
41_server_A_forward_mux.xml:
---------------------------------------------------------------

<mux class="org.jpos.q2.iso.QMUX" logger="Q2" name="serverA-forwarder-mux">
    <in>serverA-forward-receive</in>
    <out>serverA-forward-send</out>
</mux>
-----------------------------------------------------------------
99_sysmon.xml:
----------------------------------------------------------------

<sysmon logger="Q2">

    <attr name="sleepTime" type="java.lang.Long">3600000</attr>

    <attr name="detailRequired" type="java.lang.Boolean">true</attr>

</sysmon>
------------------------------------------------------
The client for sending the message:
------------------------------------------------------
package requester;

import org.jpos.iso.ISOException;
import org.jpos.iso.ISOMsg;
import org.jpos.iso.ISOUtil;
import org.jpos.iso.MUX;
import org.jpos.q2.Q2;
import org.jpos.q2.iso.QMUX;
import org.jpos.util.NameRegistrar;

public class Client {
    public static void startQ2() {
        Q2 q2 = new Q2();
        q2.start();
        System.out.println("Starting Deployment");
    }

    public static void main(String[] args) {
        startQ2();
        // give some delay before sent req, cz q2 deployment is async
        ISOUtil.sleep(5000);

        // Process send and receive data
        try {
            MUX mux = (MUX) NameRegistrar.getIfExists("mux.client-mux");
            ISOMsg msg=createReqMsg();
            ISOMsg reply = mux.request(msg, 10 * 1000);
            System.out.println(new String(reply.pack()));

        } catch (ISOException e) {
            e.printStackTrace();
        }
    }

    public static ISOMsg createReqMsg() {
        ISOMsg reqMsg = new ISOMsg();
        reqMsg.setHeader("0066".getBytes());
        try {
            reqMsg.set(3, "201234");
            reqMsg.set(4, "10000");
            reqMsg.set(7, "110722180");
            reqMsg.set(11, "123456");
            reqMsg.set(44, "A5DFGR");
            reqMsg.set(105, "ABCDEFGHIJ 1234567890");
        } catch (ISOException e) {
            e.printStackTrace();
        }
        return reqMsg;
    }
}

------------------------------------------------------------------------
server B :
------------------------------------------------------------------------
package serverB;

import java.io.IOException;

import org.jpos.iso.ISOException;
import org.jpos.iso.ISOMsg;
import org.jpos.iso.ISORequestListener;
import org.jpos.iso.ISOSource;

public class ServerBListener implements ISORequestListener {

    @Override
    public boolean process(ISOSource requester, ISOMsg reqMsg) {
        try {
            ISOMsg respMsg = (ISOMsg) reqMsg.clone();
            respMsg.set(124, "HI CLIENT, THIS IS DATA FROM ME! B");
            respMsg.set(39, "00");
            respMsg.setResponseMTI();
            requester.send(respMsg);
        } catch (ISOException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }

}
-------------------------------------------------------------------------------
And Server A for forwarding:
-------------------------------------------------------------------------------
package serverFront;

import java.io.IOException;

import org.jpos.iso.ISOException;
import org.jpos.iso.ISOMsg;
import org.jpos.iso.ISORequestListener;
import org.jpos.iso.ISOSource;
import org.jpos.iso.MUX;
import org.jpos.q2.Q2;
import org.jpos.util.NameRegistrar;

public class ServerAListener implements ISORequestListener {

    public static void main(String[] args) {
        Q2 q2 = new Q2();
        q2.start();
    }

    @Override
    public boolean process(ISOSource isoSrc, ISOMsg isoMsg) {

        try {
            if (isoMsg.getMTI().equals("0800")) {
                ISOMsg reply = (ISOMsg) isoMsg.clone();
                reply.setResponseMTI();
                reply.set(39, "00");
                isoSrc.send(reply);
                return true;
            }
            // send request to server B
            MUX mux = (MUX) NameRegistrar.getIfExists("mux.serverA-forwarder-mux");
            ISOMsg reply = mux.request(isoMsg, 10 * 1000);
            if (reply != null) {
                System.out.println(new String(reply.pack()));
                reply.set(125, "RESPONSE FROM SERVER A");
                isoSrc.send(reply);
            }
        } catch (ISOException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }

}

notice that there is no specification, is just a message that i want to send from the client, and forward it via server A to B, then waiting a response from B then send it to the client.

  • what do you mean there's no specification? There HAS TO be a spec so that your client can connect to the server. How are you sending messages to the server? – Andrés Alcarraz Mar 27 '17 at 16:53
  • Now I see, you are trying to connect from a client application that runs in another virtual machine, so it doesn't have acces to the mux defined in your server. The mux and channels to connect to the server must be defined in your client code so it can connect to the server. – Andrés Alcarraz Mar 27 '17 at 17:05
  • yes, this what I am looking for, and for specifications, I am just trying to send a message with q2 from client to server A (my server) and forward it to server B, that's all – taha yassine benbrahim Mar 28 '17 at 23:16
  • As I said in my previous comment, you can't access the mux defined in Q2 from a client running in another jvm. – Andrés Alcarraz Mar 29 '17 at 03:12

0 Answers0