Haiyanliang’s Weblog

Testing Oracle 11g Message Gateway with IBM websphere MQ v7

Posted in Oracle database by haiyanliang on September 23, 2008

TestCase setup
· MQ server
o IP: 192.168.1.205
o MQ server V7 installed successfully
· Oracle server
o IP: 192.168.1.221
o Oracle database 11g freshly installed
o Database T1 created during the installation as “orcl”
1 Create test MQ objects on Websphere server
Queue manager: TESTQM
Local Queue: TQ, LOG_IN, LOG_OUT
Channel: TQCONN(server-connect), MCA user ID=oracle

From OS : Add oracle into mqm group
2 Install MQ client on Oracle server
2.1 Log in as root.
And make sure all RPMs are in your current directory.
2.2 User creation
Create following user with group name of “mqm”
mqm, crtmqm,strmqm
2.3 Create mqm under /opt and /var
create /opt/mqm, make it RW to mqm group and 600MB in space capacity
create /var/mqm, make it RW to mqm group and 300MB in space capacity
2.4 Run the mqlicense.sh script.
If you want to view a text-only version of the license, which can be read by a screen-reader, type: ./mqlicense.sh -text_only
The license is displayed.
If want to accept the license without it being displayed, you can run the mqlicense.sh script with the -accept option. ./mqlicense.sh -accept
You must accept the license agreement before you can proceed with the installation.
2.5 Client installation:
Install minimum components:
· MQSeriesRuntime
· MQSeriesJRE
· MQSeriesServer
· MQSeriesJava

for 64bit:
rpm -ivh MQSeriesRuntime-7.0.0-0.x86_64.rpm
rpm -ivh MQSeriesJava-7.0.0-0.x86_64.rpm MQSeriesJRE-7.0.0-0.x86_64.rpm MQSeriesServer-7.0.0-0.x86_64.rpm

Then:
rpm -ivh MQSeriesClient-7.0.0-0.x86_64.rpm
3 Loading Database Objects into the Database
Using SQL*Plus, run ORACLE_HOME/mgw/admin/catmgw.sql as user SYS as SYSDBA
4 Setting Up a mgw.ora Initialization File
$ cp sample_mgw.ora mgw.ora

vi mgw.ora
s/myOracleHome/u01\/app\/oracle\/product\/11.1.0\/db_1/g
5 Setup listener.ora/tnsnames.ora
5.1 Configure listener.ora
# Add a SID_DESC
SID_LIST_LISTENER= (SID_LIST=
(SID_DESC =
(SID_NAME= mgwextproc)
(ENVS=”LD_LIBRARY_PATH=JRE_HOME/lib/sparc/server:ORACLE_HOME/lib”)
(ORACLE_HOME=ORACLE_HOME)
(PROGRAM = extproc))

SID_NAME The SID that is specified in the net service name in tnsnames.ora. In the following example, the SID_NAME is mgwextproc. ENVS Set up the LD_LIBRARY_PATH environment needed for the external procedure to run. The LD_LIBRARY_PATH must contain the following paths:
JRE_HOME/lib/PLATFORM_TYPE/server
ORACLE_HOME/lib
It should also contain any additional libraries required by third-party messaging systems. See “Setting Up Non-Oracle Messaging Systems”.
ORACLE_HOME Your Oracle home directory. Using $ORACLE_HOME does not work. PROGRAM The name of the external procedure agent, which is extproc

For example:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST=
(SID_DESC =
(SID_NAME=mgwextproc)
(ENVS=”LD_LIBRARY_PATH=/u01/app/oracle/product/11.1.0/db_1/jdk/jre/lib/amd64/server:/u01/app/oracle/product/11.1.0/db_1/lib”)
(ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1)
(PROGRAM=extproc)
))
5.2 Configure tnsnames.ora
MGW_AGENT =
(DESCRIPTION=
(ADDRESS_LIST= (ADDRESS= (PROTOCOL=IPC)(KEY=EXTPROC1521)))
(CONNECT_DATA= (SID=mgwextproc) (PRESENTATION=RO)))
Note: KEY=EXTPROC should match what’s in listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
)
)
6 Create username
create user mgwuser identified by mgwuser;
grant connect, resource to mgwuser;
grant execute on dbms_aq to mgwuser;
grant execute on dbms_aqadm to mgwuser;

grant connect, resource, MGW_AGENT_ROLE to mgwagent identified by mgwagent;
grant connect, resource, MGW_ADMINISTRATOR_ROLE to mgwadm identified by mgwadm;

7 Checkpoint one
7.1 Start MGW
connect mgwadm/mgwadm
exec dbms_mgwadm.db_connect_info(‘mgwagent’,’mgwagent’, ‘t1’);
exec dbms_mgwadm.startup;
7.2 Check MGW status
select * from MGW_GATEWAY;
If “ORA-28575: unable to open RPC connection to external procedure agent”
Then fix listener.ora and tnsnames.ora configurations
· tnsnames.ora must have a net service name entry named MGW_AGENT.
· The SID value specified for CONNECT_DATA of the MGW_AGENT net service name in tnsnames.ora must match the SID_NAME value of the SID_DESC entry in listener.ora.
· If the MGW_AGENT net service name is set up for an IPC connection, the KEY values for ADDRESS in tnsnames.ora and listener.ora must match.
· Other values in tnsnames.ora or listener.ora may be incorrect or not match.
Note: No log file will be generated in the scenario.
7.3 Check log file for error messages
7.4 Stop MGW
exec dbms_mgwadm.shutdown;
8 AQMQ testing with SYS.MGW_BASIC_MSG_T payload
8.1 Create test queues in oracle
connect mgwuser/mgwuser
set serveroutput on

