Reason code 2278—MQRC_CLIENT_CONN_ERROR—means the IBM MQ client could not use the client connection definition you gave it. The server might be fine and the network open, but the client-side story is inconsistent: CCDT row points at QM_OLD, Java code requests channel PAY.CHANNEL while the table only defines PAY.SVRCONN, SSL cipher in mqclient.ini disagrees with SVRCONN on the server, or Kubernetes mounted an empty ConfigMap where AMQCLCHF.tab should live. IBM support sees 2278 frequently with JMS and Spring applications after cloud migration when CCDT URL in properties still references file:///paths from on-prem workstations. This tutorial explains how client definitions layer with MQCONN, building and deploying CCDT from RUNMQSC, mqclient.ini and environment variables, diagnosing 2278 versus 2538 and 2059, HA and reconnect interactions, and standards for keeping client and server channel definitions synchronized through CI/CD.
2278 often means two layers disagree—code passes CHANNEL(A) while CCDT default row is CHANNEL(B). Prefer one source of truth: either all CCDT or all explicit MQCONNX properties, documented per team.
| Code | Focus | Check first |
|---|---|---|
| 2278 | Client definition mismatch | CCDT and mqclient.ini |
| 2538 | TCP host/port | CONNAME and listener |
| 2059 | Queue manager attach | dspmq and QM name |
123456789DEFINE CHANNEL('APP.SVRCONN') CHLTYPE(SVRCONN) TRPTYPE(TCP) + CONNAME('mqhost.example.com(1414)') SSLCIPH(ANY_TLS12_OR_HIGHER) * Generate CCDT on server (command varies by version — see IBM docs): * runmqsc -n -c -x output AMQCLCHF.TAB * Client container: * ENV MQCHLLIB=/opt/mqm/ccdt * ENV MQCHLTAB=AMQCLCHF.TAB
Regenerate CCDT after every channel SSL or CONNAME change affecting clients. Store tab file in artifact repository with version label matching deployment. Never hand-edit binary CCDT.
MQSERVER environment variable format encodes channel, transport, and CONNAME in one string—for example CHANNEL/TCP/CONNAME. Typo in MQSERVER causes 2278 at process start before main logic runs. Containers copying env from Helm values must validate in staging with mqconn sample or minimal Java main. Spring Boot ibm.mq.connName must align with same host and port as CCDT row if both present.
JMS connection factory holds host, port, channel, queue manager, SSL suite. Mixing CCDT with explicit factory properties can confuse the provider—follow one pattern from IBM JMS client documentation. 2278 after first successful message may indicate reconnect path loading different property set; enable IBM client trace briefly to see which definition failed on second connect.
Multiple CCDT entries for cluster queue managers or standby hosts require client reconnect options to try alternates. Wrong failover order—dead host first—produces 2278 until timeout cycles. Test failover by pointing primary CONNAME at maintenance host deliberately in lab. Document which CCDT label maps to which datacenter for operations.
2278 is GPS routing you to a bridge that was demolished—the roads work (network) but your map file (CCDT) is wrong for this trip.
You have directions written on paper (CCDT) that do not match the real path to your friend's house, even though the friend is home.
Write deployment checklist: server ALTER CHANNEL triggers CCDT regen and app redeploy.
Compare using only MQSERVER versus only CCDT for one microservice—pros and cons.
Diagnose scenario: 2278 only in Kubernetes, works on developer laptop—list four causes.
1. 2278 means:
2. CCDT file is:
3. MQCHLLIB points to:
4. 2278 fix often includes: