ÀÚ¹Ù ¸Þ½Ã¡ ¼ºñ½º (JMS) »ç¾çÀº ÀÚ¹Ù ±â¹ÝÀÇ ÁöÁ¡°£ (point-to-point, P2P) ¸Þ½Ã¡°ú
publish/subscribe (P/S) ¸Þ½Ã¡¿¡ ´ëÇÑ Ç¥ÁØÀ» ¿°ÅÇÑ´Ù. SunÀº ÇöÀç 12°³ÀÇ
¶óÀ̼±½º ¹ÞÀº JMS ±¸ÇöÀÚ ¸ñ·ÏÀ» °¡Áö°í ÀÖ°í 16°³ÀÇ ¶óÀ̼±½º ¹ÞÁö ¾ÊÀº ±¸ÇöÀÚ¸¦ °¡Áö°í ÀÖ´Ù. ±¸Á¶ÀûÀ¸·Î
JMS´Â JDBC API¿Í À¯»çÇѵ¥, µÑ ´Ù ÀûÀº ¼öÀÇ Å¬·¡½º¸¦, ±×·¯³ª ¸¹Àº ÀÎÅÍÆäÀ̽º ÁýÇÕÀ» Á¤ÀÇÇϱâ
¶§¹®ÀÌ´Ù. ÀÌ ÀÎÅÍÆäÀ̽ºµéÀº ±¸ÇöµÇ¾îÁ®¾ß ÇÏ°í, ¿©±â¿¡ »óÀÀÇÏ´Â ±¸Çöµéµµ µ¿ÀÏÇÏ°Ô ÇൿÇÒ °ÍÀÌ´Ù.
´ëºÎºÐÀÇ µ¥ÀÌÅͺ£À̽ºÀÇ °æ¿ì ÇൿÀÇ À¯»ç¼ºÀº JDBC ÀÎÅÍÆäÀ̽º ±¸ÇöÀ¸·Î ³¡³´Ù. SQL Áؼö ¼öÁØ°ú
µ¶ÀÚÀûÀÎ ÀýÂ÷Àû SQL È®Àå (OracleÀÇ PL/SQL°ú SybaseÀÇ Transact-SQLµî)ÀÇ Â÷ÀÌ·Î
ÀÎÇØ µ¥ÀÌÅͺ£À̽º ¼ºñ½º¿¡ Á¢±ÙÇؼ À̸¦ »ç¿ëÇϱâ À§ÇØ ÀÛ¼ºµÈ Äڵ忡 »ó´çÇÑ Â÷ÀÌ°¡ ÀÖÀ» ¼ö ÀÖ´Ù.
JMS¿¡¼´Â ±×·¸Áö ¾Ê´Ù. ÃÖ¼ÒÀÇ ³ë·Â°ú ÀÌ ±Û¿¡¼ ³»°¡ Á¦½ÃÇÑ ÀýÂ÷µéÀ» µû¸§À¸·Î¼ ¿©·¯ºÐÀº ¿©·¯ºÐÀÇ
JMS Ŭ¶óÀ̾ðÆ® Äڵ尡 ¿©·¯ºÐÀÌ »ç¿ëÇÏ°í ÀÖ´Â º¥´õ ±¸ÇöÀ» ¾ËÁö ¸øÇÏ°Ô ¸¸µé ¼ö ÀÖ´Ù. ¿©·¯ºÐÀÌ JMS ¸Þ½ÃÁö
󸮿¡ ´ëÇÑ ±âº»ÀûÀÎ ÀÌÇظ¦ °¡Áö°í ÀÖ´Ù°í °¡Á¤ÇÏÁö¸¸, ±âº» °³³ä°ú ¿ë¾î¸¦ °£´ÜÇÏ°Ô »ìÆ캸¸é¼ ½ÃÀÛÇغ¸ÀÚ.
JMS ¾ÆÅ°ÅØó
¸Þ½ÃÁö¸¦
º¸³»°í ¹Þ´Â ±âº»Àº ¿¬°áÀε¥,ÀÌ´Â JVM ¿ÜºÎ¿¡ ÀÚ¿øÀ» ÇÒ´çÇϴ åÀÓÀ» °¡Áö°í ÀÖ´Ù. JMS º¥´õ´Â
º¸Åë P2P Æ®·£Àè¼ÇÀ» À§ÇØ Àû¾îµµ ÇϳªÀÇ QueueConnection
À», P/S
Æ®·£Àè¼ÇÀ» À§ÇØ TopicConnection
À» ±¸ÇöÇÒ °ÍÀÌ´Ù. À̵é Á¢¼ÓÀº
Session
À» Á¦°øÇϴµ¥, ÀÌ°ÍÀº ¸Þ½ÃÁöÀÇ Àü¼Û°ú ¼ö½ÅÀ» °ü¸®ÇÏ´Â »ý¼ºÀÚÀÌ´Ù.
P2P Æ®·£Àè¼Ç °ü¸®¸¦ À§ÇÑ ±âº» »ý¼ºÀÚ´Â
QueueSender
¿Í QueueReceiver
ÀÌ°í, P/S
Æ®·£Àè¼Ç °ü¸®¸¦ À§ÇÑ »ý¼ºÀÚ´Â TopicSubscriber°ú
TopicPublisher
ÀÌ´Ù. Topic °´Ã¼¿Í Queue °´Ã¼´Â °¢ ¸Þ½ÃÁöÀÇ ¼ö½ÅÁö¿Í
Ãâó¸¦ ³ªÅ¸³»´Â ƯÁ¤ Á¤º¸¸¦ ĸ½¶ÈÇÑ´Ù. ÀÌ °èÃþÀÌ ±×¸² 1¿¡ ³ª¿Í ÀÖ´Ù.
±×¸² 1. JMS Ŭ·¡½º °èÃþ
request/response Áö¿ø Ŭ·¡½º µîÀÇ ´Ù¸¥ »ý¼ºÀÚ¿Í ¾ÖÇø®ÄÉÀÌ¼Ç ¼¹ö¿¡ °íÀ¯ÇÑ ±â´ÉµéÀº JMS
Ç¥ÁØ (Âü°í
ÀÚ·á )¿¡ ³ª¿ÍÀÖ´Ù.
´Ù¸¥ À¯ÇüÀÇ ¿¬°á ¼³Á¤
¿¬°áÀº JMS ¼¹ö¿ÍÀÇ »óÈ£ÀÛ¿ëÀ» À§ÇÑ ÁøÀÔÁ¡À̱⠶§¹®¿¡, °¢ ¿¬°á
ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ·Á¸é ÀÚüÀûÀÎ JMS ¼¹öÀÇ ÀνºÅϽº¿¡ ¾î¶»°Ô ¿¬°áÇÏ´ÂÁö¸¦ ¾Ë¾Æ¾ß ÇÑ´Ù. ±â¹ÝÀÌ µÇ´Â ¿¬°á
ÇÁ·ÎÅäÄÝÀÇ »ó¼¼»çÇ×Àº °¢ º¥´õ¸¶´Ù ´Ù¸¥ °æ¿ì°¡ ¸¹±â ¶§¹®¿¡, À¯È¿ÇÑ ¿¬°á ¼³Á¤¿¡ ÇÊ¿äÇÑ Á¤º¸µµ °¢ º¥´õ¸¶´Ù
´Ù¸£´Ù.
´ëºÎºÐÀÇ º¥´õ´Â ¿¬°áÀÌ µ¿ÀûÀ¸·Î ¼³Á¤µÉ ¼ö ÀÖµµ·Ï ÇÑ´Ù. Áï ¿¬°á
Ŭ·¡½ºÀÇ »ý¼ºÀÚ¸¦ °ø°³ÀûÀ¸·Î Á¤ÀÇÇÏ¿©, ÇÁ·Î±×·¡¸ÓµéÀÌ ÇÊ¿äÇÑ ¿¬°á Á¤º¸¸¦ Á¤ÀÇÇÒ ¼ö ÀÖµµ·Ï ÇÏ°í ÀÖ´Ù. ´ëºÎºÐÀÇ
º¥´õ´Â È£Ãâ¿¡ ´ëÀÀÇØ ¿¬°áÀ» ¹ÝȯÇÏ´Â factory Ŭ·¡½º¸¦ Á¦°øÇÑ´Ù.
¿¬°á factoryÀÇ °æ¿ì factory Ŭ·¡½º´Â µ¶ÀÚÀûÀÎ ¿¬°á Á¤º¸¸¦
°¡Áö°í ¹Ì¸® ·ÎµùµÇ¾îÀÖ´Â ¿¬°áÀ» ¹ÝȯÇÒ ¼ö ÀÖ´Ù. º¥´õ°¡ Á¤ÀÇÇÑ factory Ŭ·¡½º´Â ÇÁ·Î±×·¡¸Ó°¡ Á¢¼Ó
¸Å°³º¯¼ö¸¦ ¼³Á¤ÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ¸Þ¼ÒµåµéÀ» º¸¿© ÁÙ °ÍÀ̸ç, ÀÌ Á¢¼Ó ¸Å°³º¯¼öµé¿¡´Â factory°¡ ¹ÝȯÇÏ´Â
Á¢¼ÓÀÇ Æ¯¼ºÀÌ µé¾î ÀÖ´Ù.
º¥´õ API°¡ ´Ù¸¥ ºÎºÐ
ÀÌ ¸ðµÎ¸¦ Á» ´õ ±¸Ã¼ÈÇϱâ À§ÇØ ¸î¸î
QueueConnection
°ú QueueConnectionFactory ±¸Çö
Á¦Ç°ÀÇ
»ý¼ºÀÚ, Á¢¼Ó factory ¹× ¼³Á¤ ¸Þ¼ÒµåµéÀ» »ìÆ캸ÀÚ. (ÀϺΠ°æ¿ì¿¡´Â ¿À¹ö·ÎµåµÈ
»ý¼ºÀÚ°¡ ¸¹ÀÌ ÀÖÀ½¿¡ À¯ÀÇÇÑ´Ù.; ³ª´Â °¢ °æ¿ì¿¡ ´ëÇØ ÇÑ °³¾¿¸¸ º¸¿©ÁÖ°Ú´Ù.)
IIT SwiftMQ 2.1.3
QueueConnectionFactory »ý¼ºÀÚ ¸Å°³º¯¼ö
java.lang.String
socketFactory
: ¼ÒÄÏ factoryÀÇ Å¬·¡½º ¸í
java.lang.String
hostname
: JMS ¼¹öÀÇ È£½ºÆ® ¸í
int port
: JMS ¼¹öÀÇ Æ÷Æ®
long keepalive
: È°µ¿ ÁÖ±â
´ÙÀ½ ÄÚµå´Â swiftMQ QueueConnectionFactory
°´Ã¼¸¦ »ý¼ºÇÏ´Â
¹æ¹ýÀÌ´Ù. :
QueueConnectionFactory qcf = (QueueConnectionFactory) new
com.swiftmq.jms.ConnectionFactoryImpl
("com.swiftmq.net.PlainSocketFactory", "myhost",4001,60000);
|
Progress SonicMQ 3.5 QueueConnection »ý¼ºÀÚ ¸Å°³º¯¼ö
java.lang.String brokerURL
: URL (in the
form [protocol://]hostname[:port])
java.lang.String connectID
: Á¢¼ÓÀ» ±¸º°Çϱâ À§ÇÑ ID
¹®ÀÚ¿
java.lang.String username
: ±âº» »ç¿ëÀÚ¸í
java.lang.String password
: ±âº» Æнº¿öµå
´ÙÀ½Àº Progress SonicMQ QueueConnectionFactory
°´Ã¼¸¦ »ý¼ºÇÏ´Â »ùÇà ÄÚµåÀÌ´Ù:
progress.message.jclient.QueueConnection queueConnection = new
progress.message.jclient.QueueConnection("tcp://myhost:2506",
"ServiceRequest", "username", "password");
|
MQSeries (MA88)
¿ì¸®°¡ »ìÆ캼 ¸¶Áö¸· ¿¹Á¦´Â IBM MQSeries ±¸ÇöÀÌ´Ù. MQSeries´Â ¿¬°á »ý¼ºÀÚ¸¦ ÀÌ¿ëÇÏÁö ¾Ê´Â´Ù. ´ë½Å ¿©·¯ºÐÀº µ¿ÀûÀ¸·Î ¿¬°áÀ» »ý¼ºÇϱâ
À§ÇØ ¿¬°á factory¸¦ ±¸ÃàÇØ¾ß Çϴµ¥, ÀÌ´Â ¿¬°áÀ» Á¦°øÇϱâ À§ÇÑ ¸Þ¼Òµå¸¦ Á¦°øÇÑ´Ù. ¸Å°³º¯¼ö°¡ ¾ø´Â
»ý¼ºÀÚ¸¦ ¸¸µé±â À§ÇÑ ÄÚµå´Â ´ÙÀ½°ú °°´Ù.:
MQQueueConnectionFactory = new
MQQueueConnectionFactory();
|
¿¬°á factoryÀÇ »ý¼ºÀÚ´Â ¸Å°³º¯¼ö°¡ ¾ø±â ¶§¹®¿¡, factory´Â factory°¡ Á¦°øÇÒ ¿¬°áÀÇ
Ư¼ºµéÀ» Á¦¾îÇϱâ À§ÇØ È£ÃâµÉ ¼ö ÀÖ´Â µ¹¿¬º¯ÀÌ ¸Þ¼Òµå¸¦ °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù.:
setTransportType(int x)
: ´ÙÀ½ ¿É¼Ç Áß Çϳª¿¡ Àü¼Û À¯ÇüÀ»
¼³Á¤ÇÑ´Ù. :
JMSC.MQJMS_TP_BINDINGS_MQ
: MQSeries ¼¹ö°¡
Ŭ¶óÀ̾ðÆ®¿Í µ¿ÀÏÇÑ È£½ºÆ®¿¡ ÀÖÀ» ¶§ »ç¿ëµÈ´Ù.
JMSC.MQJMS_TP_CLIENT_MQ_TCPIP
: MQSeries
¼¹ö°¡ Ŭ¶óÀ̾ðÆ®¿Í ´Ù¸¥ È£½ºÆ®¿¡ ÀÖÀ» ¶§ »ç¿ëµÈ´Ù.
setQueueManager(String x)
: Å¥ °ü¸®ÀÚÀÇ À̸§À» ¼³Á¤ÇÑ´Ù.
setHostName(String hostname)
: Ŭ¶óÀ̾ðÆ®¸¸ ÇØ´çµÊ,
È£½ºÆ®ÀÇ À̸§À» ¼³Á¤ÇÑ´Ù.
setPort(int port)
: Ŭ¶óÀ̾ðÆ® ¿¬°áÀ» À§ÇÑ Æ÷Æ®¸¦ ¼³Á¤ÇÑ´Ù.
setChannel(String x)
: Ŭ¶óÀ̾ðÆ®¿¡¸¸ ÇØ´çµÊ, »ç¿ëÇÒ Ã¤³ÎÀ»
¼³Á¤ÇÑ´Ù.
´ÙÀ½Àº MQSeries
QueueConnectionFactory
¸¦ »ý¼ºÇÏ°í ƯÁ¤ Å¥ °ü¸®ÀÚ·Î Á¢¼ÓÇÏ°Ô ÇÏ´Â »ùÇÃ
ÄÚµåÀÌ´Ù. :
com.ibm.mq.jms.MQQueueConnectionFactory factory = new
com.ibm.mq.jms.MQQueueConnectionFactory();
factory.setQueueManager("QMGR");
com.ibm.mq.jms.MQQueueConnection connection =
factory.createQueueConnection();
|
º¥´õ¿¡ µ¶¸³ÀûÀÎ ÄÚµå »ý¼º¿¡¼ÀÇ JNDIÀÇ
¿ªÇÒ
°£·«ÇÏ°Ô »ìÆ캸¾ÒµíÀÌ, °¢ º¥´õ´Â ÀÚüÀûÀÎ º°°³ÀÇ ¿¬°á ¸Å°³º¯¼ö¸¦
äÅÃÇÏ°í ÀÖ´Ù. ±×·¸´Ù¸é ÀÌµé ¸ðµÎ¸¦ ¿©·¯ºÐ Äڵ忡 ¾î¶»°Ô Åõ¸íÇÏ°Ô Áö¿øÇÒ °ÍÀΰ¡? Ç¥ÁØ ¼Ö·ç¼ÇÀº ³×À̹Ö
¼ºñ½º¸¦ »ç¿ëÇÏ¿© »çÀü ¼³Á¤µÈ ConnectionFactory
¸¦ À¯ÁöÇÏ´Â °ÍÀÌ´Ù. ½ÇÇà
½Ã¿¡ ¿©·¯ºÐÀÇ ÄÚµå´Â ConnectionFactory
¸¦ °Ë»öÇÏ°í ¿©±â¿¡¼ ¹ÝȯµÇ´Â ¿¬°áÀ»
¿©·¯ºÐÀÇ JMS ¼¹ö¿¡ Åõ¸íÇÏ°Ô ¿¬°á½Ãų ¼ö ÀÖÀ» °ÍÀÌ´Ù. °£´ÜÈ÷ ¿©·¯ºÐÀÇ ³×ÀÌ¹Ö ¼ºñ½º¿¡¼ Á¤È®ÇÏ°Ô ±¸¼ºµÈ
¿¬°á factoryµé¸¸À» °ü¸®ÇÏ¸é µÇ±â ¶§¹®¿¡ Äڵ带 À¯Áöº¸¼öÇÏ°í À籸ÃàÇÒ ÇÊ¿ä°¡ ¾ø¾îÁø´Ù.
Java Naming and Directory Interface (JNDI)´Â ³×ÀÌ¹Ö ¼ºñ½º¿Í
ÀÎÅÍÆäÀ̽ºÇÏ´Â °¡Àå ÀϹÝÀûÀÎ ¹æ¹ýÀÌ´Ù. JNDI´Â ±¸ÇöµÇ¾î¾ß ÇÏ´Â ÀÎÅÍÆäÀ̽º ¼¼Æ®¸¦ °£´ÜÈ÷ Á¤ÀÇÇÑ´Ù´Â Á¡¿¡¼
JMS¿Í À¯»çÇÏ´Ù. JNDI¸¦ ±¸ÇöÇÏ´Â ¸ðµç ³×ÀÌ¹Ö ¼ºñ½º´Â ÇϳªÀÇ Ç¥ÁØ APIÇÏ¿¡ Á¢±ÙµÈ´Ù.
JNDI´Â º¥´õ¿¡ µ¶¸³ÀûÀÎ Äڵ带 ÀÛ¼ºÇÏ·Á´Â ¿ì¸® ³ë·ÂÀÇ Áß½ÉÀÌ´Ù. º¥´õ¿¡ µ¶¸³ÀûÀÎ ¹æ½ÄÀ¸·Î ³×À̹Ö
¼ºñ½º¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇϱ⠶§¹®ÀÌ´Ù. JNDI´Â ¿ì¸®°¡ À§ ¼½¼Ç¿¡¼ ¼³¸íÇÑ µ¶ÀÚÀû ±¸Çö Á¦Ç°¿¡
°üÇØ °ÆÁ¤ÇÏÁö ¾Ê°í ³×ÀÌ¹Ö ¼ºñ½º¿¡¼ ¿Ã¹Ù¸¥ °´Ã¼¸¦ °Ë»öÇϱâ À§ÇÑ ÄÚµå ÀÛ¼º¿¡¸¸ ½Å°æÀ» ¾²µµ·Ï ÇØÁØ´Ù.
JMS ¼¹ö·ÎÀÇ Á¢¼Ó
¿¬°á factory¸¦ »ý¼ºÇÏ°í À̸¦ ¹Ì¸® ±¸¼ºÇÏ¿© ¿©·¯ºÐÀÇ ³×À̹Ö
¼ºñ½º¿¡ °áÇÕ½ÃÅ´À¸·Î½á, ¿©·¯ºÐÀÇ ¸Þ½Ã¡ ¼ºñ½º¿¡¼ ƯÁ¤ º¥´õ¿¡ ±¹ÇÑµÈ ¿¬°á ¸Å°³º¯¼ö¸¦ °¨Ãâ ¼ö ÀÖ´Ù. ¿©·¯ºÐÀÇ
Äڵ尡 °ü·ÃµÇ¾î ÀÖ´Â ÇÑ ¿©·¯ºÐÀº ÀϹÝÀûÀÎ javax.jms.Connection
°´Ã¼¸¦
»ç¿ëÇÏ°í ÀÖ´Ù. º¥´õ ±¸ÇöÀº ÀÎÅÍÆäÀ̽º µÚ¿¡ ¼û°ÜÁø´Ù.
JMS »ç¾çÀº °ü¸®ÀÚ¿¡ ÀÇÇØ »ý¼ºµÇ°í JMS Ŭ¶óÀ̾ðÆ®°¡ »ç¿ëÇÒ ±¸¼º
Á¤º¸¸¦ °¡Áö°í ÀÖ´Â °´Ã¼¸¦ JMS °ü¸® °´Ã¼·Î ÁöĪÇÏ°í ÀÖ´Ù. °ü¸® °´Ã¼´Â JNDI¿¡ ÀÇÁ¸ÀûÀÌÁö
¾ÊÁö¸¸, JNDI À̸§°ø°£¿¡¼ °áÇÕµÇ°í °Ë»öµÉ ¼ö ÀÖÀ½À» ¾Ï½ÃÇÑ´Ù.
Listing 1°ú Listing 2´Â JMS ¼¹ö (ÀÌ °æ¿ì¿¡´Â SwiftMQ)¿¡ Á¢¼ÓÇϱâ À§ÇÑ µÎ °¡Áö
´Ù¸¥ ¹æ½ÄÀ» º¸¿©ÁØ´Ù. º¥´õ¿¡ ÀÇÁ¸ÇÏ´Â Äڵ带 ÀÌ¿ëÇÏ´Â ¹æ½Ä°ú º¥´õ¿¡ µ¶¸³ÀûÀÎ Äڵ带 ÀÌ¿ëÇÏ´Â ¹æ½ÄÀÌ
±×°ÍÀÌ´Ù.
Listing 1. º¥´õ¿¡ ÀÇÁ¸ÀûÀÎ Á¢¼Ó ¹æ¹ý
1.QueueConnectionFactory queueConnectionFactory =
(QueueConnectionFactory) new
com.swiftmq.jms.ConnectionFactoryImpl
("com.swiftmq.net.PlainSocketFactory", "localhost",4001,60000);
2.QueueConnection queueConnection =
queueConnectionFactory.createQueueConnection();
|
Listing 2. º¥´õ¿¡ Á߸³ÀûÀÎ Á¢¼Ó ¹æ¹ý
1.Properties p = new Properties();
2.p.put(Context.INITIAL_CONTEXT_FACTORY,
"com.swiftmq.jndi.InitialContextFactoryImpl");
3.p.put(Context.PROVIDER_URL,"smqp://localhost:4001");
4.ctx = new InitialContext(p);
5.qcf = (QueueConnectionFactory)ctx.lookup("MyQCF");
6.oQueueConnection queueConnection =
queueConnectionFactory.createQueueConnection();
|
Äڵ带 ³ª´©´Â
¹æ¹ý
¿©·¯ºÐµéÀº ¿ì¼± º¥´õ¿¡ µ¶¸³ÀûÀÎ Äڵ尡 ¸î ÇàÀ» ´õ °¡Áö°í ÀÖ´Ù´Â Á¡À»
¾Ë¾ÆÂ÷¸± °ÍÀÌ´Ù. ÀÌ´Â ¿ì¸®°¡ ³×ÀÌ¹Ö ¼ºñ½º¿¡ Á¢¼ÓÇØ¾ß Çϱ⠶§¹®ÀÌ´Ù. ±×·¯³ª Àüü ÇÁ·Î±×·¥¿¡¼ Çѹø¸¸ ³×À̹Ö
¼ºñ½º¿¡ Á¢¼ÓÇÏ¸é µÈ´Ù´Â »ç½ÇÀ» ¿°µÎ¿¡ µÎ¾î¾ß ÇÑ´Ù. µû¶ó¼ Ãß°¡ÀûÀÎ ¸î ÇàÀº ±× °¡Ä¡°¡ ÀÖ´Ù. (ÇÊ¿äÇÒ ¶§¸¶´Ù
¿ø°Ý context¸¦ ÀνºÅÏÆ®È ÇÏ´Â ´ë½Å ³×ÀÌ¹Ö ¼ºñ½º¸¦ Àç»ç¿ëÇϵµ·Ï ÇÑ´Ù.)
³×ÀÌ¹Ö ¼ºñ½º¿ÍÀÇ »óÈ£ÀÛ¿ë°ú Áغñ´Â º¥´õ¿¡ Á߸³ÀûÀÎ ¸Þ½Ã¡ Äڵ带
ÀÛ¼ºÇϴµ¥ Áß¿äÇÏ´Ù. º¥´õ¿¡ ÀÇÁ¸ÀûÀÎ ÄÚµå ¿¹Á¦¿¡¼ ¿ì¸®´Â ¿¬°áÀ» Á¦°øÇÒ factory¸¦ ÀÛ¼ºÇϱâ À§ÇØ
SwiftMQ ±¸ÇöÀÇ QueueConnectionFactory
»ý¼ºÀÚ¸¦ »ç¿ëÇÏ¿´´Ù.
Listing 1ÀÇ 1Çà¿¡¼¿Í °°ÀÌ, ÀÌ ±¸ÇöÀ» À§ÇØ ¿ì¸®´Â º¥´õ¿¡ µ¶ÀÚÀûÀΠŬ·¡½º¸¦ Æ÷ÇÔ½ÃÄÑ¾ß ÇÒ »Ó ¾Æ´Ï¶ó
QueueConnectionFactory
»ý¼ºÀÚ¿¡°Ô ƯÁ¤ º¥´õ¿¡ ±¹ÇÑµÈ ¸Å°³º¯¼öµµ º¸³»¾ß
ÇÑ´Ù.
º¥´õ¿¡ Á߸³ÀûÀÎ ¿¹Á¦¿¡¼, ƯÁ¤ º¥´õ¿¡ ±¹ÇÑµÈ ÄÚµå´Â ¾øÁö¸¸ ¿ì¸®´Â
Ãʱâ context factory¿Í ³×ÀÌ¹Ö ¼ºñ½º¸¦ Á¦°øÇÏ´Â URL »Ó ¾Æ´Ï¶ó
QueueConnectionFactory
ÀÇ ¹ÙÀεù ¸íµµ ¾Ë¾Æ¾ß ÇÑ´Ù. ¹ÙÀεù ¸íÀÇ °æ¿ì
³×ÀÌ¹Ö ¼ºñ½º¸¦ ÀûÀýÇÏ°Ô À¯ÁöÇÏ¸é ¾î¶² º¥´õ°¡ Á¦°øÇÏ´Â °´Ã¼¶óµµ ¿©·¯ºÐÀÇ JNDI Æ®¸®¿¡ ¹ÙÀεù½Ãų ¼ö ÀÖÀ»
°ÍÀÌ´Ù. µû¶ó¼ º¥´õ°¡ ¹Ù²î´õ¶óµµ ¹ÙÀεù ¸íÀ» ¹Ù²Ü ÇÊ¿ä°¡ ¾ø´Ù. JNDI contextÀÇ °æ¿ì Ư¼º ÆÄÀÏ¿¡
¸Å°³º¯¼ö ¹®ÀÚ¿ (Listing 2ÀÇ 2Çà°ú 3Çà)À» ÀúÀåÇÏ´Â °ÍÀÌ ÀϹÝÀûÀÌ´Ù. ÀÌ·¸°Ô Çϸé JMS º¥´õ°¡ ¹Ù²ð
°æ¿ì °£´ÜÈ÷ Ư¼º ÆÄÀÏÀ» ¹Ù²Ù±â¸¸ ÇÏ¸é µÈ´Ù.
ÀÌ ±â¹ýÀº ¿©·¯ºÐ¿¡°Ô ³×ÀÌ¹Ö ¼ºñ½º¿Í °ü·ÃÇÏ¿© À¯¿¬¼º°ú À̽ļºÀ»
Á¦°øÇÑ´Ù´Â Á¡µµ Èï¹Ì·Î¿î ÀÏÀÌ´Ù. ¸¹Àº JMS º¥´õ (Fiorano, SwiftMQµî)µéÀÌ ÀÚüÀûÀÎ JNDI
¼ºñ½º¸¦ Á¦°øÇÏÁö¸¸, ¿©·¯ºÐÀº ³×ÀÌ¹Ö ¼ºñ½º¸¦ JMS ¼ºñ½º¿¡¼ ºÐ¸®ÇÏ°í ½Í¾îÇÒ ¼öµµ ÀÖ´Ù. (¿¹¸¦ µé¾î,
¿©·¯ºÐÀº ¿©·¯ºÐÀÇ ¿¬°á factory¸¦ Áß¾ÓÀÇ LDAP ¼¹ö¿¡ ÀúÀåÇÏ·Á ÇÒ ¼ö ÀÖ´Ù.)
´ÙÀ½Àº °¢±â ´Ù¸¥ JNDI ¿¬°áµéÀ» °¡Á®¿Ã Ư¼º ÆÄÀÏ ¿£Æ®¸®ÀÇ ¿¹ÀÌ´Ù.:
SwiftMQ JNDI ¼ºñ½º
java.naming.provider.url=smqp://myhost:4001
java.naming.factory.initial=com.swiftmq.jndi.InitialContextFactoryImpl
IBM WebSphere JNDI ¼ºñ½º
java.naming.provider.url=iiop://myhost:9001
java.naming.factory.initial=
com.ibm.websphere.naming.WsnInitialContextFactory
iPlanet µð·ºÅ丮 ¼¹ö (LDAP)
java.naming.provider.url=ldap://myhost:389
java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory
BEA WebLogic JNDI ¼ºñ½º
java.naming.provider.url=t3://myhost:7001
java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
File System JNDI ¼ºñ½º
java.naming.provider.url=file:/tmp/stuff
java.naming.factory.initial=com.sun.jndi.fscontext.RefFSContextFactory
¿©·¯ºÐÀÇ ¼Ò½º ÄÚµå´Â º¥´õ Ŭ·¡½º¸¦ Á÷Á¢ ÂüÁ¶ÇÏÁö ¾ÊÀ» ¼ö ÀÖÁö¸¸ º¥´õ Ŭ·¡½º´Â À̸§À¸·Î JVM¿¡ µ¿ÀûÀ¸·Î
·ÎµùµÈ´Ù´Â Á¡¿¡ ÁÖÀÇÇ϶ó. µû¶ó¼ ½ÇÇà ½Ã¿¡ ¿©·¯ºÐ ÇÁ·Î±×·¥ÀÇ Å¬·¡½º°æ·Î¿¡ À̵éÀÌ ÀÖ¾î¾ß ÇÑ´Ù. JNDI¿Í
JMS Ŭ·¡½º¿¡¼µµ ¸¶Âù°¡ÁöÀÌ´Ù.
Ư¼º ÆÄÀÏ ¼³Á¤Çϱâ
µû¶ó¼ ¿©±â¿¡¼ ¿ì¸®´Â JNDI ¼ºñ½º¿¡ ¿¬°áÇÏ´Â ¹æ¹ý°ú Äڵ带 ÀçÄÄÆÄÀÏÇÏÁö ¾Ê°í »óÀÌÇÑ JNDI¿Í JMS
±¸ÇöÀ¸·ÎºÎÅÍ ¿¬°áÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æ¾ß ÇÑ´Ù. Ư¼º ÆÄÀÏÀÌ ¾î¶»°Ô ¼³Á¤µÇ´ÂÁö¿Í JNDI ¿¬°á¿¡¼ Ư¼º ÆÄÀÏÀÌ
¼öÇàÇÏ´Â ¿ªÇÒÀ» »ìÆ캸¸é¼ Áö±Ý±îÁö ¼³¸íÇÑ Á¤º¸µéÀ» Á¾ÇÕÇØ º¸ÀÚ.
JNDI ¿¬°áÀ» À§ÇÑ ±âº» Ŭ·¡½º´Â
javax.naming.InitialContext
ÀÌ´Ù.
InitialDirContext
¿Í °°ÀÌ µð·ºÅ丮 ÀÛ¾÷¿¡ ±¹ÇѵÈ
InitialContext
ÀÇ ÇÏÀ§ Ŭ·¡½ºµµ ÀÖÁö¸¸, ÀÏ¹Ý Å¬·¡½º°¡ ±× ÀÛ¾÷À» ¼öÇàÇÒ
°ÍÀÌ´Ù. InitialContext
°¡ ±¸ÃàµÇ¸é ȯ°æ (½Ã½ºÅÛ Æ¯¼ºÀ̳ª ¾ÖÇø´
¸Å°³º¯¼ö)À¸·ÎºÎÅÍ JNDI ¸Å°³º¯¼ö¸¦ °¡Á®¿À°Å³ª ƯÁ¤ÇÑ jndi.properites ÆÄÀÏÀ» ã´Â´Ù.
ÀÌ ÀÛ¾÷Àº J2SE 1.3.1 javadoc¿¡ ´ÙÀ½°ú °°ÀÌ ¼³¸íµÇ¾î ÀÖ´Ù.:
JNDI´Â ´ÙÀ½ µÎ ¼Ò½ºÀÇ °ªÀ» Â÷·Ê·Î ÇÕÇÏ¿© °¢ Ư¼ºÀÇ °ªÀ» °áÁ¤ÇÑ´Ù.
- »ý¼ºÀÚÀÇ È¯°æ º¯¼ö¿¡¼ óÀ½ ³ªÅ¸³ª´Â Ư¼º°ú (ÀûÇÕÇÑ Æ¯¼º¿¡ ´ëÇÑ) ¾ÖÇø´ ¸Å°³º¯¼ö¿Í ½Ã½ºÅÛ Æ¯¼º
- ¾ÖÇø®ÄÉÀÌ¼Ç ÀÚ¿ø ÆÄÀÏ (jndi.properties)
Ãß°¡ÀûÀΠƯ¼ºµé
Áö±Ý±îÁö ¿ì¸®´Â Á¢¼Ó Á¦°øÀÚÀÇ URL¿Í InitialContext
factory
¸í(name)À̶ó´Â µÎ°³ÀÇ ¸Å°³º¯¼ö¸¸ »ìÆ캸¾Ò´Ù. ½ÇÁ¦·Î´Â ÈξÀ ´õ ¸¹Àº Ư¼º º¯¼öµéÀÌ Á¦°øµÉ ¼ö ÀÖ´Ù. ¿ì¸®°¡ »ìÆ캻 µÎ °¡Áö¸¦ Á¦¿ÜÇÏ°í °¡Àå ÀϹÝÀûÀÎ °ÍÀº
º¸¾È ó¸®µÈ JNDI store¿¡ Á¢±Ù½Ã ¿©·¯ºÐÀÇ ½Å¿øÀ» È®ÀÎÇØÁÖ´Â »ç¿ëÀÚ ¸í°ú Æнº¿öµåÀÌ´Ù. ÀÌ ¸Å°³º¯¼öµéÀº
´ÙÀ½°ú °°´Ù.:
java.naming.security.principal
(»ç¿ëÀÚ¸í)
java.naming.security.credentials
(Æнº¿öµå)
ÆÄÀÏ ·ÎµùÇϱâ
³ª´Â ¿©·¯ºÐ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¸ðµç ·±Å¸ÀÓ ±¸¼º ¸Å°³º¯¼ö¸¦ ÇϳªÀÇ
¾ÖÇø®ÄÉÀÌ¼Ç Æ¯¼º ÆÄÀÏ¿¡ µÎ°í °Å±â¿¡ JNDI ¸Å°³º¯¼ö¸¦ Æ÷ÇÔ½Ãų °ÍÀ» ±ÇÇÑ´Ù. ¸ðµç ¸Å°³º¯¼ö¸¦ ÇÑ °÷¿¡ µÎ¸é
ºÒÈ®½Ç¼ºÀÌ ¾ø¾îÁø´Ù. ±×·¯¸é ¿©·¯ºÐÀº ¾ÖÇø®ÄÉÀÌ¼Ç Æ¯¼º ÆÄÀÏÀ» ·ÎµåÇϱâ À§ÇÑ ¸î °¡Áö ¿É¼ÇÀ» °¡Áø´Ù. ¿©±â¼´Â
µÎ °¡Áö ¿¹¸¦ µé°Ú´Ù. ÆÄÀÏÀº ÀÚ¿ø ¹øµé·Î ·ÎµùµÉ ¼öµµ ÀÖ°í, ¶Ç´Â ¸í·ÉÇà ¸Å°³º¯¼ö·Î Ư¼º ÆÄÀÏÀÇ À̸§°ú À§Ä¡¸¦
Àü´ÞÇÒ ¼öµµ ÀÖ´Ù.°¢ ¹æ½ÄÀº °¢±â ´Ù¸¥ ÀåÁ¡À» °¡Áö°í ÀÖ´Ù.
ÆÄÀÏ À§Ä¡¸¦ ¸í·ÉÇà ¸Å°³º¯¼ö·Î Àü´ÞÇÏ´Â °ÍÀÌ ¿©·¯ºÐ Äڵ带 ±¸¼ºÇÏ´Â
°¡Àå ½¬¿î ¹æ¹ýÀÌ´Ù. ¸Å°³º¯¼ö´Â °£´ÜÈ÷ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ½Ãµ¿À» ¼öÁ¤ÇÏ¿© º¯°æ½Ãų ¼ö ÀÖ´Ù.
ÀÚ¿ø ¹øµé·Î ÆÄÀÏÀ» ·ÎµùÇÏ¸é µÎ °¡Áö ÀÌÁ¡ÀÌ ÀÖ´Ù.:
- JVMÀÇ À§Ä¡¿¡ µû¶ó ´Ù¸¥ ÀÚ¿ø ¹øµéÀÌ ·ÎµùµÉ ¼ö ÀÖ´Ù. ¿¹¸¦
µé¾î, application_en_US.properties ÆÄÀÏÀº ´º¿åÀÇ JNDI ¼ºñ½º¸¦ °¡¸®Å°°í,
application_fr.properties ÆÄÀÏÀº Æĸ®ÀÇ JNDI ¼ºñ½º¸¦ °¡¸®Å²´Ù.
- ÀÚ¿ø ¹øµé¿¡¼ Ư¼ºÀ» ·ÎµùÇÏ´Â °ÍÀº ¾ÆÅ°ÅØó¿Í Ç÷§Æû¿¡ µ¶¸³ÀûÀÎ
¹æ¹ýÀÌ´Ù. ÀÚ¿ø ¹øµéÀº Ŭ·¡½º °æ·Î·ÎºÎÅÍ ·ÎµùµÇ±â ¶§¹®¿¡
ÄÚµå´Â JVMÀÇ ¸í·ÉÇà ¸Å°³º¯¼ö¸¦ ÀÐÀ» ¼ö
ÀÖ´ÂÁö¿Í ¹«°üÇÏ´Ù. ¶ÇÇÑ EJB ÄÄÆ÷³ÍÆ®¿Í °°Àº ÀϺΠÄÄÆ÷³ÍÆ®µéÀÌ ÆÄÀÏ ÀÔÃâ·ÂÀ» Á÷Á¢ ÀÌ¿ëÇÏÁö ¾Ê±â ¶§¹®¿¡
ÀÚ¿ø ¹øµéÀº Ư¼º ÆÄÀÏÀÇ ³»¿ëÀ» ·ÎµùÇÏ´Â ´õ¿í Æí¸®ÇÑ ¹æ¹ýÀ» Á¦°øÇÑ´Ù.
»óÃæµÇ´Â ȯ°æ ¼³Á¤¿¡¼ ¿À´Â È¥¶õÀ» ÇÇÇϱâ À§ÇØ ³ª´Â Ç×»ó ³» Ư¼º ÆÄÀÏ¿¡¼ ÀÐÀº JNDI °ªÀ¸·Î Ư¼º
ÀνºÅϽº¸¦ ¼³Á¤ÇÑ´Ù.
Ư¼º ÆÄÀÏ ÃʱâÈ ¹× JNDI °Ë»ö
ÀÌ ¼½¼Ç¿¡ ³ª¿Í ÀÖ´Â ÄÚµå´Â Ư¼º ÆÄÀÏ ÃʱâÈÀÇ µÎ À¯Çü (¸í·ÉÇà ¸Å°³º¯¼ö ¹× ÀÚ¿ø ¹øµé) »Ó ¾Æ´Ï¶ó
ÀϹÝÀûÀÎ JNDI °Ë»öµµ º¸¿©ÁØ´Ù. ¿ì¼± Listing 3¿¡ ³ª¿Í ÀÖ´Â
application_fr.properties¶ó´Â ±¸¼º ÆÄÀÏ »ùÇÃÀ» »ìÆ캸ÀÚ.:
Listing 3.
PropertiesManagement.properties
java.naming.provider.url=smqp://localhost:4001
java.naming.factory.initial=com.swiftmq.jndi.InitialContextFactoryImpl
java.naming.security.principal=admin
java.naming.security.credentials=secret
com.nickman.neutraljms.QueueConnectionFactory=myQueueConnectionFactory
com.nickman.neutraljms.TopicConnectionFactory=myQueueConnectionFactory
com.nickman.neutraljms.Queue=testqueue@router1
com.nickman.neutraljms.Topic=testtopic
|
ÆÄÀÏÀÇ Ã¹¹ø° ³× ¾ÆÀÌÅÛÀº JNDI ȯ°æ Ư¼ºµéÀÌ´Ù. ¸íÈ®ÇÏ°Ô Çϱâ
À§ÇØ ÀÎÁõ Ư¼ºÀ» Ãß°¡ÇÏ¿´´Ù. µÚÀÇ ³× ¾ÆÀÌÅÛÀº JMS °´Ã¼°¡ ¹ÙÀεùµÇ´Â ³×ÀÌ¹Ö ¼ºñ½ºÀÇ ¸íÀÌ´Ù. ¿ì¸®´Â ÀÌ
À̸§µéÀ» ¿¬°á factory, Å¥, topicÀ» °Ë»öÇϴµ¥ »ç¿ëÇÒ °ÍÀÌ´Ù. ¿©·¯ºÐÀÌ LDAPÀ» »ç¿ëÇÏ°í ÀÖ´Ù¸é
¾Æ¸¶µµ À̸§ÀÌ ÀÌó·³ °£´ÜÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ´ÙÀ½°ú °°Àº À̸§À» º¸°Ô µÉ °ÍÀÌ´Ù.:
java.naming.provider.url =
ldap://myhost:389/o=nickman.com
com.nickman.neutraljms.QueueConnectionFactory
= cn=myQueueConnectionFactory,ou=jmsTree
Ư¼º ÆÄÀÏ Á¤ÀÇ
ÀÌÁ¦ Ư¼º ÆÄÀÏÀ» Àбâ À§ÇÑ Äڵ带 »ìÆ캸ÀÚ. ¾Õ¿¡¼ ¼³¸íÇßµíÀÌ,
¿©·¯ºÐÀº JNDI Á¢¼Ó ¸Å°³º¯¼ö¸¦ °áÁ¤Çϱâ À§ÇÑ µÎ °¡Áö ¿É¼ÇÀ» °¡Áö°í ÀÖ´Ù. Listing 4´Â JNDI
Ư¼ºÀ» °Ë»öÇϱâ À§ÇÑ »ùÇà ÄÚµåÀÌ´Ù.:
Listing 4. JNDI Ư¼º Á¶È¸Çϱâ
package com.nickman.jndi;
import javax.naming.*; // For JNDI Interfaces
import java.util.*;
import java.io.*;
import javax.jms.*;
public class PropertiesManagement {
Properties jndiProperties = null;
Context ctx = null;
public static void main(String[] args) {
PropertiesManagement pm = new PropertiesManagement(args);
.
.
public PropertiesManagement(String[] args) {
jndiProperties = new Properties();
if(args.length>0) {
try {
loadFromFile(args[0]);
.
.
} else {
try {
loadFromResourceBundle();
.
.
private void loadFromFile(String fileName) throws Exception {
FileInputStream fis = null;
try {
fis = new FileInputStream(fileName);
jndiProperties.load(fis);
} finally {
try { fis.close(); } catch (Exception erx){}
}
}
private void loadFromResourceBundle() throws Exception {
String key = null;
String value = null;
ResourceBundle rb =
ResourceBundle.getBundle("PropertiesManagement");
Enumeration enum = rb.getKeys();
while(enum.hasMoreElements()) {
key = enum.nextElement().toString();
value = rb.getString(key);
jndiProperties.put(key, value);
}
}
|
ÀÌ ±Û¿¡¼ÀÇ ÀÛ¾÷½Ã ÂüÁ¶Çϱâ À§ÇØ Àüü ¼Ò½º
ÄÚµå ÆÄÀÏÀ» ´Ù¿î·Îµå ¹ÞÀ» ¼ö ÀÖ´Ù.
Äڵ带 ³ª´©´Â ¹æ¹ý
Listing 4´Â Ư¼º ÆÄÀÏÀ» µÎ °¡Áö ´Ù¸¥ ¹æ½ÄÀ¸·Î ·ÎµùÇϱâ À§ÇÑ Äڵ带 º¸¿©ÁØ´Ù. ¸í·ÉÇà ¸Å°³º¯¼ö°¡
Àü´ÞµÇ¸é ÄÚµå´Â ÀÌ°ÍÀÌ ¿ÏÀüÇÑ Á¶°ÇÀ» °®Ãá Ư¼º ÆÄÀϸíÀ̶ó°í °¡Á¤Çϸç,
loadFromFile(String fileName)
¸Þ¼Òµå¸¦ »ç¿ëÇØ Æ¯¼ºÀÌ ·ÎµùµÈ´Ù.
Ŭ·¡½º´Â ´ÙÀ½°ú °°ÀÌ È£ÃâµÈ´Ù. :
java com.nickman.jndi.PropertiesManagement
c:\config\PropertiesManagement.properties
|
¸í·ÉÇà ¸Å°³º¯¼ö°¡ Àü´ÞµÇÁö ¾ÊÀ¸¸é ÄÚµå´Â loadFromResourceBundle()
¸Þ¼Òµå¸¦ È£ÃâÇÒ °ÍÀÌ´Ù. ÀÌ ¸Þ¼Òµå´Â CLASSPATH¿¡¼ Ư¼º ÆÄÀÏÀ» ã´Â´Ù. µû¶ó¼ Ŭ·¡½º
°æ·Î¿¡ ÀÌ ÆÄÀÏÀÇ µð·ºÅ丮¸¦ µÎ¾î¾ß ÇÑ´Ù. ¾ç ¹æ½Ä ¸ðµÎ¿¡¼ Ư¼ºÀº
jndiProperties
¶ó´Â Ư¼º º¯¼ö·Î ·ÎµùµÈ´Ù.
I JNDI ¼ºñ½º¿¡ ¿¬°áÇϱâ
Listing 5´Â JNDI ¼ºñ½º·ÎÀÇ ¿¬°áÀ» º¸¿©ÁØ´Ù. :
Listing 5. JNDI ¿¬°á
public void connectToJNDI() throws javax.naming.NamingException {
// jndiProperties was loaded from PropertiesManagement.properties
ctx = new InitialContext(jndiProperties);
System.out.println("Connected to " +
ctx.getEnvironment().get(Context.PROVIDER_URL));
}
|
À§ÀÇ ¿¬°á ÄÚµå´Â ¾ÆÁÖ Á÷Á¢ÀûÀÌ´Ù.
jndiProperties
º¯¼ö´Â InitialContext
»ý¼ºÀÚ·Î Àü´ÞµÇ°í, °á°ú·Î ³ª¿À´Â Context
´Â JNDI ¼ºñ½º¿¡ ´ëÇÑ ÀÏÁ¾ÀÇ
"ÇÚµé"ÀÌ´Ù. javax.naming.Context ÀÎÅÍÆäÀ̽º°¡ »ç¿ë °¡´ÉÇÑ ¸ðµç ȯ°æ Ư¼º º¯¼öµéÀ» ¸ðµÎ
Ç¥ÇöÇÏ´Â »ó¼öµéÀÇ ¼ÂÆ®¸¦ ´ã°íÀÖ´Ù´Â µ¥ ÁÖÀÇÇÏ´Â °ÍÀÌ ÁÁ´Ù.
±¸ÃàµÈ Context
·Î ¿ì¸®´Â Listing
6¿¡¼¿Í °°ÀÌ JMS °´Ã¼ °Ë»öÀ» ÁøÇàÇÒ ¼ö ÀÖ´Ù.:
Listing 6. JNDI
°Ë»ö
public QueueConnectionFactory lookupQueueConnectionFactory()
throws javax.naming.NamingException {
return
(QueueConnectionFactory)ctx.lookup(jndiProperties.get
("com.nickman.neutraljms.QueueConnectionFactory").toString());
}
public Queue lookupQueue() throws javax.naming.NamingException {
return
(Queue)ctx.lookup(jndiProperties.get
("com.nickman.neutraljms.Queue").toString());
}
|
°Ë»öÀº °£´ÜÈ÷ ContextÀÇ lookup(String name)
¸Þ¼Òµå¸¦ È£ÃâÇÏ°í, ¿ì¸®°¡ ¿øÇÏ´Â °´Ã¼°¡ ¹ÙÀεùµÉ À̸§À¸·Î Àü´ÞµÇ´Â °úÁ¤À̶ó°í º¼ ¼ö ÀÖ´Ù.
¹ÝȯµÇ´Â °´Ã¼´Â ¿Ã¹Ù¸¥ Ŭ·¡½º·Î º¸³»Á®¾ß Çϴµ¥, ÀÌ °æ¿ì¿¡´Â Ç¥ÁØ
javax.jms
ÀÎÅÍÆäÀ̽ºÁß Çϳª°¡ µÉ °ÍÀÌ´Ù.
Destination ÀÎÅÍÆäÀ̽º
javax.jms.Destination
Àº ¸Þ½ÃÁö°¡ Àü´ÞµÉ ƯÁ¤ ¸ñÀûÁö¸¦ ĸ½¶ÈÇÏ´Â
ÀÎÅÍÆäÀ̽ºÀÌ´Ù. Queue
¿Í Topic
ÀÎÅÍÆäÀ̽º´Â
¸ðµÎ Destination
ÀÎÅÍÆäÀ̽º¸¦ È®ÀåÇÑ´Ù.
Destination
Àº JMS°¡ °ü¸®ÇÏ´Â °´Ã¼À̱⠶§¹®¿¡,
Queue
s¿Í Topic
sµµ ¸¶Âù°¡ÁöÀÌ´Ù.
¿©·¯ºÐÀº JMS API°¡ Topic°ú
Queue
¼¼¼Ç
Ŭ·¡½º¿¡ µÎ°³ÀÇ ¸Þ¼Òµå¸¦ °¡Áö°í ÀÖÀ½À» ¾Ë°Ô µÉ °ÍÀÌ´Ù.:
Topic TopicSession.createTopic(java.lang.String
topicName)
Queue QueueSession.createQueue(java.lang.String
topicName)
µû¶ó¼ ´ÙÀ½°ú °°Àº Áú¹®À» ´øÁú ¼ö ÀÖ´Ù.: ÇϳªÀÇ ¹®ÀÚ¿À» »ç¿ëÇØ °£´ÜÈ÷ À̸¦ ÂüÁ¶ÇÒ ¼ö Àִµ¥ ¿Ö
JNDI¿¡ queue³ª topicÀ» ÀúÀåÇÏ´Â ¼ö°í¸¦ ÇØ¾ß Çմϱî? ±× ÀÌÀ¯´Â ¾ÆÁÖ ¹Ì¹¦ÇÏ´Ù.: À̸¦ ÀÌÇØÇϱâ
À§ÇØ javacdoc¿¡¼ ´ÙÀ½À» ÀοëÇÏ°Ú´Ù.:
Destination
°´Ã¼´Â Á¦°øÀÚ(provider) °íÀ¯ÀÇ ÁÖ¼Ò¸¦
ĸ½¶ÈÇÑ´Ù. JMS API´Â Ç¥ÁØ ÁÖ¼Ò ±¸¹®À» Á¤ÀÇÇÏÁö ¾Ê´Â´Ù. Ç¥ÁØ ÁÖ¼Ò ±¸¹®À» ¿°µÎ¿¡ µÎ´õ¶óµµ, ±âÁ¸ÀÇ
¸Þ½ÃÁö ÁöÇ⠹̵é¿þ¾î (MOM) Á¦Ç°µé°£ÀÇ ÁÖ¼Ò Àǹ̷а£¿¡ Â÷ÀÌ°¡ ³Ê¹« Ä¿¼ ÇϳªÀÇ ±¸¹®À¸·Î´Â ÇØ°áÇÒ ¼ö
¾ø´Ù´Â °á·ÐÀÌ ³»·ÁÁ³´Ù.
Destination
Àº °ü¸®µÇ´Â °´Ã¼À̱⠶§¹®¿¡ ÀÚ½ÅÀÇ ÁÖ¼Ò ¿Ü¿¡ Á¦°øÀÚ
°íÀ¯ÀÇ ±¸¼º Á¤º¸¸¦ Æ÷ÇÔÇÏ°í ÀÖÀ» ¼ö ÀÖ´Ù.
°£´ÜÈ÷ ¸»ÇØ, ÀÌ°ÍÀº ¿ì¸®°¡ ƯÁ¤ JMS Á¦°øÀÚ¿¡ °üÇÑ »ó¼¼»çÇ×À» JNDI¿¡¼ À̸§ °ø°£À» °Ë»öÇϱâ À§ÇØ
»ç¿ëµÇ´Â °£´ÜÇÑ À̸§ µÚ¿¡ ¼û±æ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ³ª´Â ¶ÇÇÑ JMS
Ŭ¶óÀ̾ðÆ®¿Í ½ÇÁ¦ JMS ¸ñÀûÁö°£¿¡ Áß°£ÃþÀ» µÎ¸é ¾ÆÅ°ÅØÃÄ»ó¿¡ Ãß°¡ÀûÀÎ À¯¿¬¼ºÀÌ ÁÖ¾îÁø´Ù´Â °ÍÀ» ¾Ë¾Ò´Ù.
Ŭ¶óÀ̾ðÆ® ÄÚµå´Â myQueue¶ó°í ºÒ¸®´Â JNDI³»ÀÇ À̸§°ø°£À» ÂüÁ¶ÇÒ ¼ö ÀÖÁö¸¸ °ü¸®ÀÚ´Â ¸ðµç
º¥´õÀÇ Å¥ ¼ö½ÅÁö°¡ µÉ ¼ö ÀÖ´Â °´Ã¼¸¦ ±× À̸§°ø°£¿¡ ÇÒ´çÇÒ ¼ö ÀÖ´Ù. ÀÌ °³³äÀÌ ±×¸² 2¿¡ ³ª¿Í
ÀÖ´Ù.
±×¸² 2. ¼ö½ÅÁö À¯¿¬¼º
°ñÄ¡ ¾ÆÇ topics
JMSÀÇ publish-and-subscribe ÇÁ·¹ÀÓ¿öÅ©´Â º¥´õ¿¡ Á߸³ÀûÀÌ µÇ·Á´Â ¿ì¸®ÀÇ ÀÛ¾÷À»
¿Ö°î½ÃÅ°´Â ¸î °¡Áö ±â´ÉÀ» Á¤ÀÇÇÑ´Ù. ¸¹Àº JMS ¼¹ö°¡ °èÃþÀû À̸§ °ø°£À̶ó´Â °³³äÀ» Áö¿øÇϴµ¥, ÀÌ´Â P/S
¸Þ½ÃÁö°¡ ÇϳªÀÇ °èÃþÀ¸·Î ºÐ·ùµÉ ¼ö ÀÖ°Ô ÇÑ´Ù. ÅäÇÈ ±¸µ¶ Ŭ¶óÀ̾ðÆ®°¡ JMS ¼¹ö¿¡ Á¢¼ÓÇÏ¸é °èÃþÀÇ Æ¯Á¤
ºÎºÐ¿¡ ÇØ´çÇÏ´Â ¸Þ½ÃÁö¸¦ ¿äûÇÒ ¼ö ÀÖ´Ù. ±×¸² 3¿¡ ¼³¸íµÈ °èÃþÀ» ¿¹·Î »ìÆ캸ÀÚ.:
±×¸² 3. »ùÇà °èÃþ
À̸¦ Á» ´õ Àß ÀÌÇØÇϱâ À§ÇØ ¿¹Á¦ ½Ã³ª¸®¿À¸¦ »ç¿ëÇغ¸ÀÚ. °¡·É ±¸µ¶ÀÚ
Ŭ¶óÀ̾ðÆ®°¡ ¼ºñ½º ³»¿¡ ÀÖ´Â ¸ðµç ¹Ì±¹ ÁÖ°¡ Á¤º¸¸¦ ±¸µ¶ÇÏ°í ½Í¾îÇÑ´Ù°í °¡Á¤Çغ¸ÀÚ. Á¤ÀûÀÎ ±¸µ¶ÀÇ °æ¿ì
Ŭ¶óÀ̾ðÆ®´Â ¹Ì±¹ ÁÖ°¡¸¦ ±¸µ¶Çϱâ À§ÇØ »çÀü ±¸¼ºµÈ topicÀ» ³ªÅ¸³»´Â JMS °ü¸® °´Ã¼¸¦ °£´ÜÈ÷
°Ë»öÇϱ⸸ ÇÏ¸é µÈ´Ù. JMS º¥´õµé¸¶´Ù °èÃþÀûÀÎ ±¸µ¶À» Ç¥ÇöÇϱâ À§ÇØ ´Ù¸¥ ±¸¹®À» »ç¿ëÇϱ⠶§¹®ÀÌ ÀÌ°ÍÀÌ
ÀÌ»óÀûÀÎ ¹æ¹ýÀÌ µÉ °ÍÀÌ´Ù. ±×¸®°í À̸¦ JNDI°¡ °Ë»öÇÏ´Â °´Ã¼ µÚ·Î ¼û±èÀ¸·Î½á Ŭ¶óÀ̾ðÆ®´Â ±â¹ÝÀÌ µÇ´Â
JMS ±¸ÇöÀ» ¾ËÁö ¸øÇÒ °ÍÀÌ´Ù.
±×·¯³ª ¼ö¹é°³ÀÇ ´Ù¸¥ ±¸µ¶ "cell"À» Á¦°øÇϸç 50°³ÀÇ ´Ù¸¥ ´Ü°è¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Â ÇÑ °èÃþÀ»
»ý°¢Çغ¸ÀÚ. ¶ÇÇÑ ±× °èÃþÀÌ µ¿ÀûÀÌ¸ç °ü¸®ÀÚ°¡ À̸¦ Áö¼ÓÀûÀ¸·Î ´Ã¸°´Ù°í »ý°¢Çغ¸ÀÚ. ±×·± °æ¿ì JMS °ü¸®ÀÚ°¡
°¡´ÉÇÑ ¸ðµç ±¸µ¶À» Ç¥½ÃÇϴµ¥ ÇÊ¿äÇÑ JMS °ü¸® °´Ã¼¸¦ ¸ðµÎ »ý¼ºÇÏ´Â °ÍÀº ºÒ°¡´ÉÇÒ °ÍÀÌ´Ù. ´õ±¸³ª °èÃþ
¼±ÅÃÀº Ŭ¶óÀ̾ðÆ® ¾ÖÇø®ÄÉÀ̼ÇÀ» Áö¿øÇϵµ·Ï À¯¿¬ÇÏ°í µ¿ÀûÀ̾î¾ß ÇÑ´Ù.
ÀÌ·± »óȲ¿¡¼´Â topic ¸íÀÌ ½ÇÇà ½Ã¿¡ Á¤Àǵǵµ·Ï ÇÏ´Â °ÍÀÌ ´õ ÀûÇÕÇÒ °ÍÀÌ´Ù. ¹®Á¦´Â °èÃþÀ» Ç¥ÇöÇϱâ
À§ÇØ »ç¿ëµÇ´Â ±¸¹®ÀÌ º¥´õ¸¶´Ù Ʋ¸®´Ù´Â Á¡ÀÌ´Ù. ´ÙÀ½ ÄÚµåµéÀº ¼¼ °³ÀÇ ´Ù¸¥ º¥´õ°¡ »ç¿ëÇÏ´Â ±¸µ¶ ±¸¹®µéÀÌ´Ù.
MQSeries JMS
Topic topicEqUs = topicSession.createTopic("topic://Prices/Equity/US");
Topic topicEqAll = topicSession.createTopic("topic://Prices/Equity/*");
|
SonicMQ 3.5
Topic topicEqUs = topicSession.createTopic("Prices.Equity.US");
Topic topicEqAll = topicSession.createTopic("Prices.Equity.*");
|
SwiftMQ 2.1.3
Topic topicEqUs = topicSession.createTopic("Prices.Equity.US");
Topic topicEqAll = topicSession.createTopic("Prices.Equity.%");
|
MQSeries JMS ±¸ÇöÀº ´Ù¸¥ µÎ°³ÀÇ ±¸Çö°ú ´Ù¸¥ topic ±¸ºÐÀÚ¸¦ äÅÃÇß´Ù´Â Á¡¿¡ ÁÖÀÇÇÑ´Ù.
(°ÅÀÇ ¸ðµç ´Ù¸¥ º¥´õµéÀº ¸¶Ä§Ç¥¸¦ »ç¿ëÇϴµ¥ MQSeries´Â »ç¼± Ç¥½Ã¸¦ »ç¿ëÇÑ´Ù.)
À§¿¡¼ ¼³¸íÇÑ ¹®ÀÚµé°ú º°µµ·Î, topic ¸í¿¡ ³ªÅ¸³¯ ¼ö ÀÖ´Â º¥´õ¸¶´Ù °íÀ¯ÇÑ ¹®ÀÚ¿µéÀÌ ÀÖ´Ù. ¿¹¸¦
µé¾î, SonicMQ´Â »óÀ§ °èÃþÀ» ±¸ºÐÇϱâ À§ÇØ ÆÄ¿îµå ±âÈ£¸¦ »ç¿ëÇÏ°í, MQSeries´Â º¸Åë API¿ëÀ¸·Î
³²°ÜµÐ ¿É¼ÇÀ» Ç¥ÇöÇϱâ À§ÇØ topic¸í¿¡ Á¢¹Ì»ç¸¦ ºÙÀδÙ. °ÅÀÇ ¸ðµç JMS º¥´õµéÀÌ ´Ù¸¥ ¿ÍÀϵåÄ«µå¸¦
äÅÃÇÏ°í Àֱ⠶§¹®¿¡ ½ÇÇà ½Ã¿¡ ÅäÇÈ ¸íÀ» ÀÏ·üÀûÀ¸·Î Á¤ÀÇÇÏ´Â °ÍÀÌ ¾î·Æ´Ù. ´ÙÇàÈ÷µµ ÀÌ ¹®Á¦¿¡ ´ëÇÑ ÇØ°á¹æ¹ýÀÌ
ÀÖ´Ù. ¸ðµç Ư¼ö ¹®ÀÚ¸¦ ÇϳªÀÇ ÂüÁ¶ ¼Ò½º¿¡ ÀúÀåÇÏ°í ÀÌ ¼Ò½º¿¡¼ ¹®ÀÚµéÀ» ·ÎµåÇÏ¿© ½ÇÇà ½Ã¿¡ »ç¿ëÇÏ´Â °ÍÀÌ´Ù.
ÂüÁ¶ ¼Ò½º´Â ¿©·¯ºÐÀÇ ¾ÖÇø®ÄÉÀÌ¼Ç Æ¯¼º ÆÄÀÏÀÌ µÉ ¼öµµ ÀÖ°í JNDI ¼ºñ½º°¡ µÉ ¼öµµ ÀÖ´Ù. À̸¦
º¸¿©ÁÖ±â À§ÇØ Listing 7°ú °°ÀÌ ¿ì¸®ÀÇ PropertiesManagement.properties ÆÄÀÏ¿¡
topic ¹®ÀÚ¸¦ Ãß°¡ÇÒ °ÍÀÌ´Ù:
Listing 7. topic ¹®ÀÚ°¡ Ãß°¡µÈ
PropertiesManagement.properties
#Topic Delimiter For Sonic and Swift
com.nickman.neutraljms.TopicDelemiter=.
#Topic Delimiter for MQSeries
#com.nickman.neutraljms.TopicDelemiter=/
#Topic Wild Card For Sonic and MQSeries
com.nickman.neutraljms.TopicWildCard=*
#Topic Wild Card For Swift
#com.nickman.neutraljms.TopicWildCard=%
#Topic Prefix For MQSeries
#com.nickman.neutraljms.TopicPrefix=topic://
#Topic Prefix For All Others
com.nickman.neutraljms.TopicPrefix=
|
ÀÌµé ¿£Æ®¸®°¡ Ãß°¡µÇ¾î ¿ì¸®ÀÇ topic ±¸µ¶ Äڵ尡 ´ÙÀ½°ú °°ÀÌ µÇ¸é ÀÌ ÄÚµå´Â º¥´õ¿¡ µ¶¸³ÀûÀ¸·Î µÉ
°ÍÀÌ´Ù:
Listing 8. Topic ±¸µ¶ ÄÚµå
String delim =
jndiProperties.get("com.nickman.neutraljms.TopicDelemiter").toString();
String wildcard =
jndiProperties.get("com.nickman.neutraljms.TopicWildCard").toString();
Strung prefix =
jndiProperties.get("com.nickman.neutraljms.TopicPrefix").toString();
Topic topicEqUs = topicSession.createTopic("Prices" + delim +
"Equity" + delim + "US");
Topic topicEqAll = topicSession.createTopic("Prices" + delim +
"Equity" + delim + wildcard);
|
ÀÏ´Ü ¿©·¯ºÐÀÌ Listing 7¿¡ ³ªÅ¸³ ¿ÜºÎ ¼³Á¤À» ³¡³»°í ³ª¸é ¿©·¯ºÐÀº ¿©Å¸ÀÇ º¥´õ °íÀ¯ ¿É¼ÇÀ»
ó¸®Çϵµ·Ï À̸¦ È®ÀåÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, JMS »ç¾çÀº ÇÑ ¼¼¼ÇÀÌ ±¸ÇöÇÒ ¼ö ÀÖ´Â µÎ °³ÀÇ ¹è´Þ
(delivery) ¸ðµå¸¦ Á¤ÀÇÇÏÁö¸¸, Sonic MQ´Â ¼¼ °³ÀÇ ¹è´Þ¸ðµå¸¦ Ãß°¡ÀûÀ¸·Î ´õ Áö¿øÇÑ´Ù. ¹è´Þ
¸ðµå¸¦ ¿ÜºÎ¿¡¼ Á¤ÀÇÇÔ¿¡ µû¶ó ¿©·¯ºÐÀº Sonic MQÀÇ µ¶ÀÚÀû È®ÀåÀÚ¸¦ ±¸ÇöÇÏ´Â ÇÑÆí ¿©·¯ºÐ ÄÚµåÀÇ º¥´õ
Á߸³¼ºÀ» À¯ÁöÇÒ ¼ö ÀÖ´Ù.
°á·Ð
ÀÌ ±Û¿¡¼ ¼³¸íÇÑ ±â¹ýµéÀº Æ÷°ýÀûÀÎ °ÍÀº ¾Æ´Ï´Ù. ³» ¸ñÇ¥´Â ¿©·¯ºÐÀÌ º¥´õ¿¡ Á߸³ÀûÀÎ JMS ¼Ö·ç¼ÇÀ»
±¸ÇöÇϱâ À§ÇÑ ±æÀ» Ãâ¹ßÇÏ°Ô ÇÏ´Â °ÍÀÌ´Ù. ¶ÇÇÑ ÀÌ ±â¹ýµéÀº ¿©·¯ºÐÀÌ »õ·Î¿î JMS ±¸Çö Á¦Ç°À» µµÀÔÇÒ ¶§ º¯È
»çÇ×À» ÅëÇÕÇÒ ¼ö ÀÖ´Â ¿ª·®À» Çâ»ó½Ãų °ÍÀÌ´Ù.
¿©±â¿¡ ¼Ò°³µÈ ¸ðµç ±â¹ýÀº JMS°¡ °ü¸®ÇÏ´Â °´Ã¼¸¦ JNDI¿¡ ÀúÀåÇÏ´Â ¹æ¹ý¿¡ Å©°Ô ÀÇÁ¸ÇÑ´Ù. J2EE
¾ÖÇø®ÄÉÀÌ¼Ç ¼¹ö¿Í JNDI ¼ºñ½º¸¦ ÅëÇÕÇÏ´Â ¹æ¹ý»Ó ¾Æ´Ï¶ó JMS ¹× JNDI¿Í ÇÔ²² ÀÛ¾÷ÇÏ´Â ¿©·¯ ´Ù¸¥
¹æ¹ýµéÀº ¾ÕÀ¸·Î ÀÛ¼ºÇÒ ±Û¿¡¼ ´Ù·çµµ·Ï ÇÏ°Ú´Ù.
Âü°í ÀÚ·á