— create queue tables and queues
begin
dbms_aqadm.create_queue_table(
queue_table => ‘mgw_basic_mc’,
queue_payload_type => ‘sys.mgw_basic_msg_t’,
multiple_consumers => TRUE);
dbms_aqadm.create_queue(queue_name =>’mgw_basic_src’,
queue_table => ‘mgw_basic_mc’,
max_retries => 1000);
dbms_aqadm.start_queue(‘mgw_basic_src’);

dbms_aqadm.create_queue_table(
queue_table => ‘mgw_basic_sc’,
queue_payload_type => ‘sys.mgw_basic_msg_t’,
multiple_consumers => FALSE);
dbms_aqadm.create_queue(queue_name =>’mgw_basic_dest’,
queue_table => ‘mgw_basic_sc’,
max_retries => 1000);
dbms_aqadm.start_queue(‘mgw_basic_dest’);
end;
/
8.2 Setup oracle OMG for MQ
connect mgwadm/mgwadm;

variable gv_database VARCHAR2(32);
variable gv_mq_queue_manager VARCHAR2(32);
variable gv_mq_queue_name VARCHAR2(32);
variable gv_mq_channel VARCHAR2(32);
variable gv_mq_inbound_log_queue VARCHAR2(32);
variable gv_mq_outbound_log_queue VARCHAR2(32);
variable gv_mq_username VARCHAR2(32);
variable gv_mq_password VARCHAR2(32);
variable gv_mq_host VARCHAR2(48);
variable gv_mq_port VARCHAR2(6);


— WARNING!!!! The values below must be set before this script is run.

begin
:gv_database := ‘t1’; — tnsname entry for local database
:gv_mq_queue_manager := ‘TESTQM’; — Queue manager
:gv_mq_queue_name := ‘TQ’; — local Queue
:gv_mq_channel := ‘TQCONN’; — “server-connect” channel in TESTQM
:gv_mq_host := ‘192.168.1.205’; — MQ server
:gv_mq_port := ‘1417’; — port for TESTQM
:gv_mq_username := NULL; — optional
:gv_mq_password := NULL; — optional
:gv_mq_inbound_log_queue := ‘LOG_IN’; — local Queue
:gv_mq_outbound_log_queue := ‘LOG_OUT’; — local Queue
end;
/
prompt
prompt Setting the gateway agent user
prompt

rem If we do not set the service_name argument it will default to the
rem ORACLE_SID of the MGW process (the listener process).
begin
dbms_mgwadm.db_connect_info(
username => ‘mgwagent’,
password => ‘mgwagent’,
database => RTRIM(:gv_database));
end;
/

prompt
prompt Creating MQSeries link
prompt

declare
v_options sys.mgw_properties;
v_prop sys.mgw_mqseries_properties;
begin
if (:gv_mq_queue_manager IS NULL) then
dbms_output.put_line(‘queue manager must be specified’);
end if;

— set options if desired

— set certain mqseries properties used for MQSeries
— NOTE: This information must be changed for your MQSeries setup.
v_prop := sys.mgw_mqseries_properties.construct();

v_prop.max_connections := 1;

— queue manager name (required)
v_prop.queue_manager := RTRIM(:gv_mq_queue_manager);

— hostname for queue manager host (required)
v_prop.hostname := RTRIM(:gv_mq_host);

— channel name (required)
v_prop.channel := RTRIM(:gv_mq_channel);

— port (required — 1414 is MQSeries default)
v_prop.port := RTRIM(:gv_mq_port);

— username given to queue manager
if (:gv_mq_username IS NOT NULL) then
v_prop.username := RTRIM(:gv_mq_username);
end if;

— password given to queue manager
if (:gv_mq_password IS NOT NULL) then
v_prop.password := RTRIM(:gv_mq_password);
end if;

— name of MQSeries queue to be used for MGW logging on outbound jobs
if (:gv_mq_outbound_log_queue IS NOT NULL) then
v_prop.outbound_log_queue := RTRIM(:gv_mq_outbound_log_queue);
end if;

— name of MQSeries queue to be used for MGW logging on inbound jobs
if (:gv_mq_inbound_log_queue IS NOT NULL) then
v_prop.inbound_log_queue := RTRIM(:gv_mq_inbound_log_queue);
end if;

dbms_mgwadm.create_msgsystem_link(
linkname =>’mqlink’, — link name
properties => v_prop, — mqseries driver properties
options => v_options ); — options

end;
/

prompt
prompt Registering foreign queue
prompt

declare
v_options sys.mgw_properties;
begin
— Set options for register foreign queue
— MQ_openOptions: 2066 is TODO
v_options := sys.mgw_properties(
sys.mgw_property(‘MQ_openOptions’, ‘2066’) );

dbms_mgwadm.register_foreign_queue(
name => ‘destq’, — MGW foreign queue name
linkname => ‘mqlink’, — name of link to use
provider_queue => RTRIM(:gv_mq_queue_name), — name of MQSeries queue
domain => dbms_mgwadm.DOMAIN_QUEUE, — single consumer queue
options => v_options );
end;
/

prompt
prompt Adding outbound subscriber.
prompt

