使用webspere和MQ交互的时候,代码里写的MQQueueManager connect = new MQQueueManager( qManagerName, propEnvironment ) ;其中qManagerName是自己定义好的MQmanagername,propEnvironment 是一个hashtable,用put方法放进去的channelname,hostname,port,ccsId,userId,password去看文档发现也有这个构造方法,但是为什么程序运行到这句话的时候就好像停在那里了发现不往下进行了。求高人指点下。package mq ;import com.ibm.mq.* ;import java.util.Hashtable;
import java.util.Vector ;
import java.util.Stack ;public class ComPUMAMqMgr implements Runnable
{ /** MQコネクションのプール領域 */
private static Stack qStack = new Stack() ; /** MQコネクション保持領域(gc対策用) */
private static Vector qTable = new Vector() ; /** MQManager名 */
private static String qManagerName = new String() ; /** 最小コネクション数 */
private static int minConnectNum = 0 ; /** 最大コネクション数 */
private static int maxConnectNum = 0 ; /** 現在のコネクション数 */
private static int connectNum = 0 ; /** 現在のコネクション使用数 */
private static int connectUseNum = 0 ; /** 最大コネクション存続時間(msec) */
private static long maxExpiry = 0 ; /** 初期化フラグ */
private static boolean initialFlag = false ; /** destroyフラグ */
private static Boolean destroyFlag = Boolean.FALSE ; /** コネクション監視フラグ */
private static boolean watchFlag = false ; /** コネクション監視無効フラグ */
private static boolean noWatchFlag = false ; /** コネクション監視終了フラグ */
private static boolean watchEndFlag = true ; /** コネクション監視時間フラグ */
private static long watchSleepTime = 3000 ; /** コネクション解放時刻 */
private static long disconnectTime = 0 ; /** コネクション監視用オブジェクト */
private static Thread watchThread = null ; /** 環境プロパティ **/
private static Hashtable propEnvironment = null ;
/**
*
* Constructor Name:
* ComPUMAMqMgr<BR>
* Description:
* ComPUMAMqMgrのコンストラクタ<BR>
* Comments:
* 空のComPUMAMqMgrを構築する。<BR>
*
*/
public ComPUMAMqMgr()
{
}
/**
*
* Method Name:
* run<BR>
* Description:
* MQコネクションプーリング監視<BR>
* Comments:
* MQコネクションのプーリング状況を監視する。<BR>
*
*/
public void run()
{ while( ComPUMAMqMgr.watchEndFlag )
{
try
{
if( ComPUMAMqMgr.watchFlag && !ComPUMAMqMgr.noWatchFlag )
{
long now = System.currentTimeMillis() ;
if( now > ComPUMAMqMgr.disconnectTime )
{
ComPUMAMqMgr.releasePool() ;
}
}
if( ComPUMAMqMgr.minConnectNum > ComPUMAMqMgr.connectNum )
{
ComPUMAMqMgr.createConnection() ;
}
Thread.sleep( ComPUMAMqMgr.watchSleepTime ) ;
}
catch( InterruptedException InEx )
{
InEx.printStackTrace() ;
}
catch( MQException MqEx )
{
MqEx.printStackTrace() ;
}
} }
/**
*
* Method Name:
* init<BR>
* Description:
* MQ接続制御の初期化(initialization)<BR>
* Comments:
* MQ接続のコネクションプールの作成等の初期化をする。
* ホスト名・ポート・CCSID・ユーザID・パスワードはnullやマイナス値の場合、
* デフォルト値を使用する。<BR>
* @param qManagerName MQマネージャ名
* @param minConnectNum 最小コネクション数
* @param maxConnectNum 最大コネクション数
* @param maxExpiry 最大コネクション存続時間
* @param channel チャネル名
* @param hostname ホスト名
* @param port ポート
* @param ccsId CCSID
* @param userId ユーザID
* @param password パスワード
*
* @return 初期化フラグ(true:正常終了/false:初期化済み)
*
* @exception MQException MQ設定に失敗した場合に送出される。
*
*/
public static synchronized boolean init( String qManagerName,
int minConnectNum,
int maxConnectNum,
long maxExpiry,
String channel,
String hostname,
int port,
int ccsId,
String userId,
String password ) throws MQException
{
boolean RetFlg = false ; if( !ComPUMAMqMgr.initialFlag )
{
if( qManagerName == null || qManagerName.length () == 0 )
{
throw new IllegalArgumentException( "MQ Manager Name is Illegal." ) ;
}
ComPUMAMqMgr.qManagerName = qManagerName ;
setMaxConnectNum( maxConnectNum ) ;
setMinConnectNum( minConnectNum ) ;
setMaxExpiry( maxExpiry ) ; propEnvironment = new Hashtable();
if( channel == null || channel.length () == 0 )
{
throw new IllegalArgumentException( "Channel is Illegal." ) ;
}
// MQEnvironment.channel = channel ;
propEnvironment.put( MQC.CHANNEL_PROPERTY, channel ) ; if( hostname != null && hostname.length () != 0 )
{
// MQEnvironment.hostname = hostname ;
propEnvironment.put( MQC.HOST_NAME_PROPERTY, hostname ) ;
} if( port >= 0 )
{
// MQEnvironment.port = port ;
propEnvironment.put( MQC.PORT_PROPERTY, new Integer(port) ) ;
} if( ccsId >= 0 )
{
// MQEnvironment.CCSID = ccsId ;
propEnvironment.put( MQC.CCSID_PROPERTY, new Integer(ccsId) ) ;
} if( userId != null && userId.length () != 0 )
{
// MQEnvironment.userID = userId ;
propEnvironment.put( MQC.USER_ID_PROPERTY, userId ) ;
} if( password != null && password.length () != 0 )
{
// MQEnvironment.password = password ;
propEnvironment.put( MQC.PASSWORD_PROPERTY, password ) ;
}
createConnection() ; watchThread = new Thread( new ComPUMAMqMgr() ) ;
watchThread.setDaemon( true ) ;
watchThread.start() ;
ComPUMAMqMgr.initialFlag = true ;
RetFlg = true ; }
return( RetFlg ) ;
} /**
*
* Method Name:
* createConnection<BR>
private static void createConnection() throws MQException
{
int start = ComPUMAMqMgr.connectNum ;
int end = 0 ; // (ComPUMAMqMgr.minConnectNum > ComPUMAMqMgr.connectNum
if( ComPUMAMqMgr.minConnectNum > ComPUMAMqMgr.connectNum )
{
end = ComPUMAMqMgr.minConnectNum ;
ComPUMAMqMgr.watchFlag = false ;
}
// ComPUMAMqMgr.minConnectNum <= ComPUMAMqMgr.connectNum
// && ComPUMAMqMgr.maxConnectNum > ComPUMAMqMgr.connectNum
else if( ComPUMAMqMgr.minConnectNum <= ComPUMAMqMgr.connectNum &&
ComPUMAMqMgr.maxConnectNum > ComPUMAMqMgr.connectNum )
{
end = ComPUMAMqMgr.connectNum + 1 ;
ComPUMAMqMgr.watchFlag = true ;
}
// ComPUMAMqMgr.maxConnectNum <= ComPUMAMqMgr.connectNum
else
{
end = ComPUMAMqMgr.maxConnectNum ;
ComPUMAMqMgr.watchFlag = true ;
} for( int count = start ; start < end ; start++ )
{
MQQueueManager connect = new MQQueueManager( qManagerName, propEnvironment ) ;//程序就在这里停止了好像,没有往下进行。 if( connect != null )
{
// set connection
ComPUMAMqMgr.qStack.push( connect ) ;
ComPUMAMqMgr.qTable.addElement( connect ) ;
// count set
setConnectNum( ++count ) ;
ComPUMAMqMgr.disconnectTime = System.currentTimeMillis() + ComPUMAMqMgr.maxExpiry ;
}
}
}
想请教是不是有什么包没引入。导致new MQQueueManager( qManagerName, propEnvironment )的时候一直不能初期化。
还是有别的原因com.ibm.mq.jar和com.ibm.mqjms.jar包我都引了。
}
import java.util.Vector ;
import java.util.Stack ;public class ComPUMAMqMgr implements Runnable
{ /** MQコネクションのプール領域 */
private static Stack qStack = new Stack() ; /** MQコネクション保持領域(gc対策用) */
private static Vector qTable = new Vector() ; /** MQManager名 */
private static String qManagerName = new String() ; /** 最小コネクション数 */
private static int minConnectNum = 0 ; /** 最大コネクション数 */
private static int maxConnectNum = 0 ; /** 現在のコネクション数 */
private static int connectNum = 0 ; /** 現在のコネクション使用数 */
private static int connectUseNum = 0 ; /** 最大コネクション存続時間(msec) */
private static long maxExpiry = 0 ; /** 初期化フラグ */
private static boolean initialFlag = false ; /** destroyフラグ */
private static Boolean destroyFlag = Boolean.FALSE ; /** コネクション監視フラグ */
private static boolean watchFlag = false ; /** コネクション監視無効フラグ */
private static boolean noWatchFlag = false ; /** コネクション監視終了フラグ */
private static boolean watchEndFlag = true ; /** コネクション監視時間フラグ */
private static long watchSleepTime = 3000 ; /** コネクション解放時刻 */
private static long disconnectTime = 0 ; /** コネクション監視用オブジェクト */
private static Thread watchThread = null ; /** 環境プロパティ **/
private static Hashtable propEnvironment = null ;
/**
*
* Constructor Name:
* ComPUMAMqMgr<BR>
* Description:
* ComPUMAMqMgrのコンストラクタ<BR>
* Comments:
* 空のComPUMAMqMgrを構築する。<BR>
*
*/
public ComPUMAMqMgr()
{
}
/**
*
* Method Name:
* run<BR>
* Description:
* MQコネクションプーリング監視<BR>
* Comments:
* MQコネクションのプーリング状況を監視する。<BR>
*
*/
public void run()
{ while( ComPUMAMqMgr.watchEndFlag )
{
try
{
if( ComPUMAMqMgr.watchFlag && !ComPUMAMqMgr.noWatchFlag )
{
long now = System.currentTimeMillis() ;
if( now > ComPUMAMqMgr.disconnectTime )
{
ComPUMAMqMgr.releasePool() ;
}
}
if( ComPUMAMqMgr.minConnectNum > ComPUMAMqMgr.connectNum )
{
ComPUMAMqMgr.createConnection() ;
}
Thread.sleep( ComPUMAMqMgr.watchSleepTime ) ;
}
catch( InterruptedException InEx )
{
InEx.printStackTrace() ;
}
catch( MQException MqEx )
{
MqEx.printStackTrace() ;
}
} }
/**
*
* Method Name:
* init<BR>
* Description:
* MQ接続制御の初期化(initialization)<BR>
* Comments:
* MQ接続のコネクションプールの作成等の初期化をする。
* ホスト名・ポート・CCSID・ユーザID・パスワードはnullやマイナス値の場合、
* デフォルト値を使用する。<BR>
* @param qManagerName MQマネージャ名
* @param minConnectNum 最小コネクション数
* @param maxConnectNum 最大コネクション数
* @param maxExpiry 最大コネクション存続時間
* @param channel チャネル名
* @param hostname ホスト名
* @param port ポート
* @param ccsId CCSID
* @param userId ユーザID
* @param password パスワード
*
* @return 初期化フラグ(true:正常終了/false:初期化済み)
*
* @exception MQException MQ設定に失敗した場合に送出される。
*
*/
public static synchronized boolean init( String qManagerName,
int minConnectNum,
int maxConnectNum,
long maxExpiry,
String channel,
String hostname,
int port,
int ccsId,
String userId,
String password ) throws MQException
{
boolean RetFlg = false ; if( !ComPUMAMqMgr.initialFlag )
{
if( qManagerName == null || qManagerName.length () == 0 )
{
throw new IllegalArgumentException( "MQ Manager Name is Illegal." ) ;
}
ComPUMAMqMgr.qManagerName = qManagerName ;
setMaxConnectNum( maxConnectNum ) ;
setMinConnectNum( minConnectNum ) ;
setMaxExpiry( maxExpiry ) ; propEnvironment = new Hashtable();
if( channel == null || channel.length () == 0 )
{
throw new IllegalArgumentException( "Channel is Illegal." ) ;
}
// MQEnvironment.channel = channel ;
propEnvironment.put( MQC.CHANNEL_PROPERTY, channel ) ; if( hostname != null && hostname.length () != 0 )
{
// MQEnvironment.hostname = hostname ;
propEnvironment.put( MQC.HOST_NAME_PROPERTY, hostname ) ;
} if( port >= 0 )
{
// MQEnvironment.port = port ;
propEnvironment.put( MQC.PORT_PROPERTY, new Integer(port) ) ;
} if( ccsId >= 0 )
{
// MQEnvironment.CCSID = ccsId ;
propEnvironment.put( MQC.CCSID_PROPERTY, new Integer(ccsId) ) ;
} if( userId != null && userId.length () != 0 )
{
// MQEnvironment.userID = userId ;
propEnvironment.put( MQC.USER_ID_PROPERTY, userId ) ;
} if( password != null && password.length () != 0 )
{
// MQEnvironment.password = password ;
propEnvironment.put( MQC.PASSWORD_PROPERTY, password ) ;
}
createConnection() ; watchThread = new Thread( new ComPUMAMqMgr() ) ;
watchThread.setDaemon( true ) ;
watchThread.start() ;
ComPUMAMqMgr.initialFlag = true ;
RetFlg = true ; }
return( RetFlg ) ;
} /**
*
* Method Name:
* createConnection<BR>
private static void createConnection() throws MQException
{
int start = ComPUMAMqMgr.connectNum ;
int end = 0 ; // (ComPUMAMqMgr.minConnectNum > ComPUMAMqMgr.connectNum
if( ComPUMAMqMgr.minConnectNum > ComPUMAMqMgr.connectNum )
{
end = ComPUMAMqMgr.minConnectNum ;
ComPUMAMqMgr.watchFlag = false ;
}
// ComPUMAMqMgr.minConnectNum <= ComPUMAMqMgr.connectNum
// && ComPUMAMqMgr.maxConnectNum > ComPUMAMqMgr.connectNum
else if( ComPUMAMqMgr.minConnectNum <= ComPUMAMqMgr.connectNum &&
ComPUMAMqMgr.maxConnectNum > ComPUMAMqMgr.connectNum )
{
end = ComPUMAMqMgr.connectNum + 1 ;
ComPUMAMqMgr.watchFlag = true ;
}
// ComPUMAMqMgr.maxConnectNum <= ComPUMAMqMgr.connectNum
else
{
end = ComPUMAMqMgr.maxConnectNum ;
ComPUMAMqMgr.watchFlag = true ;
} for( int count = start ; start < end ; start++ )
{
MQQueueManager connect = new MQQueueManager( qManagerName, propEnvironment ) ;//程序就在这里停止了好像,没有往下进行。 if( connect != null )
{
// set connection
ComPUMAMqMgr.qStack.push( connect ) ;
ComPUMAMqMgr.qTable.addElement( connect ) ;
// count set
setConnectNum( ++count ) ;
ComPUMAMqMgr.disconnectTime = System.currentTimeMillis() + ComPUMAMqMgr.maxExpiry ;
}
}
}
想请教是不是有什么包没引入。导致new MQQueueManager( qManagerName, propEnvironment )的时候一直不能初期化。
还是有别的原因com.ibm.mq.jar和com.ibm.mqjms.jar包我都引了。
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货