Site Search :
Standard Enterprise XML Methodology Pattern Setting Tunning Other
Article Contributors
GuestBook
Javapattern Maven
XSourceGen Dev
JetSpeed Test
JLook Image
jLook Family Site


Weblogic 7에서 JMS Queue Browser 활용 1
 
본 아티클은 JMS와 관련하여 Queue에 있는 메시지를 조회하고 검색하여 재처리등의 작업을 수행하고 하는 프로젝트의 필요에 의해 만들어진 것이다. ( 2003/08/12 ) 174
Written by mino - 김민호
1 of 1
 

이번 아티클은 JLook멤버이신 김민호님께서 올리시는 글입니다. Contributor로의 등재를 
약속하셨으니 상당히 고급자료가 올라오리라 생각됩니다. 감사합니다.

자..시작함다.


본 아티클은 JMS와 관련하여 Queue에 있는 메시지를 조회하고 검색하여 재처리등의 작업을 수행하고 하는 프로젝트의 필요에 의해 현재 개발중인 필자가 놀새님의 아티클에 대한 압박과 나도 함 써봐야겠다는 마음에서 쓰게된 아티클임을 밝히는 바이다. ▶ 준비사항 일단 Weblogic를 깔아야 하는데, 버전은 크게 상관없음. 대부분 javax.jms 의 extended package부분만을 사용하기 때문에… 단. 웹로직이여야 할걸. ▶ QueueBrowser 현재 필자가 진행하는 프로젝트에서 외부 client에 대한 요청을 JMS Queue가 받고 그 Queue의 내용을 WLI의 BPM이 처리하는 구조로 되어 있는데, (BPM이 뭔지는 이 아티클에선 몰라도 된다.) 고객측의 요청으로 인하여 Queue에 관한 모니터링과 향후 Error Handling에 사용하기 위해서 QueueBrowser를 사용하여 원하는 Queue의 내용을 조회하는데 사용되는 클래스이다. 일단 QueueBrowser는 다음과 같은 형태로 얻어낼 수 있다.

public static void messageList(
	String connectionFactoryName,
	String queueName)
	throws Exception {

	// QueueConnectionFactory를 만든다.
	QueueConnectionFactory queueConnectionFactory =
		NamespaceUtil.getQueueConnectionFactory(
			prop.getProperty("wli.server.url"),
			prop.getProperty("wli.server.user"),
			prop.getProperty("wli.server.password"),
			connectionFactoryName);

	// QueueConnectionFactory로 부터 QueueConnection을 얻어온다.
	QueueConnection queueConnection =
		queueConnectionFactory.createQueueConnection();
	queueConnection.start();

	// QueueConnection으로부터 QueueSession을 생성한다.
	QueueSession queueSession = null;
	queueSession =
queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

	Queue queue =
		NamespaceUtil.getQueue(
			prop.getProperty("wli.server.url"),
			prop.getProperty("wli.server.user"),
			prop.getProperty("wli.server.password"),
			queueName);
		
	QueueSender queueSender = queueSession.createSender(queue);
	QueueReceiver queueReciever = 
queueSession.createReceiver(queue);

	TextMessage sendTextMessage = null;
	sendTextMessage = queueSession.createTextMessage();
	sendTextMessage.setText("Test입니다....1");

	queueSender.send(sendTextMessage);

	QueueBrowser queueBrowser = queueSession.createBrowser(queue);
		
	Enumeration enum = queueBrowser.getEnumeration();
	TextMessage textMessage = null;
	System.out.println("Browser Start!");
	while(enum.hasMoreElements()){
		textMessage = (TextMessage)enum.nextElement();
		System.out.println(textMessage.getJMSMessageID() + 
" [ " + textMessage.getText() +" ]");
	}
	System.out.println("Browser End!");
		
	TextMessage recieveTextMessage = null;
	recieveTextMessage = (TextMessage) queueReciever.receive();
		
	System.out.println("recieveTextMessage ==> " + 
recieveTextMessage);
	queueBrowser.close();
}

위에서 NamespaceUtil Class 와 prop는 필자가 필요에 의해서 사용한 Utility class인데, 용도는 다음과 같다. NamespaceUtil : 주로 JNDI Lookup을 하는 놈들을 미리 얻어내기 위한 Utility class PropManager : 서버의 정보등을 Properties로 관리하는 Utility class 따라서 위의 클래스는 그냥 저런놈이 있다고만 알고 다음으로 넘어가자. 위의 소스를 보면 대충알겠지만, 보통 Queue에 Message를 넣얼때나, 뺄때의 코딩과 별반 다르지 않다. 다만 QueueSession에서 얻어낸 QueueBrowser같은 경우 단지 조회만 하는것이지 다른작업(빼낸다거나 넣는다거나)은 할 수 없음은 알아두자. 일단 위와 같은 코딩으로 작업을 수행하게 되면 원하는 Queue에 대해서 볼 수 있느냐, 고건 아니다. 왜냐면, Weblogic의 경우 모든 Resource를 ACL로 관리를 하기 때문에 JMS에 대한 Browser권한이 없다면 볼수 없다는 에러가 뜨는것이다. 따라서 Weblogic console에 들어가 JMS의 대한 Browser권한을 줘야 한다. [domain name] > Realms> myRealm> Access Control L... 로 들어가면 위와 같은 화면을 볼 수 있는데 이것이 Name별 Permission을 줄 수 있는 곳이 되겠다. 이곳에서 다음과 같은 곳을 찾아서 browser를 추가하면 된다. 위를 보면 weblogic.jms에 browse라는게 보이는데 이게 원래 필자의 weblogic(정확히 말하면 현 프로젝트의 개발서버)에는 없었다. 아마도 이글을 읽으시는 분들또한 없을 터이니 넣어주기만 하면 된다. 그냥 browse라는 이름으로 위의 소스에서 weblogic을 connecte할때 사용할 user 또는 Group의 이름을 넣어주면 된다. - 이점이 중요한 것이 되겠다. 이렇게 하면 다음과 같이 Queue에 있는 Message를 볼 수 있게 된다. 이상 첫번째 아티클을 마치려 한다. 4년전인가 모 사이트에서 자바 아티클을 몇 개월에 걸쳐 썼던적이 있었던 것 같다. 정말이지 힘들었는데. 그나마 놀새님의 사이트에 얹혀서 내 마음 내키는데로 한달에 한번이든 두번이든 내맘대루 쓸수 있다는 것이 얼마나 마음에 드는지.. ㅋㅋ 사실 이 아티클을 쓸대 존댓말로 써야 하나 반말로 써야하나 무척이나 망설였는데, 일단 놀새님이 반말로 쓰고, 뭔가를 가르치거나 아티클을 쓸때는 그냥 편한게 좋다고 생각한다. 그래서 이렇게 한것이니깐 어린놈이 반말한다고 마음속에 품질말고 그냥 잊어버리기 바란다. 그럼 20000
 
1
References
 
Copyright ⓒ 2003 www.javapattern.info & www.jlook.com, an jLOOK co.,LTD