begin
— queue_name should be an AQ queue
— destination should be a non-Oracle queue
— subscriber rule applies to AQ subscriber
— exception queue must be a NORMAL AQ queue with payload the same as
— the source queue
dbms_mgwadm.add_subscriber(
subscriber_id => ‘sub_aq2mq’, — MGW subscriber name
propagation_type => dbms_mgwadm.outbound_propagation,
— AQ queue name
queue_name => ‘mgwuser.mgw_basic_src’,
— MGW foreign queue with link
destination => ‘destq@mqlink’);
— no selection rule used for this subscriber
— no transformation invoked on dequeue
— no exception queue
end;
/

prompt
prompt Adding inbound subscriber.
prompt

begin
— destination should be an AQ queue
— queue_name should be a non-Oracle queue
— exception queue must be a WebSphere MQ queue name of a queue that
— exists on the queue manager the link uses.
dbms_mgwadm.add_subscriber(
— MGW subscriber name
subscriber_id => ‘sub_mq2aq’,
propagation_type => dbms_mgwadm.inbound_propagation,
— MGW foreign queue with link
queue_name => ‘destq@mqlink’,
— AQ queue name
destination => ‘mgwuser.mgw_basic_dest’);
— no selection rule can be used for this subscriber
— no transformation invoked on dequeue
— no exception queue
end;
/

prompt
prompt Scheduling propagation
prompt

begin
dbms_mgwadm.schedule_propagation(
— schedule name
schedule_id => ‘sch_aq2mq’,
— outbound propagation
propagation_type => dbms_mgwadm.outbound_propagation,
— AQ queue name
source =>’mgwuser.mgw_basic_src’,
— MGW foreign queue with link
destination =>’destq@mqlink’);

— The remaining fields currently not used by MGW
end;
/

begin
dbms_mgwadm.schedule_propagation(
— schedule name
schedule_id => ‘sch_mq2aq’,
— outbound propagation
propagation_type => dbms_mgwadm.inbound_propagation,
— MGW foreign queue with link
source => ‘destq@mqlink’,
— AQ queue name
destination =>’mgwuser.mgw_basic_dest’);

— The remaining fields currently not used by MGW
end;
/

Clean testing:
connect mgwadm/mgwadm

Rem Remove the subscribers.
begin
— Since this subscriber was for outbound propagation
— removing it will remove the underlying AQ subscriber.
dbms_mgwadm.remove_subscriber(subscriber_id => ‘sub_aq2mq’,
force => dbms_mgwadm.NO_FORCE);
dbms_mgwadm.remove_subscriber(subscriber_id => ‘sub_mq2aq’,
force => dbms_mgwadm.NO_FORCE);
end;
/

exec dbms_mgwadm.remove_subscriber(subscriber_id => ‘sub_aq2mq’,force => dbms_mgwadm.FORCE);
exec dbms_mgwadm.remove_subscriber(subscriber_id => ‘sub_mq2aq’,force => dbms_mgwadm.FORCE);

Rem Remove the schedules.
begin
dbms_mgwadm.unschedule_propagation(schedule_id => ‘sch_aq2mq’);
dbms_mgwadm.unschedule_propagation(schedule_id => ‘sch_mq2aq’);
end;
/

Rem Unregister the MQSeries queue.
begin
dbms_mgwadm.unregister_foreign_queue(name => ‘destq’, linkname => ‘mqlink’);
end;
/

Rem Finally, remove the link.
begin
dbms_mgwadm.remove_msgsystem_link(‘mqlink’);
end;
/
8.3 Checkpoint two
8.3.1 Start MGW
connect mgwadm/mgwadm
exec dbms_mgwadm.startup;
8.3.2 Check MGW status
select * from MGW_GATEWAY;
If “ORA-28575: unable to open RPC connection to external procedure agent”
Then fix listener.ora and tnsnames.ora configurations
Note: No log file will be generated in the scenario.
8.3.3 Check log file for error messages
8.3.4 Stop MGW
exec dbms_mgwadm.shutdown;
8.4 Testing
· Start MGW
· Enqueue
· Check : select count(*) from mgwuser.mgw_basic_sc; — the count should increase by 1.
· Dequeue
Enqueue scripts:

SQL> !more enq.sql
declare
enqueue_options dbms_aq.enqueue_options_t;
message_properties dbms_aq.message_properties_t;
msgid RAW(16);
payload sys.mgw_basic_msg_t;
header sys.mgw_name_value_array_t;
text_body sys.mgw_text_value_t;
msg varchar2(100);

BEGIN
— Create the header. This may normally be set to NULL.
— As an example, we set a couple of WebSphere MQ message properties
— via the built-in capabilities of MGW_BASIC_MSG_T. In most cases
— these properties will not need to be set.
header := sys.mgw_name_value_array_t(
sys.mgw_name_value_t.construct_integer(‘MGW_MQ_characterSet’, ‘1208’),
sys.mgw_name_value_t.construct_integer(‘MGW_MQ_priority’, ‘7’)
);

select ‘Sample Msg:’||to_char(sysdate,’YYYY-MM-DD HH24:MI:SS’) into msg from dual;

— Create the text body.
text_body := sys.mgw_text_value_t(msg, NULL);

— Construct the message from its constituent parts.
payload := sys.mgw_basic_msg_t(header, text_body, NULL);

— Enqueue the message.
dbms_aq.enqueue(queue_name => ‘mgwuser.mgw_basic_src’,
enqueue_options => enqueue_options,
message_properties => message_properties,
payload => payload,
msgid => msgid);
commit;
END enqueue;
/

Dequeue script:
SQL> !more deq.sql
select count(*) from mgwuser.mgw_basic_sc;

set serveroutput on

declare
dequeue_options dbms_aq.dequeue_options_t;
message_properties dbms_aq.message_properties_t;
msgid RAW(16);
payload SYS.MGW_BASIC_MSG_T;
BEGIN
— FIRST_MESSAGE
dequeue_options.navigation := 1;
dequeue_options.wait := dbms_aq.NO_WAIT;

dbms_aq.dequeue(queue_name => ‘mgwuser.mgw_basic_dest’,
dequeue_options => dequeue_options,
message_properties => message_properties,
payload => payload,
msgid => msgid);
DBMS_OUTPUT.PUT_LINE (‘Message:’ || payload.text_body.small_value);
commit;
END dequeue;
/

select count(*) from mgwuser.mgw_basic_sc;

SQL> !more cnt.sql
prompt mgwuser.mgw_basic_sc
select count(*) from mgwuser.mgw_basic_sc;

prompt mgwuser.mgw_basic_mc
select count(*) from mgwuser.mgw_basic_mc;

Tagged with: ,

5 Responses

Subscribe to comments with RSS.

  1. Varun said, on October 3, 2008 at 4:45 pm

    Hi,
    Good stuff! I was just trying out the above but, encountered MQ connection exception. Can you help verify if any issue occured. Following a snap of mgw log. Thanks/Varun.

    >>2008-10-04 00:34:45 MGW C-Bootstrap 0 LOG process-id=7940
    Bootstrap program starting
    >>2008-10-04 00:34:45 MGW C-Bootstrap 0 LOG process-id=7940
    JVM created — heapsize = 64
    >>2008-10-04 00:34:45 MGW Engine 0 200 main
    MGW Agent version: 10.2.0.3_20061010:0713
    >>2008-10-04 00:34:45 MGW AdminMgr 0 LOG main
    Connecting to database using connect string = jdbc:oracle:oci8:@TANGERIN
    >>2008-10-04 00:34:45 MGW Engine 0 200 main
    MGW Component version: 10.2.0.3.0
    >>2008-10-04 00:34:45 MGW Engine 0 200 main
    MGW job number: 88, MGW job sid: 150, MGW database instance: 1
    >>2008-10-04 00:35:16 MGW Engine 0 1 main
    Agent is initializing.
    >>2008-10-04 00:35:16 MGW Engine 0 23 main
    The number of worker threads is set to 1.
    >>2008-10-04 00:35:16 MGW Engine 0 22 main
    The default polling interval is set to 5000ms.
    >>2008-10-04 00:35:16 MGW MQD 0 LOG main
    Creating MQSeries messaging link:
    link : MQLINK
    link type : Base Java interface
    queue manager : TESTQM
    channel : TQCONN
    host : localhost
    port : 1414
    user :
    connections : 1
    inbound logQ : LOG_IN
    outbound logQ : LOG_OUT
    >>2008-10-04 00:35:16 MGW Engine 0 4 main
    Link MQLINK has been added.
    >>2008-10-04 00:35:16 MGW Engine 0 7 main
    Queue DESTQ@MQLINK has been registered; provider queue: TQ.
    >>2008-10-04 00:35:16 MGW Engine 0 9 main
    Propagation schedule SCH_AQ2MQ (MGWUSER.MGW_BASIC_SRC –> DESTQ@MQLINK) has been added.
    >>2008-10-04 00:35:16 MGW Engine 0 9 main
    Propagation schedule SCH_MQ2AQ (DESTQ@MQLINK –> MGWUSER.MGW_BASIC_DEST) has been added.
    >>2008-10-04 00:35:16 MGW AQN 0 LOG main
    Creating AQ messaging link:
    link : oracleMgwAq
    link type : native
    database : TANGERIN
    user : MGWAGENT
    connection type : JDBC OCI
    connections : 3
    inbound logQ : sys.mgw_recv_log
    outbound logQ : sys.mgw_send_log
    >>2008-10-04 00:35:16 MGW Engine 0 19 main
    MGW subscriber SUB_AQ2MQ has been activated.
    >>2008-10-04 00:35:16 MGW Engine 0 14 main
    MGW subscriber SUB_AQ2MQ (MGWUSER.MGW_BASIC_SRC –> DESTQ@MQLINK) has been added.
    >>2008-10-04 00:35:16 MGW Engine 0 19 main
    MGW subscriber SUB_MQ2AQ has been activated.
    >>2008-10-04 00:35:16 MGW Engine 0 14 main
    MGW subscriber SUB_MQ2AQ (DESTQ@MQLINK –> MGWUSER.MGW_BASIC_DEST) has been added.
    >>2008-10-04 00:35:17 MGW Engine 0 2 main
    Agent is up and running.
    >>2008-10-04 00:35:18 MGW Engine 0 434 worker0
    Failed to access queue DESTQ@MQLINK; provider queue: TQ
    oracle.mgw.common.GatewayException: [800] MQSeries queue manager, TESTQM, creation failed
    at oracle.mgw.common.MgwUtil.GatewayException(MgwUtil.java:739)
    at oracle.mgw.drivers.mq.MQOPHandle.(MQOPHandle.java:64)
    at oracle.mgw.drivers.mq.MQOPHandleFactory.createOPHandle(MQOPHandleFactory.java:35)
    at oracle.mgw.drivers.OPHandlePool.getHandle(OPHandlePool.java:133)
    at oracle.mgw.drivers.mq.MQLink.registerDestination(MQLink.java:382)
    at oracle.mgw.engine.DestMgr.getForeignDest(DestMgr.java:54)
    at oracle.mgw.engine.JobData.init(JobData.java:233)
    at oracle.mgw.engine.Worker.recoverJob(Worker.java:1086)
    at oracle.mgw.engine.Worker.myRun(Worker.java:98)
    at oracle.mgw.engine.ManagedThr.run(ManagedThr.java:58)

    [Linked-exception]
    com.ibm.mq.MQException: MQJE001: Completion Code ‘2’, Reason ‘2059’.
    at com.ibm.mq.MQManagedConnectionJ11.(MQManagedConnectionJ11.java:229)
    at com.ibm.mq.MQClientManagedConnectionFactoryJ11._createManagedConnection(MQClientManagedConnectionFactoryJ11.java:500)
    at com.ibm.mq.MQClientManagedConnectionFactoryJ11.createManagedConnection(MQClientManagedConnectionFactoryJ11.java:541)
    at com.ibm.mq.StoredManagedConnection.(StoredManagedConnection.java:95)
    at com.ibm.mq.MQSimpleConnectionManager.allocateConnection(MQSimpleConnectionManager.java:182)
    at com.ibm.mq.MQQueueManagerFactory.obtainBaseMQQueueManager(MQQueueManagerFactory.java:870)
    at com.ibm.mq.MQQueueManagerFactory.procure(MQQueueManagerFactory.java:756)
    at com.ibm.mq.MQQueueManagerFactory.constructQueueManager(MQQueueManagerFactory.java:704)
    at com.ibm.mq.MQQueueManagerFactory.createQueueManager(MQQueueManagerFactory.java:169)
    at com.ibm.mq.MQQueueManager.(MQQueueManager.java:677)
    at oracle.mgw.drivers.mq.MQOPHandle.(MQOPHandle.java:60)
    at oracle.mgw.drivers.mq.MQOPHandleFactory.createOPHandle(MQOPHandleFactory.java:35)
    at oracle.mgw.drivers.OPHandlePool.getHandle(OPHandlePool.java:133)
    at oracle.mgw.drivers.mq.MQLink.registerDestination(MQLink.java:382)
    at oracle.mgw.engine.DestMgr.getForeignDest(DestMgr.java:54)
    at oracle.mgw.engine.JobData.init(JobData.java:233)
    at oracle.mgw.engine.Worker.recoverJob(Worker.java:1086)
    at oracle.mgw.engine.Worker.myRun(Worker.java:98)
    at oracle.mgw.engine.ManagedThr.run(ManagedThr.java:58)
    Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2059;AMQ9213: A communications error for occurred. [1=java.net.ConnectException[Connection refused: connect],3=localhost]
    at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection.connnectUsingLocalAddress(RemoteTCPConnection.java:632)
    at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection.protocolConnect(RemoteTCPConnection.java:980)
    at com.ibm.mq.jmqi.remote.internal.system.RemoteConnection.connect(RemoteConnection.java:989)
    at com.ibm.mq.jmqi.remote.internal.system.RemoteConnectionPool.getConnection(RemoteConnectionPool.java:293)
    at com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiConnect(RemoteFAP.java:1371)
    at com.ibm.mq.MQSESSION.MQCONNX_j(MQSESSION.java:924)
    at com.ibm.mq.MQManagedConnectionJ11.(MQManagedConnectionJ11.java:224)
    … 18 more
    Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
    at java.net.Socket.connect(Socket.java:464)
    at java.net.Socket.connect(Socket.java:414)
    at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection$2.run(RemoteTCPConnection.java:618)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection.connnectUsingLocalAddress(RemoteTCPConnection.java:611)
    … 24 more

    >>2008-10-04 00:35:18 MGW Engine 0 442 worker0
    Unable to access queue DESTQ@MQLINK for subscriber SUB_AQ2MQ
    >>2008-10-04 00:35:18 MGW Engine 0 LOG worker0
    Initialization failures for SUB_AQ2MQ
    >>2008-10-04 00:35:18 MGW Engine 0 422 worker0
    Errors occurred during recovering subscriber SUB_AQ2MQ
    oracle.mgw.common.GatewayException: [435] Initialization failures for SUB_AQ2MQ
    at oracle.mgw.common.MgwUtil.GatewayException(MgwUtil.java:739)
    at oracle.mgw.engine.Worker.recoverJob(Worker.java:1087)
    at oracle.mgw.engine.Worker.myRun(Worker.java:98)
    at oracle.mgw.engine.ManagedThr.run(ManagedThr.java:58)

    >>2008-10-04 00:35:19 MGW Engine 0 434 worker0
    Failed to access queue DESTQ@MQLINK; provider queue: TQ
    oracle.mgw.common.GatewayException: [800] MQSeries queue manager, TESTQM, creation failed
    at oracle.mgw.common.MgwUtil.GatewayException(MgwUtil.java:739)
    at oracle.mgw.drivers.mq.MQOPHandle.(MQOPHandle.java:64)
    at oracle.mgw.drivers.mq.MQOPHandleFactory.createOPHandle(MQOPHandleFactory.java:35)
    at oracle.mgw.drivers.OPHandlePool.getHandle(OPHandlePool.java:133)
    at oracle.mgw.drivers.mq.MQLink.registerDestination(MQLink.java:382)
    at oracle.mgw.engine.DestMgr.getForeignDest(DestMgr.java:54)
    at oracle.mgw.engine.JobData.init(JobData.java:210)
    at oracle.mgw.engine.Worker.recoverJob(Worker.java:1086)
    at oracle.mgw.engine.Worker.myRun(Worker.java:98)
    at oracle.mgw.engine.ManagedThr.run(ManagedThr.java:58)

    [Linked-exception]
    com.ibm.mq.MQException: MQJE001: Completion Code ‘2’, Reason ‘2059’.
    at com.ibm.mq.MQManagedConnectionJ11.(MQManagedConnectionJ11.java:229)
    at com.ibm.mq.MQClientManagedConnectionFactoryJ11._createManagedConnection(MQClientManagedConnectionFactoryJ11.java:500)
    at com.ibm.mq.MQClientManagedConnectionFactoryJ11.createManagedConnection(MQClientManagedConnectionFactoryJ11.java:541)
    at com.ibm.mq.StoredManagedConnection.(StoredManagedConnection.java:95)
    at com.ibm.mq.MQSimpleConnectionManager.allocateConnection(MQSimpleConnectionManager.java:182)
    at com.ibm.mq.MQQueueManagerFactory.obtainBaseMQQueueManager(MQQueueManagerFactory.java:870)
    at com.ibm.mq.MQQueueManagerFactory.procure(MQQueueManagerFactory.java:756)
    at com.ibm.mq.MQQueueManagerFactory.constructQueueManager(MQQueueManagerFactory.java:704)
    at com.ibm.mq.MQQueueManagerFactory.createQueueManager(MQQueueManagerFactory.java:169)
    at com.ibm.mq.MQQueueManager.(MQQueueManager.java:677)
    at oracle.mgw.drivers.mq.MQOPHandle.(MQOPHandle.java:60)
    at oracle.mgw.drivers.mq.MQOPHandleFactory.createOPHandle(MQOPHandleFactory.java:35)
    at oracle.mgw.drivers.OPHandlePool.getHandle(OPHandlePool.java:133)
    at oracle.mgw.drivers.mq.MQLink.registerDestination(MQLink.java:382)
    at oracle.mgw.engine.DestMgr.getForeignDest(DestMgr.java:54)
    at oracle.mgw.engine.JobData.init(JobData.java:210)
    at oracle.mgw.engine.Worker.recoverJob(Worker.java:1086)
    at oracle.mgw.engine.Worker.myRun(Worker.java:98)
    at oracle.mgw.engine.ManagedThr.run(ManagedThr.java:58)
    Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2059;AMQ9213: A communications error for occurred. [1=java.net.ConnectException[Connection refused: connect],3=localhost]
    at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection.connnectUsingLocalAddress(RemoteTCPConnection.java:632)
    at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection.protocolConnect(RemoteTCPConnection.java:980)
    at com.ibm.mq.jmqi.remote.internal.system.RemoteConnection.connect(RemoteConnection.java:989)
    at com.ibm.mq.jmqi.remote.internal.system.RemoteConnectionPool.getConnection(RemoteConnectionPool.java:293)
    at com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiConnect(RemoteFAP.java:1371)
    at com.ibm.mq.MQSESSION.MQCONNX_j(MQSESSION.java:924)
    at com.ibm.mq.MQManagedConnectionJ11.(MQManagedConnectionJ11.java:224)
    … 18 more
    Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
    at java.net.Socket.connect(Socket.java:464)
    at java.net.Socket.connect(Socket.java:414)
    at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection$2.run(RemoteTCPConnection.java:618)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection.connnectUsingLocalAddress(RemoteTCPConnection.java:611)
    … 24 more

    >>2008-10-04 00:35:19 MGW Engine 0 442 worker0
    Unable to access queue DESTQ@MQLINK for subscriber SUB_MQ2AQ
    >>2008-10-04 00:35:19 MGW Engine 0 LOG worker0
    Initialization failures for SUB_MQ2AQ
    >>2008-10-04 00:35:19 MGW Engine 0 422 worker0
    Errors occurred during recovering subscriber SUB_MQ2AQ
    oracle.mgw.common.GatewayException: [435] Initialization failures for SUB_MQ2AQ
    at oracle.mgw.common.MgwUtil.GatewayException(MgwUtil.java:739)
    at oracle.mgw.engine.Worker.recoverJob(Worker.java:1087)
    at oracle.mgw.engine.Worker.myRun(Worker.java:98)
    at oracle.mgw.engine.ManagedThr.run(ManagedThr.java:58)

    >>2008-10-04 00:35:22 MGW Engine 0 434 worker0
    Failed to access queue DESTQ@MQLINK; provider queue: TQ
    oracle.mgw.common.GatewayException: [800] MQSeries queue manager, TESTQM, creation failed
    at oracle.mgw.common.MgwUtil.GatewayException(MgwUtil.java:739)
    at oracle.mgw.drivers.mq.MQOPHandle.(MQOPHandle.java:64)
    at oracle.mgw.drivers.mq.MQOPHandleFactory.createOPHandle(MQOPHandleFactory.java:35)
    at oracle.mgw.drivers.OPHandlePool.getHandle(OPHandlePool.java:133)
    at oracle.mgw.drivers.mq.MQLink.registerDestination(MQLink.java:382)
    at oracle.mgw.engine.DestMgr.getForeignDest(DestMgr.java:54)
    at oracle.mgw.engine.JobData.init(JobData.java:233)
    at oracle.mgw.engine.Worker.recoverJob(Worker.java:1086)
    at oracle.mgw.engine.Worker.myRun(Worker.java:98)
    at oracle.mgw.engine.ManagedThr.run(ManagedThr.java:58)

    [Linked-exception]
    com.ibm.mq.MQException: MQJE001: Completion Code ‘2’, Reason ‘2059’.
    at com.ibm.mq.MQManagedConnectionJ11.(MQManagedConnectionJ11.java:229)
    at com.ibm.mq.MQClientManagedConnectionFactoryJ11._createManagedConnection(MQClientManagedConnectionFactoryJ11.java:500)
    at com.ibm.mq.MQClientManagedConnectionFactoryJ11.createManagedConnection(MQClientManagedConnectionFactoryJ11.java:541)
    at com.ibm.mq.StoredManagedConnection.(StoredManagedConnection.java:95)
    at com.ibm.mq.MQSimpleConnectionManager.allocateConnection(MQSimpleConnectionManager.java:182)
    at com.ibm.mq.MQQueueManagerFactory.obtainBaseMQQueueManager(MQQueueManagerFactory.java:870)
    at com.ibm.mq.MQQueueManagerFactory.procure(MQQueueManagerFactory.java:756)
    at com.ibm.mq.MQQueueManagerFactory.constructQueueManager(MQQueueManagerFactory.java:704)
    at com.ibm.mq.MQQueueManagerFactory.createQueueManager(MQQueueManagerFactory.java:169)
    at com.ibm.mq.MQQueueManager.(MQQueueManager.java:677)
    at oracle.mgw.drivers.mq.MQOPHandle.(MQOPHandle.java:60)
    at oracle.mgw.drivers.mq.MQOPHandleFactory.createOPHandle(MQOPHandleFactory.java:35)
    at oracle.mgw.drivers.OPHandlePool.getHandle(OPHandlePool.java:133)
    at oracle.mgw.drivers.mq.MQLink.registerDestination(MQLink.java:382)
    at oracle.mgw.engine.DestMgr.getForeignDest(DestMgr.java:54)
    at oracle.mgw.engine.JobData.init(JobData.java:233)
    at oracle.mgw.engine.Worker.recoverJob(Worker.java:1086)
    at oracle.mgw.engine.Worker.myRun(Worker.java:98)
    at oracle.mgw.engine.ManagedThr.run(ManagedThr.java:58)
    Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2059;AMQ9213: A communications error for occurred. [1=java.net.ConnectException[Connection refused: connect],3=localhost]
    at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection.connnectUsingLocalAddress(RemoteTCPConnection.java:632)
    at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection.protocolConnect(RemoteTCPConnection.java:980)
    at com.ibm.mq.jmqi.remote.internal.system.RemoteConnection.connect(RemoteConnection.java:989)
    at com.ibm.mq.jmqi.remote.internal.system.RemoteConnectionPool.getConnection(RemoteConnectionPool.java:293)
    at com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiConnect(RemoteFAP.java:1371)
    at com.ibm.mq.MQSESSION.MQCONNX_j(MQSESSION.java:924)
    at com.ibm.mq.MQManagedConnectionJ11.(MQManagedConnectionJ11.java:224)
    … 18 more
    Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
    at java.net.Socket.connect(Socket.java:464)
    at java.net.Socket.connect(Socket.java:414)
    at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection$2.run(RemoteTCPConnection.java:618)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection.connnectUsingLocalAddress(RemoteTCPConnection.java:611)
    … 24 more

    >>2008-10-04 00:35:22 MGW Engine 0 442 worker0
    Unable to access queue DESTQ@MQLINK for subscriber SUB_AQ2MQ
    >>2008-10-04 00:35:22 MGW Engine 0 LOG worker0
    Initialization failures for SUB_AQ2MQ
    >>2008-10-04 00:35:22 MGW Engine 0 422 worker0
    Errors occurred during recovering subscriber SUB_AQ2MQ
    oracle.mgw.common.GatewayException: [435] Initialization failures for SUB_AQ2MQ
    at oracle.mgw.common.MgwUtil.GatewayException(MgwUtil.java:739)
    at oracle.mgw.engine.Worker.recoverJob(Worker.java:1087)
    at oracle.mgw.engine.Worker.myRun(Worker.java:98)
    at oracle.mgw.engine.ManagedThr.run(ManagedThr.java:58)

    >>2008-10-04 00:35:30 MGW Engine 0 434 worker0
    Failed to access queue DESTQ@MQLINK; provider queue: TQ
    oracle.mgw.common.GatewayException: [800] MQSeries queue manager, TESTQM, creation failed
    at oracle.mgw.common.MgwUtil.GatewayException(MgwUtil.java:739)
    at oracle.mgw.drivers.mq.MQOPHandle.(MQOPHandle.java:64)
    at oracle.mgw.drivers.mq.MQOPHandleFactory.createOPHandle(MQOPHandleFactory.java:35)
    at oracle.mgw.drivers.OPHandlePool.getHandle(OPHandlePool.java:133)
    at oracle.mgw.drivers.mq.MQLink.registerDestination(MQLink.java:382)
    at oracle.mgw.engine.DestMgr.getForeignDest(DestMgr.java:54)
    at oracle.mgw.engine.JobData.init(JobData.java:233)
    at oracle.mgw.engine.Worker.recoverJob(Worker.java:1086)
    at oracle.mgw.engine.Worker.myRun(Worker.java:98)
    at oracle.mgw.engine.ManagedThr.run(ManagedThr.java:58)

    [Linked-exception]
    com.ibm.mq.MQException: MQJE001: Completion Code ‘2’, Reason ‘2059’.
    at com.ibm.mq.MQManagedConnectionJ11.(MQManagedConnectionJ11.java:229)
    at com.ibm.mq.MQClientManagedConnectionFactoryJ11._createManagedConnection(MQClientManagedConnectionFactoryJ11.java:500)
    at com.ibm.mq.MQClientManagedConnectionFactoryJ11.createManagedConnection(MQClientManagedConnectionFactoryJ11.java:541)
    at com.ibm.mq.StoredManagedConnection.(StoredManagedConnection.java:95)
    at com.ibm.mq.MQSimpleConnectionManager.allocateConnection(MQSimpleConnectionManager.java:182)
    at com.ibm.mq.MQQueueManagerFactory.obtainBaseMQQueueManager(MQQueueManagerFactory.java:870)
    at com.ibm.mq.MQQueueManagerFactory.procure(MQQueueManagerFactory.java:756)
    at com.ibm.mq.MQQueueManagerFactory.constructQueueManager(MQQueueManagerFactory.java:704)
    at com.ibm.mq.MQQueueManagerFactory.createQueueManager(MQQueueManagerFactory.java:169)
    at com.ibm.mq.MQQueueManager.(MQQueueManager.java:677)
    at oracle.mgw.drivers.mq.MQOPHandle.(MQOPHandle.java:60)
    at oracle.mgw.drivers.mq.MQOPHandleFactory.createOPHandle(MQOPHandleFactory.java:35)
    at oracle.mgw.drivers.OPHandlePool.getHandle(OPHandlePool.java:133)
    at oracle.mgw.drivers.mq.MQLink.registerDestination(MQLink.java:382)
    at oracle.mgw.engine.DestMgr.getForeignDest(DestMgr.java:54)
    at oracle.mgw.engine.JobData.init(JobData.java:233)
    at oracle.mgw.engine.Worker.recoverJob(Worker.java:1086)
    at oracle.mgw.engine.Worker.myRun(Worker.java:98)
    at oracle.mgw.engine.ManagedThr.run(ManagedThr.java:58)
    Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2059;AMQ9213: A communications error for occurred. [1=java.net.ConnectException[Connection refused: connect],3=localhost]
    at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection.connnectUsingLocalAddress(RemoteTCPConnection.java:632)
    at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection.protocolConnect(RemoteTCPConnection.java:980)
    at com.ibm.mq.jmqi.remote.internal.system.RemoteConnection.connect(RemoteConnection.java:989)
    at com.ibm.mq.jmqi.remote.internal.system.RemoteConnectionPool.getConnection(RemoteConnectionPool.java:293)
    at com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiConnect(RemoteFAP.java:1371)
    at com.ibm.mq.MQSESSION.MQCONNX_j(MQSESSION.java:924)
    at com.ibm.mq.MQManagedConnectionJ11.(MQManagedConnectionJ11.java:224)
    … 18 more
    Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
    at java.net.Socket.connect(Socket.java:464)
    at java.net.Socket.connect(Socket.java:414)
    at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection$2.run(RemoteTCPConnection.java:618)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.ibm.mq.jmqi.remote.internal.RemoteTCPConnection.connnectUsingLocalAddress(RemoteTCPConnection.java:611)
    … 24 more

    >>2008-10-04 00:35:30 MGW Engine 0 442 worker0
    Unable to access queue DESTQ@MQLINK for subscriber SUB_AQ2MQ
    >>2008-10-04 00:35:30 MGW Engine 0 LOG worker0
    Initialization failures for SUB_AQ2MQ
    >>2008-10-04 00:35:30 MGW Engine 0 422 worker0
    Errors occurred during recovering subscriber SUB_AQ2MQ
    oracle.mgw.common.GatewayException: [435] Initialization failures for SUB_AQ2MQ
    at oracle.mgw.common.MgwUtil.GatewayException(MgwUtil.java:739)
    at oracle.mgw.engine.Worker.recoverJob(Worker.java:1087)
    at oracle.mgw.engine.Worker.myRun(Worker.java:98)
    at oracle.mgw.engine.ManagedThr.run(ManagedThr.java:58)

  2. haiyanliang said, on October 3, 2008 at 6:49 pm

    It looks like a connections issue. Try these:
    1. Check the port (TESTQM’s listener TCP configuration)
    2. Use IP instead of “localhost”

    Hope this will help.

    Hai Yan

  3. Ganapathi said, on December 22, 2008 at 2:41 pm

    Hi Hai Yan,
    Thanks for this wonderful document.
    Can you please help me with the following queries:
    1) Is Oracle Message Gateway(OMG) a recommended approach for consuming messages from Web Sphere MQ series queues into Oracle through an inbound propagation. Any documentation that suggests the merits of OMG compared to other means will be very helpful.
    2) Can you please comment on whether the same set up steps will work for Oracle 10g Vs Websphere MQ Series?

    Thanks,
    Ganapathi

  4. haiyanliang said, on February 3, 2009 at 6:18 pm

    Answer for 1)
    I can not say it’s the best or recommended approach. I am a DBA rather than a developer. But I guess if you’ve already have a program to work with Oracle message Queue, this approach will be better choice, which is the reason why I did it in my company.

    Answer for 2)
    The same step is the same if your DB is 10g. I have done it. The test case is just to avoid exposing company info and I have a 11g installed on my home Linux at the time.

  5. Roger Grindley said, on June 8, 2009 at 4:08 pm

    Following the above instructions, I get an outbound message into mgw_basic_mc but it does not seem to be reaching the MQ Series queue.
    Propagation is enabled. eg

    select count(*) from mgw_basic_mc;

    COUNT(*)
    ———-
    2

    Should these messages go to the MQ queue? MQ is running ok when I test it from Unix, and I can manually pass messages via Unix.


Leave a comment