SPRING
2017.05.30 / 18:57

'Spring DM'¿¡ ÇØ´çµÇ´Â ±Û 117°Ç

Secutiry
Ãßõ ¼ö 213

'Spring DM'¿¡ ÇØ´çµÇ´Â ±Û 117°Ç

  1. 2009.07.11 ½ºÇÁ¸µ ½½¶óÀ̽º(Spring Slice)
  2. 2009.03.20 Our plans for building OSGi application ¿ä¾à
  3. 2008.12.08 ½ºÇÁ¸µ + OSGi(½ºÇÁ¸µ DM) °³¹ß Çʵ¶ ·¹ÆÛ·±½º 3Á¾ ¼¼Æ® (6)
  4. 2008.11.27 ¿ÀÈ£.. ½ºÇÁ¸µ¼Ò½º manifest Çì´õ°¡ OSGi¿¡ Ãß°¡µÇ´Â±º¿ä
  5. 2008.11.25 ½ºÇÁ¸µ DM 1.2.0 m2 ¹èÆ÷
  6. 2008.11.23 OSGi uses Ãæµ¹ °¨ÁöÇϱâ
  7. 2008.11.23 OSGi "uses" Áö½Ã¾î ÀÌÇØÇϱâ
  8. 2008.11.11 SpringSource DM Server ½Ç½ÀÇÒ °Í 1
  9. 2008.11.09 SpringSource Application Platform(S2AP)Àº?
  10. 2008.10.21 OSGi Åø ¼¼Æ® Pax
  11. 2008.10.16 ½ºÇÁ¸µ DM ÇÁ·ÎÁ§Æ® ºôµåÇϱâ
  12. 2008.10.04 Spring DM 1.1.2 ¸±¸®Áî~
  13. 2008.09.25 Shared Mutable State (2)
  14. 2008.09.25 The Price of Freedom
  15. 2008.09.25 Concurrency and OSGi
  16. 2008.09.15 OSGi °³¹ß¿¡ PDE°¡ ÇÊ¿äÇÑ°¡?
  17. 2008.09.05 ½ºÇÁ¸µ DM 1.2.0 M1 ¹èÆ÷
  18. 2008.08.25 OSGi¿¡¼­ SessionFactory(Hibenate) »ç¿ëÇϱâ
  19. 2008.08.20 OSGi ÆÐÅ°Áö°¡ ¾Æ´Ï¶ó ¼­ºñ½º¾ß ¸»·Î ÁøÁ¤ÇÑ Dynamic
  20. 2008.08.19 Èì... Hibernate Annotation ¹øµé ¿ÖÀÌ·¡ ¿Ö ¤Ð.¤Ð
  21. 2008.08.18 pom.xml¿¡¼­ bnd ¼³Á¤ ÆÄÀÏ ºÐ¸®Çϱâ
  22. 2008.08.14 OSGi ±â¹Ý ÇÁ·¹ÀÓ¿öÅ©°ú ¾ÖÇø®ÄÉÀÌ¼Ç ¾ÆÅ°ÅØó ÁøÈ­ °úÁ¤ (2)
  23. 2008.08.14 OSGi¿¡¼­ HibernateÀÇ SessionFactory ¹®Á¦ (2)
  24. 2008.08.13 ¹øµéÀ» ãÀ¸·Á¸é.. http://www.springsource.com/repository/ (2)
  25. 2008.07.31 ¸ÆºÏ¿¡¼­µµ Spring DM À¥ ¹øµé ¼³Ä¡ ¼º°ø
  26. 2008.07.29 Spring DM 1.1.1 ¹èÆ÷
  27. 2008.07.23 ½ºÇÁ¸µ DM ¸ðµâ¿¡¼­ ´ÜÀ§ Å×½ºÆ®Çϱâ(¸µÅ©)
  28. 2008.07.20 Late Binding in Java (2)
  29. 2008.07.20 Whiteship's ½ºÇÁ¸µ DM ·¹ÆÛ·±½º 1.0 m3 ¹èÆ÷
  30. 2008.07.13 bnd¿¡ ¹øµé ½ÇÇàȯ°æ ¼³Á¤Çϱâ

½ºÇÁ¸µ ½½¶óÀ̽º(Spring Slice)

Spring DM/etc : 2009.07.11 11:36


ÂüÁ¶
http://blog.springsource.com/2009/07/10/pluggable-styling-with-springsource-slices/
http://blog.springsource.com/2009/06/22/modular-web-applications-with-springsource-slices/

À½.. À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» OSGi ¹øµé·Î ±¸¼ºÇÒ ¶§, web ¹øµé Çϳª¶û ±âŸ ¼­ºñ½º ¹øµé ¿©·¯ °³·Î ÂÉ°³¾ß Çϴ±¸³ª.. ¶ó°í ¸¸ »ý°¢ÇÏ°í ÀÖ¾ú´Âµ¥, ±×·¸Áö ¾Ê¾Ò³×¿ä.

½ºÇÁ¸µ ½½¶óÀ̽º¸¦ ÀÌ¿ëÇؼ­ ÇϳªÀÇ À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ¿©·¯ °³ÀÇ À¥ ¹øµéÀ» ±¸¼ºÇÒ ¼ö ÀÖµµ·Ï ÇØÁÖ´Â ÇÁ·¹ÀÓ¿öÅ©¶ó°í º¸¸é µÉ °Í °°½À´Ï´Ù. À¥ ¹øµéÀÌ ¿©·¯ °³¶ó°í Çؼ­ ServletContext°¡ ¿©·¯ °³ »ý±â´Â °Ç ¾Æ´Ï°í, parent/child ±¸Á¶·Î ¿©·¯ ½½¶óÀ̽º°¡ È£½ºÆ®ÀÇ ServletContext¸¦ ÀÌ¿ëÇؼ­ ¾²°Ô ÇØÁִ°¡ º¾´Ï´Ù. ¼³Á¤Àº È£½ºÆ® ÂÊ web.xml ¿¡ ½ºÇÁ¸µ ½½¶óÀ̽º ÇÊÅ͸¦ Ãß°¡ÇÏ¸é µÇ°í, ½½¶óÀ̽º ÂÊ¿¡¼­´Â Manifest.mf¿¡ Slice-Host¿Í Slice-ContextPath¸¦ ¼³Á¤ÇÏ¸é µÇ´Â Á¤µµ·Î °£´ÜÇÑ ÆíÀεí Çϳ׿ä.

¿äÁòÀº ÀÌ°Í Àú°Í º¼ ¿©·ÂÀÌ ¾ø±â ¶§¹®¿¡.. ÀÌÁ¤µµ¸¸ »ìÆ캸°í Æнº~
½Å°í
top

Our plans for building OSGi application ¿ä¾à

Spring DM/etc : 2009.03.20 20:51


ÂüÁ¶ ¹× ¿ä¾à: Our plans for building OSGi application

OSGi ºôµå ¿ä±¸ »çÇ×

- ÀÇÁ¸¼º ¸ÞŸ µ¥ÀÌÅÍ Áߺ¹ Á¦°Å: »ç¿ëÇÏ´Â ºôµå¿¡ µû¶ó pom.xml, ivy.xml¿¡µµ ÀÇÁ¸¼ºÀ» Á¤ÀÇÇÏ°í MANIFEST.MF ÆÄÀÏ¿¡µµ ÀÇÁ¸¼ºÀ» Á¤ÀÇÇϴµ¥ ±×·¯Áö ¸»°í ÇÑ °÷¿¡¼­ ÀÇÁ¸¼ºÀ» Á¤ÀÇÇÏ´Â ¹æ¹ýÀÌ ÇÊ¿äÇÏ´Ù.

- ±âÁ¸ÀÇ ºôµå ½Ã½ºÅÛ È°¿ë: »ç¿ëÀÚµéÀº ±âÁ¸ÀÇ ¹æ½Ä´ë·Î ¸ÞÀÌºì ¶Ç´Â Ant ºôµå¸¦ »ç¿ëÇÏ°í ½Í¾îÇÑ´Ù.

- ÀÚµ¿À¸·Î MANIFEST.MF ÆÄÀÏ »ý¼ºÇϱâ

- OSGi MANIFEST.MF ÆÄÀÏ¿¡¼­ ÀÇÁ¸¼º °¡Á®¿À±â: MANIFEST.MF ÆÄÀÏÀ» Áß½ÉÀ¸·Î ÀÇÁ¸¼ºÀ» ÇØ°áÇÒ ¶§ ÇÊ¿äÇÏ´Ù.

½Ã³ª¸®¿À

1. ¸ÞÀ̺ì + ÀÌŬ¸³½º - pom.xml-ÁÖµµ: OSGi Manifest ÆÄÀÏÀº ¸ÞÀÌºì ¶Ç´Â ÀÌŬ¸³½º Ç÷¯±×ÀÎÀ» »ç¿ëÇÏ¿© ÀÚµ¿»ý¼ºÇÑ´Ù. Manifest »ý¼º¿¡ ÇÊ¿äÇÑ ´ëºÎºÐÀÇ Á¤º¸´Â ÀÚ¹Ù Äڵ忡¼­ ¾òÀ» ¼ö ÀÖÁö¸¸ ¹öÀü Á¤º¸´Â ±×·¸Áö ¾Ê´Ù.  ¹öÀü Á¤º¸´Â pom.xml¿¡¼­ ±× Á¤º¸¸¦ °¡Á®¿Ã ¼ö ÀÖ°Ú´Ù. Manifest ÅÛÇø´À» ÅëÇؼ­ ±×·± ÀÏÀ» ÇÒ ¼ö ÀÖ°í OSGi ¼Ó¼ºÀ̳ª Ä¿½ºÅÒ Çì´õ¸¦ Ãß°¡ÇÒ ¼ö ÀÖ°Ú´Ù.

2. Ant + Ivy + ÀÌŬ¸³½º - ivy.xml-ÁÖµµ: Ant ŽºÅ©·Î manifest ÆÄÀÏÀ» »ý¼ºÇÑ´Ù. À§ÀÇ ¹æ¹ý°ú ºñ½ÁÇÏÁö¸¸ ´ÜÁ¡À¸·Î ¾ÆÁ÷ ÀÌŬ¸³½º¿¡¼­ Ivy 2¸¦ Áö¿øÇÏ´Â Ç÷¯±×ÀÎÀÌ ¾ø´Ù. °³¹ßÀÚ°¡ ivy.xml ÆÄÀÏÀ» ÀÛ¼ºÇϸé ÀÌŬ¸³½º Ç÷¯±äÀ» »ç¿ëÇؼ­ manifest¸¦ ¸¸µé°í ÀÌŬ¸³½º Ŭ·¡½ºÆнº¸¦ ÀÚµ¿À¸·Î ¼öÁ¤ÇØÁÖµµ·Ï ÇÑ´Ù.

3. ¸ÞÀ̺ì + ÀÌŬ¸³½º - MANIFEST.MF-ÁÖµµ: °³¹ßÀÚ°¡ MANIFEST.MF ÆÄÀÏÀ» Á÷Á¢ ¶Ç´Â Ç÷¯±×ÀÎÀ» ÅëÇؼ­ ÀÛ¼ºÇÏ¸é ±× ÆÄÀÏÀ» ±â¹ÝÀ¸·Î ÀÇÁ¸¼ºÀ» ó¸®ÇÑ´Ù. À̶§ ÀÌŬ¸³½ºÀÇ Å¬·¡½ºÆнº ÄÁÅ×À̳ʸ¦ ÀÌ¿ëÇÑ´Ù. Å×½ºÆ®¸¦ Áö¿øÇϱâ À§ÇØ TEST.MF ÆÄÀÏ¿¡´Â Å×½ºÆ®¿¡ ÇÊ¿äÇÑ ÀÇÁ¸¼ºÀ» Á¤ÀÇÇÒ ¼ö ÀÖ°ÔÇÑ´Ù. ¿©±â¿¡ Á¤ÀÇÇÑ ÀÇÁ¸¼ºÀº Å×½ºÆ®ÇÒ ??¿¡¸¸ °¡Á®¿Â´Ù. ³²Àº ºÎºÐÀº ÀÌ°ÍÀ» ¸ÞÀ̺쿡 ¾î¶»°Ô Àû¿ëÇÏ´À³Ä Àε¥ ÇöÀç µÎ °¡Áö ¿É¼ÇÀ» °í·ÁÁßÀÌ´Ù. Çϳª´Â pom.xmlÀ» »ý¼ºÇÏ´Â °ÍÀÌ°í ´Ù¸¥ ÇÑ ¹æ¹ýÀº ¸ÞÀ̺ìÀÇ ÀÇÁ¸¼º ó¸®¿Í ¿¬µ¿ ¶Ç´Â ±×°ÍÀ» ±³Ã¼ÇÏ´Â °ÍÀÌ´Ù.

4. Ant + Ivy + ÀÌŬ¸³½º - MANIFEST.MF-ÁÖµµ: 3¹ø ¹æ¹ý°ú ºñ½ÁÇÏ°í 2¹øÀÇ ´ÜÁ¡ÀÎ Ivy 2 ÀÌŬ¸³½º Ç÷¯±ä Áö¿øÀÌ ÇÊ¿ä¾ø¾îÁø´Ù. Manifest-ÁÖµµ ÀÌŬ¸³½º Ŭ·¡½ºÆнº ÄÁÅ×À̳ʸ¦ »ç¿ëÇÒ °ÍÀ̱⠶§¹®ÀÌ´Ù.

OSGi ºôµå Åø

- Bundlor: spring build ÇÁ·ÎÁ§Æ®¿¡¼­ °³¹ß ÁßÀÌ¸ç ¸î ÁÖÈÄ¿¡ ù ¹ø° ¹öÀüÀ» °ø°³ÇÒ ¿¹Á¤. ¹øµéÀ» ¸¸µé¾î ÁÖ¸ç, manifest.mf ÆÄÀÏÀ» ¸¸µé¾î ÁØ´Ù. http://www.springsource.com/repository/app/ ÀÌ°÷¿¡ ÀÖ´Â ´ëºÎºÐÀÇ ¹øµéÀ» ÀÌ Åø·Î ¸¸µé¾ú´Ù. manifest ÅÛÇø´À» Á¦°øÇÏ¿© Ä¿½ºÅ͸¶ÀÌ¡ ÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. 

- BundlorEclipse: ÀÌŬ¸³½º Ç÷¯±×ÀÎÀ¸·Î Bundlor ±â´ÉÀ» ÀÌŬ¸³½º¿¡¼­ Á÷Á¢ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¼Ò½º Äڵ带 ÀúÀå ¹öÆ°À» ´­·¯ ÀúÀåÇÒ ??¸¶´Ù manifest¸¦ °è¼ÓÇؼ­ ¼öÁ¤ÇØÁØ´Ù.

- ¿ÀÇÁ¶óÀÎ ÀÇÁ¸¼º ¸®Á¹¹ö

- Manifest Ŭ·¡½ºÆнº ÄÁÅ×À̳Ê

- ¸ÞÀ̺ì/Ivy ÀÇÁ¸¼º ¸®Á¹¹ö/pom.xml/ivy.xml  »ý¼º±â

¿Ö bnd¸¦ »ç¿ëÇÏÁö ¾Ê°í Bundlor¸¦ ¸¸µé¾ú³ª?

óÀ½¿¡´Â spring dm ÇÁ·ÎÁ§Æ®¿¡¼­´Â bnd¸¦ »ç¿ëÇßÁö¸¸ ´ÙÀ½ÀÇ ºÎ°¡ ±â´ÉÀÌ ÇÊ¿äÇؼ­ ¸¸µé¾ú´Ù.
- JDT-±â¹Ý ÄÚµå ½ºÄ³´×
- ÀϺÎ(Partial) ÄÚµå ó¸®Çϱâ
- °è¼ÓÀûÀÎ manifest »ý¼º

ÀÌŬ¸³½º°¡ ¾Æ´Ñ ´Ù¸¥ IDE È°¿ëÇϱâ

ÀÌŬ¸³½º ¸»°í IntelliJ³ª NetBeans »ç¿ëÀÚ¸¦ À§ÇØ ±×ÂÊ ÆÀ¿¡ Bundlor ÇÙ½É ¶óÀ̺귯¸®¸¦ Ä¿¹ÔÇß´Ù. ±× °á°ú ¾î¶² IDE ¿¡¼­µµ OSGi °³¹ß ÅøÀ» »ç¿ëÇÒ ¼ö ÀÖ°Ô µÆ´Ù.

Ãß°¡ ¿ä±¸»çÇ×

- ¹úÅ© ¹øµé »ý¼º

- ÀúÀå¼Ò-±â¹Ý ÄÚµå ¿Ï¼º: dm ¼­¹ö ÀúÀå¼Ò¸¦ ±â¹ÝÀ¸·Î ¼Ò½º Äڵ忡¼­ ÀÚµ¿ ¿Ï¼ºÀ» Çϸé ÀÚµ¿À¸·Î import ¹®À» Ãß°¡ÇØÁÖ°í Manifest¿¡µµ import ¹®À» Ãß°¡ÇØÁØ´Ù.
½Å°í
top

½ºÇÁ¸µ + OSGi(½ºÇÁ¸µ DM) °³¹ß Çʵ¶ ·¹ÆÛ·±½º 3Á¾ ¼¼Æ®

Spring DM/etc : 2008.12.08 14:13


½ºÇÁ¸µ DM ·¹ÆÛ·±½º: http://static.springframework.org/osgi/docs/current/reference/html/
½ºÇÁ¸µ DM ¼­¹ö »ç¿ëÀÚ °¡À̵å: http://static.springsource.com/projects/dm-server/1.0.x/user-guide/html/index.html
½ºÇÁ¸µ DM ¼­¹ö °³¹ßÀÚ °¡À̵å: http://static.springsource.com/projects/dm-server/1.0.x/programmer-guide/html/index.html

¸Ç À§¿¡²« Á¦°¡ ¹ø¿ª/Æí¿ª Çؼ­ ¿Ã¸°ÀûÀÌ Àִµ¥ Áö±ÝÀº ¶Ç ¸¹ÀÌ ¹Ù²¸¼­ ´Ù½Ã ºÁ¾ß°Ú°í, ¾Æ·¡ µÎ ¹®¼­µµ ºÐ·®ÀÌ ¾ó¸¶ µÇÁö ¾ÊÀ¸´Ï ±Ý¹æ ÀÐ¾î º¸½Ç ¼ö ÀÖ½À´Ï´Ù. ³ª¸ÓÁö µÎ ¹®¼­µµ ÇѱÛÈ­¸¦ ÇÒ±î »ý°¢Çغôµ¥ ±×·² ¿©À¯°¡ ¾ø´õ±º¿ä. ³ªÁß¿¡ ½Ã°£ÀÌ µÇ¸é ºí·Î±×¿¡ °£´Ü ¿ä¾à Á¤µµ´Â °¡´ÉÇÒÁöµµ ¸ð¸£°Ú½À´Ï´Ù.

Àд ¼ø¼­´Â ÀÏ´Ü DM ·¹ÆÛ·±½º¸¦ º¸½Ã´Â°Ô ÁÁ°Ú±¸¿ä. ±× ´ÙÀ½Àº º°·Î ¼ø¼­°¡ ÇÊ¿ä¾øÀ» °Í °°½À´Ï´Ù. ¼­¹ö »ç¿ë¹ýÀÌ ±Ã±ÝÇÏ¸é »ç¿ëÀÚ °¡À̵带 º¸°í, °³¹ßÇÒ ¶§ dm ¼­¹ö°¡ ¾î¶² µµ¿òÀ» ÁÖ´ÂÁö ±Ã±ÝÇÏ½Ã´Ù¸é °³¹ßÀÚ °¡À̵带 º¸½Ã¸é µË´Ï´Ù. °³¹ßÀÚ´Â ´ç¿¬È÷ µÎ °³ ´Ù ºÁ¾ß°ÚÁÒ? ¤»

½ºÇÁ¸µÀ» »ç¿ëÇÏ¿© OSGi °³¹ßÀÌ »ó´çÈ÷ Æí¸®ÇØÁö°í ÀÖÁö¸¸, ¿ª½Ã ÇÙ½ÉÀº ¸ðµâÈ­¸¦ ¾î¶»°Ô ÇÒ °ÍÀΰ¡ Àε¥.. ÀÌ°Ç »ðÁúÀ» Á» ÇغÁ¾ß°Ú½À´Ï´Ù.

¾îÂîµÆµç, dm ¼­¹ö·Î ÀÎÇؼ­ ÇÑÃþ OSGi °³¹ßÀÌ Æí¸®ÇØÁø °Í °°½À´Ï´Ù. ¼Õ¼ö Ÿ°Ù Ç÷§Æû ¸¸µéÁö ¾Ê¾Æµµ µÇ°í, ·Î±ë °ÆÁ¤ ¾È Çصµ µÇ°í, ¿¡·¯ ºÐ¼®µµ ÇØÁÖ°í, ¹èÆ÷ ¹æ¹ý ´Ù¾çÇÏ°í, PAR ÆÐŰ¡ Áö¿øÇؼ­ ¿©·¯ ¹øµéÀ» ¾ÖÇø®ÄÉÀÌ¼Ç º°·Î ±¸ºÐ ÇÒ ¼öµµ ÀÖ°í, ÀÌŬ¸³½º¿¡¼­ ÆíÇÏ°Ô »ç¿ëÇÒ ¼öµµ ÀÖÀ¸´Ï ¸»ÀÌÁÒ.

Àü ÀÌÁ¦ Àھ߰ڽÀ´Ï´Ù. Çѱ¹Àº ¿ÀÈÄ 2½Ã ÀÏÅÙµ¥;;
½Å°í
top

¿ÀÈ£.. ½ºÇÁ¸µ¼Ò½º manifest Çì´õ°¡ OSGi¿¡ Ãß°¡µÇ´Â±º¿ä

Spring DM/etc : 2008.11.27 21:57


ÂüÁ¶: http://blog.springsource.com/2008/11/27/springsource-manifest-headers-registered-with-osgi/

OSGi Áø¿µ¿¡¼­ public registry¿¡ ¹ê´õº° Çì´õ¸¦ µî·ÏÇؼ­ Áߺ¹ÇÏ´Â Çì´õ¸¦ ¹æÁöÇÏ°íÀÚ ÇÏ´Â °Í °°½À´Ï´Ù.

Ãß°¡µÈ ½ºÇÁ¸µ¼Ò½ºÀÇ Çì´õ 7°³
- Import-Bundle
- Import-Library
- Module-Scope
- Modeul-Type
- Web-Contextpath
- Web-DispatcherServletUrlPatterns
- Web-FilterMappings

Ãß°¡µÈ bnd Çì´õ 2°³
- Include-Resource
- Private-Package

¿ÀÈ£~~ ±Ú~~ ´Ù½Ã ÇÑ ¹ø ½ºÇÁ¸µ DM °øºÎ¸¦ ÇÏ°í °¡¾ß°Ú½À´Ï´Ù. S1A¿¡ °¡¼­ ½ºÇÁ¸µ DM°ú DM ¼­¹ö °ü·Ã ¼¼¼ÇÀ» ÁýÁßÀûÀ¸·Î µè°í ¿Ã °èȹÀÔ´Ï´Ù. ÀÌƲ ³²¾Ò³× ºý½ê°Ô °øºÎÇؾ߰ڱº..
½Å°í
top

½ºÇÁ¸µ DM 1.2.0 m2 ¹èÆ÷

Spring DM/etc : 2008.11.25 00:52


ÂüÁ¶ : http://www.springsource.org/node/837

´«¿¡ ¶ç´Â º¯°æ »çÇ×Àº 
- ÀÏ´Ü ¾ó¸¶Àü¿¡ ¹èÆ÷µÈ ½ºÇÁ¸µ 2.5.6À» »ç¿ëÇϵµ·Ï º¯°æ Çß´Ù´Â °Ì´Ï´Ù. 
- compendium ³×ÀÓ½ºÆäÀ̽º¸¦ Ãß°¡Çߴٴµ¥..;; ¹ºÁö ¸ð¸£°Ú½À´Ï´Ù. ¾Ë¾ÆºÁ¾ß°Ú³×¿ä.
- shutdown ¾Ë°í¸®ÁòÀ» °³¼±Çß´Ù´Â ±º¿ä.

³ª¸ÓÁø Àß ´«¿¡ ¾È µé¾î¿À°í ¸ð¸£°Ú³×¿ä~

ps: ÀÌ»ç ÇÒ ¶© ¼ÕÅéÀ» ¾à°£ ±æ°Ô ±ïÀ¸¼¼¿ä. Æò¼Òó·³ ±ï¾Ò´Âµ¥ ÀÌ»çÇϸ鼭 ¼Õ ³¡ÀÌ ºÎ¾î¼­ ±×·±°¡ ±²ÀåÈ÷ µû°©½À´Ï´Ù. ¤Ð,¤Ð
½Å°í
top

OSGi uses Ãæµ¹ °¨ÁöÇϱâ

Spring DM/etc : 2008.11.23 18:39


ÂüÁ¶ ¹× ¹ø¿ª: Diagnosing OSGi uses conflicts

GlynÀº ÃÖ±Ù¿¡ "OSGi "uses" Áö½Ã¾î ÀÌÇØÇϱâ"¸¦ Á¦°øÇß´Ù. ³ª(Rob Harrop)´Â uses Á¦¾à À§¹Ý ¿øÀÎÀ» Á» ´õ ÀÚ¼¼È÷ »ìÆ캸°í ¿©·¯ºÐ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ¹ß»ýÇÏ´Â uses ¹®Á¦ ÇØ°á¿¡ À¯¿ëÇÑ ¸î °¡Áö ÆÁÀ» Á¦°øÇÏ°íÀÚ ÇÑ´Ù.

³ª´Â ´ëºÎºÐÀÇ ¿¹Á¦¿¡¼­ dm Server º¸´Ù´Â ÀÌÄû³ì½º¸¦ »ç¿ëÇÏ·Á°í ÇÑ´Ù. ±× ÀÌÀ¯´Â uses Á¦¾à»çÇ×ÀÌ dm Server¿¡ ÇÑÁ¤ÀûÀÎ °ÍÀÌ ¾Æ´Ï°í ¸ðµç OSGi »ç¿ëÀÚ¿Í °ü·ÃµÈ °ÍÀ̱⠶§¹®ÀÌ´Ù. ÀÌ ºí·Î±× ¸¶Áö¸·¿¡´Â, dm Server¿¡ ±¸ÃàµÈ ¸Å¿ì ¶È¶ÈÇÑ Á¦¾à »çÇ× ½ÇÆÐ Áø´Ü ¸î °¡Áö¸¦ º¸¿©ÁÙ °ÍÀÌ´Ù.

ÀÇÁ¸ÀûÀÎ Á¦¾à ºÒÀÏÄ¡(Dependent Constraint Mismatch)


°¡Àå ÈçÇÑ uses À§¹ÝÀº ÇÑ °³ ÀÌ»óÀÇ ÀÇÁ¸ÀûÀÎ Á¦¾à »çÇ׳¢¸®ÀÇ ºÒÀÏÄ¡ ¶§¹®ÀÌ´Ù. ¿¹Á¦·Î ´ÙÀ½ ¼¼ °³ÀÇ manifest¸¦ »ìÆ캸ÀÚ.

Manifest-Version: 1.0
Bundle-Name: Spring Bundle
Bundle-ManifestVersion: 2
Bundle-SymbolicName: spring
Bundle-Version: 2.5.5
Export-Package: spring.orm.hibernate;version="2.5.5";uses:="eclipselink"
Import-Package: eclipselink;version="[1.0, 2.0)"

Manifest-Version: 1.0
Bundle-Name: EclipseLink 1 Bundle
Bundle-ManifestVersion: 2
Bundle-SymbolicName: eclipselink
Bundle-Version: 1
Export-Package: eclipselink;version="1.0.0"

Manifest-Version: 1.0
Bundle-Name: EclipseLink 2 Bundle
Bundle-ManifestVersion: 2
Bundle-SymbolicName: eclipselink
Bundle-Version: 2
Export-Package: eclipselink;version="2.0.0"

½ºÇÁ¸µ ¹øµé ÇÑ °³¿Í µÎ°³ÀÇ eclipselink ¹øµéÀÌ ÀÖ´Ù. ¹°·Ð ½ÇÁ¦ ¹øµéÀº ¾Æ´Ï´Ù. spring ¹øµéÀº [1.0, 2.0) ¹öÀü ¹øÀ§ÀÇ eclipselink ÆÐÅ°Áö¸¦ »ç¿ëÇÑ´Ù. ºÐ¸íÈ÷ ¿ÀÁ÷ eclipselink_1 ¹øµé¸¸ÀÌ ÀÌ Á¦¾à »çÇ×À» ¸¸Á·ÇÑ´Ù. ÀÌÁ¦ ´Ù¸¥ µÎ °³ÀÇ ¾ÖÇø®ÄÉÀÌ¼Ç manifest¸¦ »ìÆ캸ÀÚ.

Manifest-Version: 1.0
Bundle-Name: App1 Bundle
Bundle-ManifestVersion: 2
Bundle-SymbolicName: app1
Bundle-Version: 1.0.0
Import-Package: spring.orm.hibernate,eclipselink;version="[1.0, 1.0]"

Manifest-Version: 1.0
Bundle-Name: App2 Bundle
Bundle-ManifestVersion: 2
Bundle-SymbolicName: app2
Bundle-Version: 1.0.0
Import-Package: spring.orm.hibernate,eclipselink;version="[2.0, 2.0]"

app1Àº exlicpselink [1.0, 1.0] ¹üÀ§¸¦ ÂüÁ¶ÇÏ°í, app2´Â eclispelink [2.0, 2.0] ¹üÀ§¸¦ ÂüÁ¶ÇÑ´Ù. ¸¸¾à ÀÌ µÎ °³ÀÇ ¹øµéÀ» ÀÌÄû³ì½º¿¡ ¼³Ä¡ÇÏ°í app ¹øµéµéÀ» start ½ÃµµÇϸé, Äֿܼ¡¼­ ´ÙÀ½°ú °°Àº °á°ú¸¦ È®ÀÎÇÒ ¼ö ÀÖ´Ù.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.4.0.v20080605-1900
2       RESOLVED    spring_2.5.5
3       RESOLVED    eclipselink_1.0.0
4       RESOLVED    eclipselink_2.0.0
5       ACTIVE      app1_1.0.0
6       INSTALLED   app2_1.0.0

sprig°ú eclipselink ¹øµéµéÀº ¸ðµÎ Àß ¸®Á¹ºê µÈ °É º¼ ¼ö ÀÖ´Ù. app1 ¹øµéÀº ½ÃÀÛ(start)ÇßÁö¸¸, app2 ¹øµéÀº ½ÃÀÛÇÏÁö ¸øÇß´Ù. ÀÌÀ¯¸¦ ¾Ë¾Æº¸±â À§ÇØ diag Ä¿¸Çµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

osgi> diag app2
file:/Users/robharrop/dev/resdiag/uses/app2/bin [6]
  Package uses conflict: Import-Package: spring.orm.hibernate; version="0.0.0"

¿©±â¼­ ¿ì¸®´Â spring.orm.hibernate ÆÐÅ°Áö¸¦ ÀÓÆ÷Æ®ÇÏ´Â ºÎºÐ¿¡¼­ uses Ãæµ¹·Î ÀÎÇØ ÇØ´ç ¹øµéÀ» ¸®Á¹ºê ÇÒ ¼ö ¾ø´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÌ°ÍÀº app2¿¡¼­ spring.orm.hibernate¸¦ ÀÓÆ÷Æ®ÇÏ´Â °ÍÀ» ¾È µÈ´Ù´Â °ÍÀÌ´Ù. ±× ÀÌÀ¯´Â ´Ù¸¥ import·Î ÀÎÇØ spring.orm.hibernate¸¦ Á¦°øÇÏ´Â ¹øµéÀÇ uses Á¦¾à »çÇ×ÀÌ ±úÁú ¼ö Àֱ⠶§¹®ÀÌ´Ù.

À̸¦ Áø´ÜÇÏ´Â °úÁ¤ óÀ½À¸·Î ÇÒ ÀÏÀº spring.orm.hibernate ¹øµéÀÇ °¡¿ëÇÑ °ø±ÞÀÚ¸¦ ã¾Æ³»´Â °ÍÀÌ´Ù. ¿ì¸®´Â ÀÌ¹Ì ÇØ´ç °ø±ÞÀÚ°¡ spring ¹øµéÀ̶ó´Â °É ¾Ë°í ÀÖÁö¸¸, ¸¸¾à °ø±ÞÀÚ¸¦ ¸ð¸¥´Ù¸é packages Ä¿¸Çµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

osgi> packages spring.orm.hibernate
spring.orm.hibernate; version="2.5.5"<file:/Users/robharrop/dev/resdiag/uses/spring/bin [2]>
  file:/Users/robharrop/dev/resdiag/uses/app1/bin [5] imports

¿©±â¼­ spring.orm.hibernate ÆÐÅ°Áö¸¦ ¹øµé 2¿¡¼­ °ø±Þ(export)Çß´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÌ Á¤º¸¸¦ °¡Áö°í ¹øµé 2ÀÇ spring.orm.hibernate¿¡¼­ uses Áö½Ã¾î¿¡ ¾î¶² ÆÐÅ°Áö°¡ µî·ÏµÇ¾î ÀÖ´ÂÁö È®ÀÎÇÒ ¼ö ÀÖ´Ù.

osgi> headers 2
Bundle headers:
 Bundle-ManifestVersion = 2
 Bundle-Name = Spring Bundle
 Bundle-SymbolicName = spring
 Bundle-Version = 2.5.5
 Export-Package = spring.orm.hibernate;version="2.5.5";uses:="eclipselink"
 Import-Package = eclipselink;version="[1.0, 2.0)"
 Manifest-Version = 1.0

¿©±â¼­ ¿ì¸®´Â uses¿¡ ÀÖ´Â À¯ÀÏÇÑ ÆÐÅ°Áö eclipselink ÆÐÅ°Áö°¡ ¹üÀÎÀ̶ó´Â °É ¾Ë ¼ö ÀÖ´Ù. »ç½Ç, ½ºÇÁ¸µ ¹øµéÀº eclipselink [1.0, 2.0) ¹üÀ§¸¦ ÂüÁ¶ÇÏ´Â ¹Ý¸é app2´Â eclipselink [2.0, 2.0] ¹üÀ§¸¦ ÂüÁ¶ÇÏ´Â °É È®ÀÎÇÒ ¼ö ÀÖ´Ù. ÀÌ µÎ ¹üÀ§´Â »óÃæÇÑ´Ù. app2´Â ½ºÇÁ¸µ ¹øµéÀÌ »ç¿ëÇÏ´Â eclipselink¿Í µ¿ÀÏÇÑ ¹öÀüÀ» ¿¬°áÇÒ ¼ö ¾ø´Ù.

uses ¸ñ·ÏÀÌ ±ä °æ¿ì´Â, ¾î¶² ÆÐÅ°ÁöÀÇ Á¦°øÀÚ°¡ µÑ ÀÌ»óÀÎÁö¸¦ È®ÀÎÇÏ¿© À§¹ÝÀ» ÇÑ ÆÐÅ°Áö ¹üÀ§¸¦ Á¼Çôº¼ ¼ö ÀÖ´Ù. uses Á¦¾àÀ» À§¹Ý ÆÐÅ°Áö¸¦ Á¦°øÇÏ´Â °ø±ÞÀÚ´Â ¹Ýµå½Ã µÑ ÀÌ»óÀÌ´Ù.

¹öÀü ºÒÀÏÄ¡´Â ÀÇÁ¸ Á¦¾à ºÒÀÏÄ¡ÀÇ À¯ÀÏÇÑ ¿øÀÎÀÌ ¾Æ´Ï´Ù. ¼Ó¼ºµµ ¹öÀüó·³ Á¦¾à ¹®Á¦¸¦ ¹ß»ý ½Ãų ¼ö ÀÖ´Ù.

¼³Ä¡ ¼ø¼­ ¹®Á¦


¾Õ¼± ¿¹Á¦¸¦ ´Ù½Ã »ìÆ캸ÀÚ. spring ¹øµéÀÇ manifest¸¦ º¯°æÇÏ¿© eclipselink 2.0 ÆÐÅ°Áö¸¦ ÂüÁ¶Çϵµ·Ï º¯°æÇÏ°í app1Àº 1.0 ÀÌ»óÀÇ ¸ðµç ¹öÀüÀ» Çã¿ëÇϵµ·Ï ¼öÁ¤ÇÏ¿© ¹®Á¦¸¦ ¼öÁ¤Çغ¸ÀÚ.

Manifest-Version: 1.0
Bundle-Name: Spring Bundle
Bundle-ManifestVersion: 2
Bundle-SymbolicName: spring
Bundle-Version: 2.5.5
Export-Package: spring.orm.hibernate;version="2.5.5";uses:="eclipselink"
Import-Package: eclipselink;version="[1.0, 2.0]"

Manifest-Version: 1.0
Bundle-Name: App1 Bundle
Bundle-ManifestVersion: 2
Bundle-SymbolicName: app1
Bundle-Version: 1.0.0
Import-Package: spring.orm.hibernate,eclipselink;version="1.0"

¹øµéµéÀ» ¼³Ä¡ÇÏ°í app ¹øµéÀ» ½ÃÀÛÇϸé Å« º¯È­°¡ »ý±ä°É º¼ ¼ö ÀÖ´Ù.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.4.0.v20080605-1900
1       RESOLVED    spring_2.5.5
2       RESOLVED    eclipselink_1.0.0
3       RESOLVED    eclipselink_2.0.0
4       ACTIVE      app1_1.0.0
5       ACTIVE      app2_1.0.0

ÀÌÁ¦ µÎ °³ÀÇ app ¹øµé ¸ðµÎ ½ÃÀÛ ÇÒ ¼ö ÀÖ´Ù. ºÒÇàÈ÷µµ Á» ´õ ±³¹¦ÇÑ À̽´°¡ ¿ì¸®¸¦ ±â´Ù¸®°í ÀÖ´Ù. ¼³Ä¡ ¼ø¼­¿¡ µû¶ó, ÀÌ ¹øµé ÁýÇÕü´Â °°ÀÌ ½ÇÇàµÇÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. À̸¦ ½ÇÇèÇغ¸±â À§Çؼ­, spring, eclipselink_1°ú app1À» ÇÑ ¹­À½À¸·Î ¼³Ä¡ÇÏ°í app1À» ½ÇÇàÇÑ´Ù.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.4.0.v20080605-1900
1       RESOLVED    spring_2.5.5
2       RESOLVED    eclipselink_1.0.0
3       ACTIVE      app1_1.0.0

ÀÚ ÀÌÁ¦ eclipselink_2¿Í app2¸¦ ¼³Ä¡ÇÑ´Ù.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.4.0.v20080605-1900
1       RESOLVED    spring_2.5.5
2       RESOLVED    eclipselink_1.0.0
3       ACTIVE      app1_1.0.0
4       RESOLVED    eclipselink_2.0.0
5       INSTALLED   app2_1.0.0

app2 ¹øµéÀº ½ÃÀÛµÇÁö ¾Ê´Â´Ù. diag ÅëÇØ ¿Ö ±×·±Áö »ìÆ캸ÀÚ.

osgi> diag app2
file:/Users/robharrop/dev/resdiag/uses/app2/bin [5]
  Package uses conflict: Import-Package: spring.orm.hibernate; version="0.0.0"

uses Ãæµ¹ÀÌ ´Ù½Ã ¹ß»ýÇß´Ù. À̹ø¿¡´Â ¾Õ¼± Áø´Ü °úÁ¤ÀÌ ¾Æ¹«·± µµ¿òÀÌ µÇÁö ¾Ê´À´Ù. ÀÇÁ¸¼º Á¦¾à ºÒÀÏÄ¡°¡ ¾ø±â ¶§¹®ÀÌ´Ù. ù ¹ø°¿¡ ¸ðµÎ Àß ¸®Á¹ºê µÆ±â ¶§¹®¿¡ ÀÌ°Ç ÀÌ¹Ì ¾Ë°í ÀÖ´Ù.

À̽´´Â ¸®Á¹·ç¼Ç ¼ø¼­¿¡ ÀÖ´Ù. ¹øµéµéÀº µÎ µ¢¾î¸®·Î ³ª´²¼­ ¼³Ä¡ÇÏ°í ¸®Á¹ºê Çß´Ù. ù ¹ø° µ¢¾î¸®´Â spring, eclipselink_1, app1 ÀÌ°í µÎ ¹ø° µ¢¾î¸®´Â eclipselink_@¿Í app2´Ù. (app1 ¹øµéÀ» ½ÃÀÛ(start)ÇÑ °á°ú·Î..)ù ¹ø° µ¢¾î¸®°¡ ¸®Á¹ºê µÉ ¶§, spring ¹øµéÀº esclipselink ÆÐÅ°Áö¸¦ °¡Á®¿Ã ¶§ eclipselink_1 ¹øµé¿¡ ¹­ÀÌ°Ô µÈ´Ù. ÀÌ°ÍÀ» Äֿܼ¡¼­ È®ÀÎÇغ¸ÀÚ.

osgi> bundle app1
file:/Users/robharrop/dev/resdiag/uses/app1/bin [3]
  Id=3, Status=ACTIVE      Data Root=/opt/springsource-dm-server-1.0.0.RELEASE/lib/configuration/org.eclipse.osgi/bundles/3/data
  No registered services.
  No services in use.
  No exported packages
  Imported packages
    spring.orm.hibernate; version="2.5.5"<file:/Users/robharrop/dev/resdiag/uses/spring/bin [1]>
    eclipselink; version="1.0.0"<file:/Users/robharrop/dev/resdiag/uses/eclipselink1/bin [2]>
  No fragment bundles
  Named class space
    app1; bundle-version="1.0.0"[provided]
  No required bundles

import packages ¼½¼Ç¿¡¼­ eclipselink ¹öÀü 1.0.0ÀÌ eclipselink_1 ¹øµé¿¡¼­ °¡Á®¿Â °É È®ÀÎÇÒ ¼ö ÀÖ´Ù. µÎ ¹ø° µ¢¾î¸®¸¦ ¼³Ä¡Çϸé app2 ¹øµéÀº eclipselink ¹öÀü 2¸¦ ÇÊ¿ä·Î Çϴµ¥, springÀÌ ÀÌ¹Ì eclipselink 1.0.0 ¹öÀü¿¡ ¹­¿© À־ ¸®Á¹ºêµÇÁö ¸øÇÑ´Ù. ÇÑ µ¢¾î¸®·Î ¸ðµç ¹øµéÀ» ¼³Ä¡ÇÏ°í ¸®Á¹ºê ÇÒ ¶§´Â, OSGi ¸®Á¹¹ö°¡ spring.orm.hibernateÀÇ uses Á¦¾àµµ ¸¸Á·Çϸ鼭µµ ´Ù¸¥ ¸ðµç Á¦¾à»çÇ×À» ¸¸Á·Çϵµ·Ï ½ÃµµÇÒ °ÍÀÌ´Ù.

ÀÌ ¹®Á¦¸¦ °íÄ¡±â À§ÇØ ¿ì¸® ¹øµéÀ» ¼öÁ¤ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ´ë½Å, ¸ðµç ¹øµéÀ» ÇÑ µ¢¾î¸®·Î ¼³Ä¡Çϰųª spring ¹øµéÀ» ¸®ÇÁ·¡½¬ ÇÏ¸é µÈ´Ù. ±×·¸°Ô Çؼ­ OSGi°¡ ´Ù½Ã ¸®Á¹·ç¼Ç °úÁ¤À» °ÅÄ¡µµ·Ï ÇÑ´Ù. ÀÌÁ¦ eclipselink_2 ¹øµéÀÌ ¼³Ä¡µÇ°í À̹ø¿¡´Â ´Ù¸¥ °á°ú¸¦ ¿¹»óÇÒ ¼ö ÀÖ´Ù.

osgi> refresh spring

osgi> ss

Framework is launched.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.4.0.v20080605-1900
1       RESOLVED    spring_2.5.5
2       RESOLVED    eclipselink_1.0.0
3       ACTIVE      app1_1.0.0
4       RESOLVED    eclipselink_2.0.0
5       ACTIVE      app2_1.0.0

osgi> bundle spring
file:/Users/robharrop/dev/resdiag/uses/spring/bin [1]
  Id=1, Status=RESOLVED    Data Root=/opt/springsource-dm-server-1.0.0.RELEASE/lib/configuration/org.eclipse.osgi/bundles/1/data
  No registered services.
  No services in use.
  Exported packages
    spring.orm.hibernate; version="2.5.5"[exported]
  Imported packages
    eclipselink; version="2.0.0"<file:/Users/robharrop/dev/resdiag/uses/eclipselink2/bin [4]>
  No fragment bundles
  Named class space
    spring; bundle-version="2.5.5"[provided]
  No required bundles

spring ¹øµéÀ» ¸®ÇÁ·¡½ÃÇؼ­ app2 ¹øµéµµ ¸®Á¹ºê µÈ °É º¼ ¼ö ÀÖ´Ù. spring ¹øµé¿¡¼­ ¿¬°áÇÒ eclipselink ÆÐÅ°Áö°¡ eclipselink_2 ¹øµéÀÇ 2.0 ¹öÀüÀ¸·Î ¹Ù²¼´Ù.

dm ¼­¹ö¿¡¼­ uses Á¦¾à »çÇ×

uses Á¦¾à À§¹ÝÀÌ dm ¼­¹ö¿¡¼­ ¹ß»ýÇϸé, ¿©·¯ºÐÀÌ ÇؾßÇÒ ºÐ¼® ÀýÂ÷¸¦ ¾Ë¾Æ¼­ Á¦°øÇØÁØ´Ù. ƯÈ÷ ºÒÀÏÄ¡ÇÏ´Â ÆÐÅ°Áö¸¦ ´ã°í ÀÖÀ» °¡´É¼ºÀÌ ÀÖ´Â ÀÇÁ¸¼º Á¦¾àÀ» ½Äº°ÇÒ ¶§ µµ¿òÀÌ µÈ´Ù.

Could not satisfy constraints for bundle 'app2' at version '1.0.0'.
 Cannot resolve: app2
  Resolver report:
    Bundle: app2_1.0.0 - Uses Conflict: Import-Package: spring.orm.hibernate; version="0.0.0"
      Possible Supplier: spring_2.5.5 - Export-Package: spring.orm.hibernate; version="2.5.5"
        Possible Conflicts: eclipselink

uses Á¦¾à»çÇ×Àº ¿£ÅÍÇÁ¶óÀÌÁî ¶óÀ̺귯¸®¿¡¼­ ¸Å¿ì ÈçÈ÷ »ç¿ëÇÏ¸ç ¼Õ¼ö ½ÇÆÐ ¿øÀÎÀ» ºÐ¼®ÇÏ´Â °ÍÀº ¾Ç¸ù°°Àº ÀÏÀÌ´Ù. ƯÈ÷, uses¸¦ »ç¿ëÇÏ´Â ÆÐÅ°Áö°¡ 10 °³ ÀÌ»ó ÀÖÀ» ¶§´Â, °¡¿ëÇÑ Ãæµ¹À» ÆǺ°ÇÏ´Â ÀÛ¾÷Àº »ó´çÇÑ ½Ã°£-³¶ºñ¸¦ ÃÊ·¡ÇÑ´Ù. µû¶ó¼­ ÀÚµ¿È­ °ËÁøÀº ÇʼöÀ̸ç, ³ª´Â dm ¼­¹ö¿¡¼­ Áø´ç Äڵ尡 Çâ»óµÇ¾î ÈçÈ÷ ¹ß»ýÇÏ´Â ¹®Á¦°¡ ¾Æ¹«°Íµµ ¾Æ´Ñ °Íó·³ ´Ù·ê ¼ö ÀÖ°Ô µÇ±æ ¹Ù¶õ´Ù.

´ÙÀ½ ¹èÆ÷ÆÇ¿¡¼­´Â, Áø´Ü µµ±¸¸¦ dm ¼­¹ö ÀÌŬ¸³½º Åø¿¡ ¹Ù·Î Æ÷ÇÔ½ÃÄѼ­ dm ¼­¹ö¿¡¼­ ÀÌ·± ¹®Á¦µéÀ» ´ëºÎºÐ ÀÚµ¿À¸·Î ºÐ¼®Çϵµ·Ï ÇÒ ¼ö ÀÖ°Ô ÇÒ °èȹÀÌ´Ù.
½Å°í
top

OSGi "uses" Áö½Ã¾î ÀÌÇØÇϱâ

Spring DM/etc : 2008.11.23 17:08


ÂüÁ¶ ¹× ¹ø¿ª: Understanding the OSGi "uses" Directive

½ºÇÁ¸µ DM ¼­¹ö ¶Ç´Â ´Ù¸¥ ¾î¶² OSGi Ç÷§Æû ±â¹ÝÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀ» ºôµå ÇÒ ¶§, ¿©·¯ºÐÀº ¾Æ¸¶µµ ¸ÓÁö¾Ê¾Æ "uses"¶ó´Â Áö½Ã¾î¸¦ º¸°Ô µÉ °ÍÀÌ´Ù. ÀÌ Áö½Ã¾îÀÇ ¸ñÀûÀ» ºÐ¸íÇÏ°Ô ÀÌÇØÇÏÁö ¾Ê´Â´Ù¸é, ¿©·¯ºÐÀº ¾ðÁ¦ ±×°ÍÀ» »ç¿ëÇØ¾ß ÇÏ´ÂÁöµµ ¸ð¸¦ »Ó´õ·¯, "uses" Ãæµ¹("uses" conflict)·Î ÀÎÇØ ¹øµé resovle°¡ µÇÁö ¾ÊÀ» ¶§ Àǹ®¸¸ »ý±æ °ÍÀÌ´Ù. º» ±â»ç¿¡¼­ "uses" Áö½Ã¾î¸¦ ÀÌÇØÇÏ°í, ¾ðÁ¦ »ç¿ëÇØ¾ß ÇÏ´ÂÁö, ±×¸®°í ¾î¶»°Ô "uses" Ãæµ¹À» µð¹ö±ëÇÏ´ÂÁö »ìÆ캸°Ú´Ù.

¹øµé ¸®Á¹·ç¼Ç(Resolution)


OSGi´Â ÀÏ´Ü ¹øµéÀÌ "¸®Á¹ºê"(resolve) »óÅ°¡ µÇµµ·Ï ¼³°èµÇ¾î ÀÖ´Ù. Ŭ·¡½º ij½ºÆ® ¿¹¿Ü³ª ŸÀÔÀÌ ¸ÂÁö ¾Ê¾Æ¼­ ¹ß»ýÇÏ´Â ±×¿Í ºñ½ÁÇÑ ¹®Á¦µéÀÌ ¹ß»ýÇÏÁö ¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù. ÀÌ´Â OSGi°¡ °¢°¢ÀÇ ¹øµé¸¶´Ù ÇϳªÀÇ Å¬·¡½º ·Î´õ¸¦ »ç¿ëÇϱ⠶§¹®¿¡ »ç¿ëÀÚµéÀÌ Å¸ÀÔ ºÒÀÏÄ¡ ¹®Á¦¸¦ ¸¸³ª°Ô µÉ ¿©Áö°¡ ¸¹´Ù. ±×·¡¼­ ¸Å¿ì Áß¿äÇÏ´Ù.

·±Å¸ÀÓ¿¡ »ç¿ëÇÏ·Á¸é ÀÏ´Ü Å¬·¡½º ·Î´õ¿¡ ÀÇÇØ Àڹ٠ŸÀÔÀÌ ·ÎµùÀÌ µÇ¾î¾ß ÇØ´ç ŸÀÔÀÇ Å¬·¡½º³ª °´Ã¼ °°Àº °ÍÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ·±Å¸ÀÓ Å¸ÀÔÀº ŸÀÔÀÇ Àüü Ŭ·¡½º À̸§°ú ÇØ´ç ŸÀÔÀ» Á¤ÀÇÇÑ Å¬·¡½º ·Î´õÀÇ Á¶ÇÕÀ¸·Î Á¤ÀÇÇÑ´Ù. ¸¸¾à µ¿ÀÏÇÑ Àüü Ŭ·¡½º À̸§ÀÌ µÎ °³ÀÇ ´Ù¸¥ Ŭ·¡½º ·Î´õ¸¦ »ç¿ëÇÏ¿© Á¤ÀǵǾî ÀÖ´Ù¸é, µÎ °³ÀÇ È£È¯ÇÏÁö ¾Ê´Â ·±Å¸ÀÓ Å¸ÀÔÀ» »ý¼ºÇÑ´Ù. ÀÌ·± ºñȣȯ¼ºÀ¸·Î ÀÎÇØ µÎ ŸÀÔÀÇ ¾î¶² "Á¢ÃË"(contact)À» ÇÏ°Ô µÉ °æ¿ì ·±Å¸ÀÓ ¿¡·¯¸¦ ¹ß»ýÇÑ´Ù. ¿¹¸¦ µé¾î, ÀÌ µÎ ŸÀÔ Áß Çϳª¸¦ ´Ù¸¥ ŸÀÔÀ¸·Î ij½ºÆÃÀ» ½ÃµµÇÒ ¶§ Ŭ·¡½º ij½ºÆ® ¿¹¿Ü°¡ ¹ß»ýÇÑ´Ù.

OSGi´Â À¯ÀÏÇÑ Å¬·¡½º ·Î´õ ±â¹Ý ÀÚ¹Ù ¸ðµâ ½Ã½ºÅÛÀÌ ¾Æ´ÏÁö¸¸ Áö±Ý±îÁö °¡Àå ¼º¼÷ÇÑ ½Ã½ºÅÛÀÌ´Ù. Áï OSGi ¼³°èÀÚµéÀº ¿À·§µ¿¾È Èûµé°Ô ÀÌ·± Á¾·ùÀÇ ¹®Á¦µéÀ» ´Ù·Á¿Ô°í ±× ÇØ°áÃ¥À» OSGi ½ºÆå¿¡ Æ÷ÇÔ½ÃÄÑ¿Ô´Ù. OSGi ¼³°è´Â ÀÌ·± ¹®Á¦µéÀ» ¾ÖÇø®ÄÉÀÌ¼Ç Äڵ尡 µ¿ÀÛÇϱâ Àü¿¡ ¹ß°æÇÏ´Â °ÍÀÌ´Ù. Áï ¸®Á¹·ç¼Ç(resolusion)À̶ó´Â ´Ü°è¿¡¼­ ¸»ÀÌ´Ù. ¸®Á¹·ç¼Ç(Resolution)Àº ÀÚ¹Ù¿Í °°Àº ¾ö°ÝÇÑ Å¸ÀÔ Á¦ÇÑ ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼­ ¾ÖÇø®ÄÉÀÌ¼Ç Äڵ带 ½ÇÇàÇϱ⵵ Àü¿¡ ƯÁ¤ ¹®Á¦µéÀ» ¹ß°ßÇÒ ¼ö ÀÖ´Â ÄÄÆÄÀÏ°ú À¯»çÇÏ´Ù. ¿©·¯ºÐÀÇ ¹øµéÀ» resovle ÇÏ·Á¸é °¡²û ¸Ó¸®°¡ ¾ÆÇà ¼öµµ ÀÖ´Ù ÇÏÁö¸¸ À̴ Ŭ·¡½º ij½ºÆ® ¿¹¿Ü¿Í °°Àº ·±Å¸ÀÓ ¿¡·¯ Áø´ÜÀ» ÇØÁØ´Ù.

±×·¡¼­ ¹øµé ¸®Á¹ºê(resolve)´Â ¹«¾ùÀ» ÀǹÌÇϴ°¡? ÀÌ°ÍÀº ¹øµéÀÇ ÀÇÁ¸¼ºÀ» È®ÀÎÇß´Ù´Â ¶æÀÌ´Ù. ÀϹÝÀûÀ¸·Î ÇØ´ç ¹øµéÀÌ »ç¿ëÇÏ´Â(import) ÆÐÅ°Áö¸¦ °ø°³ÇÑ(export) ¹øµéµéÀ» ã¾Ò°í ±× ¹öÀü Á¦¾àÀ» ¸¸Á·½ÃŲ´Ù´Â ¶æÀÌ´Ù. °¡Àå ¸íÈ®ÇÑ Á¦¾à »çÇ×Àº ¸ðµç °ø°³µÈ(export) ÆÐÅ°Áö ¹öÀüÀÌ »ç¿ëÇÏ·Á´Â(import) ÆÐÅ°Áö ¹öÀü ¹üÀ§ ³»¿¡ Æ÷ÇԵǾî¾ß ÇÑ´Ù. ¶Ç ´Ù¸¥ Á¦¾à »çÇ×À¸·Î´Â ÆÐÅ°Áö ÀÓÆ÷Æ®(import)¿¡ ±â¼ú ÇÒ ¼ö ÀÖ´Â ÀÓÀÇ ¼Ó¼ºÀÌ ±×¿¡ ´ëÀÀÇÏ´Â ÆÐÅ°Áö ÀͽºÆ÷Æ®(export) ¼Ó¼º°ú ÀÏÄ¡ÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù.

¿©·¯ ¹øµé¿¡ ÀÇÇØ °ø°³µÈ ÆÐÅ°Áö


¿ì¸®°¡ °ð »ìÆ캼 uses Áö½Ã¾î´Â Çϳª ÀÌ»óÀÇ ¹øµé¿¡ ÀÇÇØ °ø°³µÇ´Â ÆÐÅ°Áö¿¡¼­ ¹ß»ýÇϴ ŸÀÔ ºÒÀÏÄ¡¸¦ ÇØ°áÇÒ ¸ñÀûÀ¸·Î »ç¿ëÇÑ´Ù. ¾î¶² ÇÑ ¹øµéÀÇ Å¸ÀÔÀ» ´Ù¸¥ ¹øµéÀÇ Å¸ÀÔÀ¸·Î »ç¿ëÇÒ ÇÊ¿ä°¡ ÀÖÀ» ¶§, ·±Å¸ÀÓ Å¸ÀÔÀÌ È£È¯µÇÁö ¾Ê±â ¶§¹®¿¡, ŸÀÔ ºÒÀÏÄ¡ ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. ¿¹¸¦ µé¾î, ¾î¶² ¹øµé¿¡¼­ ´Ù¸¥ ¹øµéÀÇ Å¬·¡½º À̸§ÀÌ °°Áö¸¸ ´Ù¸¥ ŸÀÔÀ¸·Î ŸÀÔ Ä³½ºÆÃÀ» ½ÃµµÇÒ ¶§ Ŭ·¡½º ij½ºÆà ¿¹¿Ü°¡ ¹ß»ýÇÑ´Ù. ¾î¶»°Ô ÀÌ·± ÀÏÀÌ ¹ß»ýÇÒ±î? ¹øµéÀº µ¿ÀÏÇÑ ÆÐÅ°Áö¸¦ Çϳª ÀÌ»óÀÇ ¹øµé¿¡¼­ °¡Á®¿Ã(import) ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. »óÃæÇϴ ŸÀÔÀ» Á¢ÃË(contact) ½Ãų ¾î¶² ¹æ¹ýÀÌ ÀÖ¾î¾ß ÇÑ´Ù. It happens by a type being passed "through" a type in another package..

¾î¶² ŸÀÔÀ» ´Ù¸¥ ŸÀÔÀ¸·Î Àü´Þ(pasess through)ÇÏ´Â ¹æ¹ýÀº µÎ °¡Áö°¡ ÀÖ´Ù. ù ¹ø° ¹æ¹ýÀº ¾î¶² ŸÀÔÀÌ ´Ù¸¥ ŸÀÔÀ» ¸í½ÃÀûÀ¸·Î ÂüÁ¶ÇÏ´Â °ÍÀÌ´Ù,. ¿¹¸¦ µé¾î, ´ÙÀ½Àº org.bar ÆÐÅ°Áö¿¡ ÀÖ´Â Bar ŸÀÔÀÇ ¾î¶² ¸Þ¼Òµå´Â org.foo ÆÐÅ°ÁöÀÇ Foo ŸÀÔÀ» ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù.

public Foo getFoo();

¾î¶² ŸÀÔÀ» ´Ù¸¥ ŸÀÔÀ¸·Î ¾Ï¹¬ÀûÀ¸·Î Àü´ÞÇÏ´Â µÎ ¹ø° ¹æ¹ýÀº ¼­ºêŸÀÔÀ» ÀÌ¿ëÇÏ´Â °ÍÀÌ´Ù, ¿¹¸¦ µé¾î, ´ÙÀ½Àº ¼­ºêŸÀÔÀ» ÂüÁ¶ÇÏ´Â ¸Þ¼Òµå ½Ã±×³ÊÃÄ´Ù.

public Object getFoo();

¾Ï¹¬ÀûÀÎ °æ¿ì, ¼­ºêŸÀÔÀÇ °´Ã¼´Â ¾î´À ¼ø°£¿¡´Â »óÃæÇϴ ŸÀÔÀ¸·Î ij½ºÆÃµÉ °ÍÀÌ´Ù.

ÀÚ¹Ù ÄÚµå ¼öÁØ¿¡¼­ ±×·± ŸÀÔ ºÒÀÏÄ¡°¡ ¾î?F°Ô ¹ß»ýÇϴ°¡. ¹øµé manifest°¡ ¾î¶»°Ô »ý°å´ÂÁö »ìÆ캸ÀÚ. 

ÇÊ¿äÇÑ Å¸ÀÔ Foo´Â org.bar ÆÐÅ°Áö¸¦ °ø°³ÇÏ´Â(export) ¹øµé°ú µ¿ÀÏÇÑ ¹øµéÀÌ °ø°³Çϰųª

bundle-symbolicname: B
bundle-manifestversion: 2
export-package: org.foo,org.bar

¶Ç´Â ´Ù¸¥ ¹øµé(F)ÀÌ °ø°³ÇÒ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù.

bundle-symbolicname: B
bundle-manifestversion: 2
export-package: org.bar
import-package: org.foo

bundle-symbolicname: F
bundle-manifestversion: 2
export-package: org.foo

"uses" Áö½Ã¾î´Â OSGi°¡ À§¿Í °°Àº ŸÀÔ ºÒÀÏÄ¡¸¦ ¹øµé ¸®Á¹·ç¼Ç °úÁ¤¿¡¼­ Áø´ÜÇÒ ¼ö ÀÖµµ·Ï µµÀԵǾú´Ù.

"uses" Áö½Ã¾î


À§¿Í °°Àº ÀáÀçÀûÀΠŸÀÔ ºÒÀÏÄ¡¸¦ ¸®Á¹·ç¼Ç °úÁ¤¿¡¼­ ã¾Æ³»±â À§ÇØ, ÀÚ¹Ù ÄÚ½º ¼öÁØ¿¡¼­ÀÇ ¸í½ÃÀûÀÎ ¶Ç´Â ¾Ï¹¬ÀûÀΠŸÀÔÀ» ±×¿¡ »óÀÀÇÏ´Â ¹øµé manifest¿¡ ¼±¾ðÇØ¾ß ÇÑ´Ù. °ø°³ÇÏ´Â ÆÐÅ°Áö´Â "uses" Áö½Ã¾î¸¦ ºÙ¿©¼­ ÇØ´ç ÆÐÅ°Áö°¡ ÂüÁ¶ÇÒ ÆÐÅ°Áö¸¦ ¼±¾ðÇØÁØ´Ù.

À§ ¿¹Á¦¿¡¼­, °ø°³ÇÏ´Â ÆÐÅ°Áö org.bar´Â org.foo ÆÐÅ°Áö¸¦ "»ç¿ë"(use) ÇÑ´Ù°í ¼±¾ðÇÑ´Ù.

¡¦
export-package: org.bar;uses:="org.foo"
¡¦

"uses" Áö½Ã¾î¿¡¼­ »ç¿ëÇÏ´Â ÆÐÅ°Áö³ª ÆÐÅ°ÁöµéÀº "uses" Áö½Ã¾î¸¦ »ç¿ëÇÏ°í ÀÖ´Â ¹øµé manifest¿¡¼­ °ø°³(export) ¶Ç´Â °¡Á®¿Ã(import) ÆÐÅ°Áö¿¡ ¸í½ÃµÇ¾î ÀÖ´Â °ÍµéÀ̾î¾ß ÇÑ´Ù. µû¶ó¼­ ´ÙÀ½Àº À¯È¿ÇÑ manifestÁö¸¸

¡¦
export-package: p;uses:="q,r", q
import-package: r
¡¦

´ÙÀ½Àº À¯È¿ÇÏÁö ¾ÊÀº manifest´Ù.(q ÆÐÅ°Áö¸¦ export ¶Ç´Â import ÇÏ°í ÀÖÁö ¾Ê±â ¶§¹®¿¡)

¡¦
export-package: p;uses:="q,r"
import-package: r
¡¦

ÃßÀÌÀûÀÎ "ueses"


ŸÀÔ ÂüÁ¶´Â ÃßÀÌÀûÀÌ´Ù. ¿¹¸¦ µé¾î, ŸÀÔ C¸¦ ÂüÁ¶Çϴ ŸÀÔ B¸¦ ŸÀÔ A°¡ ÂüÁ¶ÇÒ °æ¿ì¿¡, AÀÇ »ç¿ëÀÚ´Â B¸¦ ÅëÇؼ­ C¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù.

ŸÀÔ ÂüÁ¶°¡ ÀÌ·¸°Ô ÃßÀÌÀûÀ̱⠶§¹®¿¡, OSGi´Â ÀÚµ¿ÀûÀ¸·Î À̸¦ °í·ÁÇß´Ù. "uses" Áö½Ã¾îÀÇ "ÃßÀÌÀûÀΠŬ·ÎÁ®"(transitive closure)¶ó°í ¾Ë·ÁÁ® ÀÖ´Â °ÍÀÌ ¹Ù·Î ±×°ÍÀÌ´Ù. ÀÌ°ÍÀº "uses" Áö½Ã¾î¸¦ »ç¿ëÇϱ⸸ Çϸé OSGi°¡ ¾Ë¾Æ¼­ ÃßÀÌÀûÀΠŸÀÔ ÂüÁ¶¸¦ ´Ù·ïÁشٴ °ÍÀÌ´Ù.

¿¹¸¦ µé¾î, ´ÙÀ½ ¹øµé manifest¸¦ º¸ÀÚ

¡¦
export-package: p;uses:="q,r", q;uses:="r"
import-package: r
¡¦

¹®¹ý¿¡ ¸Â´Ù. ´ÙÀ½ ¹øµé manifest´Â "p¿¡¼­ q", "q¿¡¼­ r" ±×¸®°í "(ÃßÀÌÀûÀ¸·Î) p¿¡¼­ r" ŸÀÔ ÂüÁ¶¸¦ ÃæºÐÈ÷ Àß Ç¥ÇöÇÑ °ÍÀÌ´Ù.

¡¦
export-package: p;uses:="q",q;uses:="r"
import-package: r
¡¦

(¿ªÀÚ ÁÖ, À§¶û ¾Æ·¡¶û °°À¸´Ï±î ¾Æ·¡Ã³·³ »ç¿ëÇصµ µÈ´Ù´Â ¶æÀÔ´Ï´Ù.)

"uses" Ãæµ¹ °¨ÁöÇϱâ(Diagnosing)


¹øµé ·¹Á¹·ç¼Ç °úÁ¤Àº ¸ðµç Á¦¾à »çÇ×À» È®ÀÎÇÏ´Â °ÍÀÌ ÁÖ¸ñÀûÀÌ´Ù. µû¶ó¼­ ¸ðµç "uses" Á¦¾à »çÇ×ÀÌ ¸¸Á·ÇÏÁö ¾ÊÀ» °æ¿ì "uses" Ãæµ¹À» º¸°íÇÒ °ÍÀÌ´Ù. ½ºÇÁ¸µ dm ¼­¹ö°¡ ÁÖ´Â Áø´Ü À̽´´Â ÀÌ·± ¹®Á¦¸¦ ÇØ°áÇϴµ¥ µµ¿òÀ» ÁØ´Ù.

¿ø¸®¸¦ ÀÌÇØÇϱâ À§ÇØ ¸¸µç ¿¹Á¦¸¦ »ìÆ캸ÀÚ. Ŭ¶óÀ̾ðÆ® ¹øµé C°¡ »ç¿ëÇÒ ¸î¸î À¯Æ¿¸®Æ¼ ¹øµé F¿Í BÀ» ¸¸µé°í ÀÖ´Ù°í °¡Á¤Çغ¸ÀÚ. »õ·Î¿î ¹öÀüÀÇ F¸¦ Ãß°¡ÇÏ°í´ÙÀ½ mainfestµéÀ» °¡Áö°í ¼­¹ö¿¡ ¹èÆ÷ÇÑ´Ù°í °¡Á¤Çغ¸ÀÚ.

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: F
Bundle-Version: 1
Bundle-Name: F Bundle
Export-Package: org.foo;version=1

(¿ªÀÚ ÁÖ, ¹öÀüÀÌ 1À̴ϱî ÀÌÀü¿¡ »ç¿ëÇÏ´ø F À¯Æ¿ ¹øµé À̰ڳ׿ä.)

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: F
Bundle-Version: 2
Bundle-Name: F Bundle
Export-Package: org.foo;version=2

(¿ªÀÚ ÁÖ, ¹öÀüÀÌ 2´Ï±î À̹ø¿¡ »õ·Î Ãß°¡ÇÑ F À¯Æ¿ ¹øµéÀΰ¡ º¾´Ï´Ù.)

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: B
Bundle-Version: 1
Bundle-Name: B Bundle
Export-Package: org.bar;uses:="org.foo"
Import-Package: org.foo;version="[1,2)"

(¿ªÀÚ ÁÖ, À̰͵µ À¯Æ¿ ¹øµéÀε¥, F À¯Æ¿ ¹øµé 1¿Í 2°¡ °ø°³ÇÏ´Â(export) org.foo ÆÐÅ°Áö ¹öÀü 1 ÀÌ»ó 2 ¹Ì¸¸À» »ç¿ëÇÏ°í ÀÖ±º¿ä. °á±¹ F À¯Æ¿ ¹øµé ¹öÀü 1À» »ç¿ëÇϰڳ׿ä.)

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: C
Bundle-Version: 1.0.0
Bundle-Name: C Bundle
Import-Package: org.bar,org.foo;version="[2,3)"

(¿ªÀÚ ÁÖ, ÀÌ°Ç Å¬¶óÀ̾ðÆ® ¹øµéÀÎ C Àε¥ org.foo ÆÐÅ°Áö¸¦ »ç¿ëÇÏ´Â µ¥ ±× ¹öÀüÀÌ... ÀÌ·±.. 2 ÀÌ»ó 3 ¹Ì¸¸À» »ç¿ëÇÕ´Ï´Ù. ±×·¯¸é ÀÌ ¹øµéÀº Áö±Ý »õ·Î ¼³Ä¡ÇÑ F À¯Æ¿ ¹øµé ¹öÀü 2¸¦ »ç¿ëÇÏ°Ô µË´Ï´Ù. ¹º°¡ ²¿¿´±º¿ä. ¿Ö³Ä¸é ¿©±â¼­ ¶Ç »ç¿ëÇϱâ·Î(import)µÇ¾î ÀÖ´Â org.bar ÆÐÅ°Áö¿¡¼­´Â F À¯Æ¿ ¹øµé ¹öÀü 1ÀÇ org.foo ÆÐÅ°Áö¸¦ »ç¿ëÇϴϱî¿ä. µÎ ÆÐÅ°Áö°¡ ȣȯµÇÁö ¾ÊÀÚ³ª¿ä. °°Àº ÆÐÅ°ÁöÁö¸¸ ´Ù¸¥ ¹øµéÀÌ °ø°³ÇÑ °Å´Ï±î ·±Å¸ÀÓ Å¸ÀÔÀÌ ´Ù¸£ÁÒ. ¿Ö³Ä¸é Ŭ·¡½º·Î´õ°¡ ´Ù¸£´Ï±î.)

C ¹øµéÀ» ¼³Ä¡ÇÏ·Á°í Çϸé, dm ¼­¹ö´Â ´ÙÀ½°ú °°Àº ·Î±× ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ´Ù,

<SPDE0018E> Unable to install application from location 'file:/xxx/C.jar/'. Could not satisfy constraints for bundle 'C' at version '1.0.0'.
Cannot resolve: C
Resolver report:
Bundle: C_1.0.0 - Uses Conflict: Import-Package: org.bar; version="0.0.0"
Possible Supplier: B_1.0.0 - Export-Package: org.bar; version="0.0.0"
Possible Conflicts: org.foo

ÀÌ Áß¿¡¼­ 

Bundle: C_1.0.0 - Uses Conflict: Import-Package: org.bar; version="0.0.0"

ÀÌ ÁÙÀº org.bar ÆÐÅ°Áö ÀÓÆ÷Æ®¿Í °ü·ÃÇÏ¿© "uses" Á¦¾à À§¹ÝÀÌ ÀÖ´Ù´Â °ÍÀ» ¾Ë·ÁÁØ´Ù. Áï, C°¡ »ç¿ëÇÏ·Á°í ÇÏ´Â °ø°³µÈ(export) org.barÀÇ "uses"°¡ ¸¸Á·½º·¯¿î »óȲÀÌ ¾Æ´Ï¶ó´Â °ÍÀÌ´Ù.

Possible Supplier: B_1.0.0 - Export-Package: org.bar; version="0.0.0"

ÀÌ ÁÙÀº org.bar °ø±ÞÀÚ°¡ Àǽɽº·´´Ù´Â °ÍÀÌ°í

Possible Conflicts: org.foo

ÀÌ ÁÙÀº ¾î¶² ÆÐÅ°Áö¿¡¼­ "uses" Á¦¾à »çÇ×ÀÌ À§¹ÝµÇ´ÂÁö ¾Ë·ÁÁØ´Ù.

±¸Ã¼ÀûÀÎ °Í¿¡¼­ ´Ù½Ã µ¹¾Æ¿Í¼­, ¿ì¸®´Â "uses" Ãæµ¹ÀÌ ¹ß»ýÇÑ ÀÌÀ¯¸¦ ¾Ë°í ÀÖ´Ù. ¹øµé C°¡ °¡Á®¿À´Â org.foo ÆÐÅ°Áö°¡ ¹øµé B°¡ °¡Á®¿À´Â °Í°ú ¹öÀüÀÌ ´Ù¸£±â ¶§¹®ÀÌ´Ù. B°¡ ÃֽŠ¹öÀüÀÇ F¸¦ »ç¿ëÇϵµ·Ï ¼³Á¤ÇÏ´Â °ÍÀ» ±ôºýÇß´Ù.

BÀÇ manifest¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-SymbolicName: B
Bundle-Version: 1
Bundle-Name: B Bundle
Export-Package: org.bar;uses:="org.foo"
Import-Package: org.foo;version="[2,3)"

ÀÌÁ¦ ¹øµé C¸¦ ¼º°øÀûÀ¸·Î ¹èÆ÷ÇÒ ¼ö ÀÖ´Ù.

º¹ÀâÇÑ "uses" Ãæµ¹ Áø´ÜÇϱâ


ÀǵµÀûÀ¸·Î ¸¸µç "uses" Ã溼Àº ¹øµé manifest¸¦ º¸°í¼­·Î ¾Ë ¼ö ÀÖÀ» ¸¸Å­ °£´ÜÇÑ ¹®Á¦¿´´Ù. ÇÏÁö¸¸ ¸Å¿ì ¸¹Àº Ãæµ¹ °¡´É¼ºÀÌ ÀÖ´Â "uses" Áö½Ã¾î ¸ñ·Ï°ú °°Àº Á» ´õ º¹ÀâÇÑ "uses" Ãæµ¹ÀÇ °æ¿ì, Equinox ÄܼÖ(2401Æ÷Æ®·Î telnet)À» »ç¿ëÇÏ¿© ¼º°øÀûÀ¸·Î ¼³Ä¡µÈ ¹øµéÀ» È®ÀÎÇØ º¼ ¼ö ÀÖ´Ù.(dm ¼­¹ö´Â ¼º°øÀûÀ¸·Î ¹èÆ÷ÇÏÁö ¸øÇÑ ¹øµéÀº uninsatll ½ÃŲ´Ù.)

ÀÌÄû³ì½º ÄÜ¼Ö ¸í·É¾î¸¦ »ç¿ëÇÏ¿© ¼³Ä¡µÈ ¹øµé ¸ñ·ÏÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.,

osgi> ss

À§¿¡¼­ ¸¸µé¾îº» ¹®Á¦ »óȲ¿¡¼­ ´ÙÀ½°ú °°Àº ¸ñ·ÏÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

¡¦
82 ACTIVE F_1.0.0
84 ACTIVE F_2.0.0
85 ACTIVE B_1.0.0

B ¹øµé manifest¸¦ º¸·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.

osgi> headers 85

±×¸®°í ÆÐÅ°Áö org.foo ÆÐÅ°Áö¸¦ °ø°³ÇÑ ¹øµé°ú »ç¿ëÇÏ´Â ¹øµéÀ» º¸·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.

osgi> packages org.foo

¿ä¾à


º» ±â»ç´Â "uses" Áö½Ã¾î Çʿ伺À» »ìÆìºÃ°í, À̸¦ »ç¿ëÇÏ¿© ŸÀÔ ºÒÀÏÄ¡ ¿¡·¯ ¹®Á¦¸¦ Á¶±â¿¡ Áø´ÜÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» º¸¾Ò´Ù. ±×¸®°í dm ¼­¹ö Áø´Ü°ú ÀÌÄû³ì½º ÄܼÖÀ» »ç¿ëÇÏ¿© "uses" Á¦¾à À§¹ÝÀ» È®ÀÎÇÏ´Â ¹æ¹ýµµ »ìÆ캸¾Ò´Ù.

(¸¶Áö¸· ´Ü¶ôÀº ¹ø¿ª ½ºÅµ)

You may think the "uses" directive is more trouble than it is worth, but when you consider the alternative of tracking down the reason for a possibly obscure class cast exception while your application is running, you should start to see the rationale for "uses". Indeed any Java module system which doesn't provide the equivalent of "uses" constraints is likely to give you class cast exceptions at runtime once you have gotten to the point of having multiple versions of your application modules. The OSGi "uses" directive solves a general problem of Java modularity.
½Å°í
top

SpringSource DM Server ½Ç½ÀÇÒ °Í 1

Spring DM/etc : 2008.11.11 23:01


¼­¹ö ·Î±× È®ÀÎ
- cd serviceability/trace/
- less trace.log

¼­¹ö ½ÇÇà ÇÒ ¶§ ¿É¼ÇÁÖ±â
- bin/startup.sh -jmxremote
- jconsole

´ýÇÁ¶ß±â(jconsole¿¡¼­)
- ´ýÇÁ ¹öÆ° Ŭ¸¯
- »ý¼ºµÈ ´ýÇÁ ÆÄÀÏ È®ÀÎ(amte ÆÄÀÏ°æ·Î)

À¥ ÇÁ·ÎÁ§Æ® ¸¸µé±â
- new -> project -> springsource dm server -> module project
  - ¸ðµâ ŸÀÔÀ» webÀ¸·Î ¼³Á¤ ÇÒ °Í
  - ÆäÀÌÁö ÄÁÅؽºÆ® ¼³Á¤ ÇÒ °Í
- MODULE-INF Æú´õ ¸¸µé±â(À¥ ±âº» Æú´õ°¡ µÇ´Â µí), ±× µÚ¿¡ À¥ ¸®¼Ò½º ÂÒ¸£¸¤..
- ÄÁÆ®·Ñ·¯ Ãß°¡Çϱâ
- Manifest.mf¿¡ Import-Library: org.springframework.spring;version="[2.5.5.A,3.0.0)" Ãß°¡
- META-INF ¹Ø¿¡ spring Æú´õ ¸¸µé°í ½ºÇÁ¸µ ¼³Á¤ ÆÄÀÏ Ãß°¡.
  - module-context.xml
  - ÄÄÆ÷³ÍÆ® ½ºÄµ
  - ºä ¸®Á¹¹ö
  - AnnotationMethodHandlerAdapter
- ÇÁ·ÎÁ§Æ®¸¦ S2DM ¼­¹ö·Î µå·¡±× ¾Ø µå¶ø
- localhost:8080/ÆäÀÌÁö ÄÁÅؽºÆ® °æ·Î È®ÀÎ.

µ¿¿µ»óÀ» º¸°í µû¶óÇغ¸·Á°í ÇغÃÁö¸¸, ±½Àº ±Û¾¾ ºÎºÐ¿¡¼­ ¸·Çû½À´Ï´Ù. Àú·¸°Ô Ãß°¡¸¦ Çصµ ¶óÀ̺귯¸®¸¦ ¸øã½À´Ï´Ù. ¹øµé Ŭ·¡½º Æнº¿¡ Ãß°¡°¡ µÇ¾î¾ß ÇÒÅÙµ¥ ±×°Ô ¾È µÇ³×¿ä. Èì.. Ç÷¯±×ÀÎ ¹®Á¦Àεí.. ±×°Ô Àß µÇ¾ß Á» ÆíÇÏ°Ô °³¹ßÇÒÅÙµ¥..
 
½Å°í
top

SpringSource Application Platform(S2AP)˼?

Spring DM/etc : 2008.11.09 21:34


S2AP¶û S2DS¶û ÇÞ°¥·Á¼­ ã¾Æ ºÃ´õ´Ï S2AP´Â S2DS¿Í S2E¸¦ Æ÷ÇÔÇÑ °ÍÀ» ¸»Çϴ±º¿ä.

ÂüÁ¶: http://www.springsource.com/products/suite/applicationplatform

The SpringSource Application Platform is an end-to-end platform that is designed from the ground up for complete portability and scalability for today¡¯s data center and for next-generation virtualized, grid, and cloud computing deployments. The Platform is a collection of products designed to provide the optimal environment to build, run and manage enterprise Java applications that utilize Spring based technologies, including:

[¸· ¹ø¿ª]
S2AP´Â ´Ü´ë´Ü Ç÷§ÆûÀ¸·Î ¿äÁò µ¥ÀÌÅÍ ¼¾¼­¿¡ ¿ÏÀüÈ÷ ȣȯ°¡´ÉÇϸç È®À强 ÁÁµµ·Ï ¼³°èÇß°í ¶ÇÇÑ ´ÙÀ½ ¼¼´ëÀÇ °¡»óÈ­, ±×¸®µå ±×¸®°í Ŭ¶ó¿ìµå ÄÄÇ»Æà ¹èÆ÷¸¦ °í·ÁÇÏ¿© ¼³°èÇß´Ù. ÀÌ Ç÷§ÆûÀº ½ºÇÁ¸µ ±â¹Ý ±â¼úÀ» »ç¿ëÇÏ´Â ¿£ÅÍÇÁ¾Æ¸®½º ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ÇÀ» ºôµå, ½ÇÇà ±×¸®°í °ü¸®Çϴµ¥ ÃÖÀûÀÇ È¯°æÀ» Á¦°øÇÏ´Â Á¦Ç°µé·Î ±¸¼ºµÇ¾î ÀÖ´Ù. ´ÙÀ½À» Æ÷ÇÔÇÏ°í ÀÖ´Ù.

    *  SpringSource Enterprise delivers the software, services, and technical support necessary to ensure that your organization develops and runs Spring-powered enterprise applications more productively, securely and with the greatest uptime.
    * SpringSource dm Server is a completely modular, OSGi-based Java server designed to run enterprise Java applications and Spring-powered applications with a new degree of flexibility and reliability.

S2E: ½ºÇÁ¸µÀ» »ç¿ëÇÏ´Â ¿£ÅÍÇÁ¶óÀ̽º ¾ÖÇø®ÄÉÀ̼ÇÀ» º¸´Ù È¿À²ÀûÀÌ°í, Àß »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¼ÒÇÁÆ®¿þ¾î, ¼­ºñ½º ±×¸®°í ±â¼ú Áö¿øÀ» ÇÑ´Ù.
- Spring Enterprise Edition
- SpringSource Perfomance Suite
  - SpringSource Tool Suite
  - SpringSource Application Management Suite
  - SpringSource Advanced Pack of Oracle
- SpringSource Support

S2DS: ¿ÏÀü ¸ðµâÈ­ÇÑ, OSGi-±â¹Ý ÀÚ¹Ù ¼­¹ö·Î, ¿£ÅÍÇÁ¶óÀÌÁî ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ǰú ½ºÇÁ¸µÀ» »ç¿ëÇÏ´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» »õ·Î¿î ¼öÁØÀÇ À¯¿¬¼º°ú ½Å·Úµµ¸¦ °¡Áö°í ½ÇÇàÇÒ ¼ö ÀÖ´Ù.
»ç¿ëÀÚ »ðÀÔ À̹ÌÁö




½Å°í
top

TAG S2APS2DSS2E

OSGi Åø ¼¼Æ® Pax

Spring DM/OSGi : 2008.10.21 00:16


ȨÇÇ http://wiki.ops4j.org/confluence/display/ops4j/Open+Participation+Software+for+Java

°ü·Ã±Û http://www.jroller.com/habuma/entry/is_your_osgi_toolset_pax

½Å°í

'Spring DM > OSGi' Ä«Å×°í¸®ÀÇ ´Ù¸¥ ±Û

OSGi Åø ¼¼Æ® Pax  (0)2008.10.21
Shared Mutable State  (2)2008.09.25
The Price of Freedom  (0)2008.09.25
Concurrency and OSGi  (0)2008.09.25
BundleContext·Î ÇÒ ¼ö ÀÖ´Â ÀÏ  (0)2008.06.25
2 Security Layer  (0)2008.02.18
1. Introduction  (0)2008.02.17
top

TAG OSGitool

½ºÇÁ¸µ DM ÇÁ·ÎÁ§Æ® ºôµåÇϱâ

Spring DM/exercise : 2008.10.16 14:59


¸ÞÀÌºì ±â¹Ý ÇÁ·ÎÁ§Æ®±â ¶§¹®¿¡, °£´ÜÇÏ°Ô mvn package·Î ºôµå ÇÒ ¼ö ÀÖÀ» °Å¶ó°í »ý°¢Çߴµ¥;;; ¶¯.. Ʋ·È½À´Ï´Ù. mvn packae·Î ºôµåÇÏ¸é ´ÙÀ½°ú °°Àº ¿¡·¯¸¦ º¼ ¼ö ÀÖ½À´Ï´Ù.

[ERROR] 

Mojo: 

    org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile

FAILED for project: 

    org.springframework.osgi:spring-osgi-mock:bundle:1.2.0-m1

Reason:

C:\java\spring-osgi-1.2.0-m1\src\mock\src\main\java\org\springframework\osgi\mock\MockServiceReference.java:[23,25] package org.osgi.framework does not exist

OSGi Ç÷§ÆûÀÌ ¾ø¾î¼­ ¹ß»ýÇÏ´Â ¿¡·¯·Î, ½ºÇÁ¸µ DM ÇÁ·ÎÁ§Æ®¸¦ ºôµå ÇÒ ¶§ ÇÁ·ÎÆÄÀÏÀ» ¼±ÅÃÇØÁà¾ß ÇÑ´Ù´Â ±º¿ä. ±×·¡¼­ ½ºÇÁ¸µ DM ÇÁ·ÎÁ§Æ®¿¡ ÀÖ´Â ÇÁ·ÎÆÄÀÏÀ» »ìÆìºÃ½À´Ï´Ù.

»ç¿ëÀÚ »ðÀÔ À̹ÌÁö

¿©·¯°¡Áö°¡ ÀÖ¾ú½À´Ï´Ù. ¸Ç À§¿¡ ¼¼ °³´Â OSGi Ç÷§ÆûÀÌ°í, jdk ¹öÀüÀ» 1.5 ÀÌ»ó¿ëµµ·Î ºôµåÇؼ­ ¾Ö³ëÅ×ÀÌ¼Ç Áö¿ø ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ°Ô ºôµå ÇÒ ¼ö ÀÖ³ªº¸³×¿ä. itÀº ÅëÇÕ Å×½ºÆ®(ÀÌ ¿É¼ÇÀ» ¾È ÁÖ¸é ´ÜÀ§Å×½ºÆ®¸¸ ÇÕ´Ï´Ù.)

mvn -Pequinox

ÅëÇÕ Å×½ºÆ®±îÁö Çϸ鼭 ºôµå ÇÏ·Á¸é

mvn -Pequinox,it

±»ÀÌ ºôµå¸¦ ¾È Çصµ dist Æú´õ¿¡ µé¾îÀÖ±ä ÇÏÁö¸¸... ¿ÀÇ ¼Ò½º¾²´Â ±âº» ÀÚ¼¼¶ó´Â »çºÎ´Ô ¸»¾¸. ļ~ ´öºÐ¿¡ ¿À´Ãµµ ÇÑ ¼ö ¹è¿ü½À´Ï´Ù.

¸ÞÀ̺ì ÇÁ·ÎÆÄÀÏÀº ¾È ½áºÃ´Âµ¥, Àú°É »ç¿ëÇؼ­ ºôµå ÇÏ¸é ¿©·¯ ȯ°æ¿¡ µû¸¥ ºôµå Ä¿½ºÅ͸¶ÀÌ¡ÀÌ °¡´ÉÇϱº¿ä. ƯÈ÷ Àú ÅëÇÕÅ×½ºÆ®°¡ ´«¿¡ ¶ç´Âµ¥ ºôµå ½Ã°£À» ¾öû ¿À·¡ Àâ¾Æ¸Ô´Â ÅëÇÕ Å×½ºÆ®µéÀº ÁÖ±â ÀûÀ¸·Î¸¸ ½ÇÇàÇÏ°í ÇÑ ¹øÀÇ Ä¿¹Ô´ç ½ÇÇàÇÏ´Â ºôµå´Â ´ÜÀ§Å×½ºÆ®¸¸ ½ÇÇàÇÏ°Ô ÇÒ ¼öµµ ÀÖ°Ú½À´Ï´Ù.. Èì.. ÇÁ·ÎÆÄÀÏ ÁÁ±¸³ª.


½Å°í
top

Spring DM 1.1.2 ¸±¸®Áî~

Spring DM/etc : 2008.10.04 18:58


http://www.springframework.org/node/776

À̹ø¿£ ±×´Ú ´«ÀÇ ¶ç´Â changelog°¡ ¾ø³×¿ä.
½Å°í
top

Shared Mutable State

Spring DM/OSGi : 2008.09.25 11:33


°øÀ¯ÇÏ´Â ºÒº¯ °´Ã¼

°¡´ÉÇÑÇÑ ÃÖ¼ÒÇÑÀÇ °´Ã¼¸¸ °øÀ¯ÇÏ°í, °¡´ÉÇÑÇÑ °øÀ¯ÇÏ´Â °´Ã¼¸¦ immutableÇÏ°Ô À¯ÁöÇÔÀ¸·Î½á, ±âº»ÀûÀ¸·Î "µ¿½Ã¼º ¹®Á¦" Å©±â¸¦ ÁÙÀδÙ. ºÒÇàÈ÷µµ ÀÌ ¹æ¹ýÀ¸·Î´Â ¹®Á¦ Å©±â¸¦ 0À¸·Î ¸¸µéÁö´Â ¸øÇÑ´Ù. ½ÇÁ¦ ´ëºÎºÐÀÇ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ °øÀ¯ÇÏ´Â ºÒº¯ °´Ã¼ »ç¿ëÀ» ¿ÏÀüÈ÷ ¾ø¾ÖÁø ¸øÇϱ⠶§¹®¿¡, ±×·² ¶§ ¾ÈÀüÇÑ ¹æ¹ýÀ» ã¾Æ¾ß ÇÑ´Ù.

¼­ºñ½º ±â¹Ý ÄÚµå ¿¹Á¦¸¦ »ìÆ캸ÀÚ. µî·ÏµÈ ¸ÞÀÏ ¹Ú½º ¼­ºñ½ºÀÇ MapÀ» °ü¸®ÇÑ´Ù°í °¡Á¤Çغ¸ÀÚ. À̸§À» Å°·Î »ç¿ëÇÏ°í getMailboxByName À̶ó´Â public ¸Þ¼Òµå¸¦ Á¦°øÇÏ¿© ƯÁ¤ ¸ÞÀÏ ¹Ú½º ¶Ç´Â ´ëÀÀÇÏ´Â ¹Ú½º°¡ ¾øÀ¸¸é nullÀ» ¹ÝȯÇϵµ·Ï ÇÑ´Ù. ÀÌ ¿¹Á¦ ÄÚµå´Â 6.1¿¡¼­Ã³·³ ÀÚ¹Ù synchronized ºí·°À» »ç¿ëÇÏ¿© ¾²·¹µå ¼¼ÀÌÇÁƼ¸¦ º¸ÀåÇÑ´Ù. ÀÌ Å¬·¡½º´Â Àß µ¿ÀÛÇÑ´Ù. µ¿ÀÏÇÑ °´Ã¼¿¡ Á¢±ÙÇÒ ¶© ÇØ´ç °´Ã¼ÀÇ ?ôÀ? Áö´Ï°í Á¢±ÙÇØ¾ß Çϱ⠶§¹®ÀÌ´Ù. ºñ·Ï ¸Ê Çʵå ÀÚü´Â final ÀÌÁö¸¸, mapÀÌ °¡Áö°í ÀÖ´Â ³»¿ë¹°Àº mutablÇÏ¸ç ¿©·¯ ¾²·¹µå°¡ °øÀ¯ÇÏ°í ÀÖ´Ù. µû¶ó¼­ lockÀ¸·Î º¸È£ÇØ¾ß ÇÑ´Ù. ¶Ç¶õ, µ¿±âÈ­ ºí·°Àº °¡´ÉÇÑÇÑ Âª°í, »¡¸® ?ôÀ? ¹ÝȯÇØ¾ß ÇÑ´Ù.

=> À½.. ±ÛÄï mutaleÇÑ °´Ã¼¸¦ °øÀ¯ÇÏ´Â °æ¿ì°¡ ¾î¶²°ÇÁö °¨ÀÌ ¿À´Â±º. ¿ª½Ã ¿¹Á¦°¡ ÀÖ¾î¾ß ÀÌÇØÇϱ⠽±³×.

ÇÏÁö¸¸, ÄÚµå 6.1Àº Java 5¿¡ µµÀÔµÈ »õ·Î¿î µ¿½Ã¼º ±â´ÉÀÇ ÀåÁ¡Àº Çϳªµµ ÀÌ¿ëÇÏ°í ÀÖÁö ¾Ê´Ù. ÀÚ¹Ù 5ÀÇ ±â´ÉÀ» »ç¿ëÇÏ¸é µ¿½Ã¿¡ ¿©·¯ ¾²·¹µå°¡ getMailboxByName ¸Þ¼Òµå¸¦ È£ÃâÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ÀÌÀü µ¿±âÈ­ ºí·°Àº Àбâ¿Í ¾²±â¸¦ ±¸ºÐÇÒ ¼ö ¾ø¾ú´Ù. ¸ðµç ¸Þ¼Òµå Á¢±Ù½Ã¿¡ ºÒÇÊ¿äÇÏ°Ô ?? °´Ã¼¸¦ ¿ä±¸Çß´Ù. ÇÏÁö¸¸ Java 4¿¡ µµÀÔµÈ Read/Write ?ôÀ? À̸¦ ±¸ºÐÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. ÄÚµå 6.2´Â ÀÌ ±â´ÉÀ» »ç¿ëÇÏ¿© ¿©·¯ ¾²·¹µå°¡ µ¿½Ã¿¡ ¸Ê¿¡¼­ Àбâ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. ¹°·Ð µ¿½Ã¿¡ º¯°æÀº ¸øÇÏ°Ô ¸·°í ÀÖ´Ù.

¸¸¾à ÀÚ¹Ù 5¸¦ »ç¿ëÇÒ ¼ö Àִ ȯ°æÀ̶ó¸é, ±× ¾È¿¡ µé¾îÀÖ´Â »õ·Î¿î concurrnt ¶óÀ̺귯¸®¸¦ È®ÀÎÇغ¸´Â°Ô ÁÁ°Ú´Ù. ÀÚ¹Ù 1.4¸¦ »ç¿ëÇÏ°í ÀÖ´Ù¸é µ¿±âÈ­ ºí·° »ç¿ëÀ» ÁÖÀúÇÏÁö ¸»¾Æ¶ó. ¸¹Àº °³¹ßÀÚµéÀº ¼º´É ¹®Á¦·Î µ¿±âÈ­ ºí·° »ç¿ëÀ» ÁÖÀúÇÏÁö¸¸, ½ÇÁ¦·Î µ¿±âÈ­ ºí·°À» ÃÖ´ëÇÑ ÀÛ°Ô À¯Áö¸¸ ÇÑ´Ù¸é ±×·¸°Ô ¼º´ÉÀÌ ³ª»ÚÁø ¾Ê´Ù.  ±×¸®°í ¹«¾ùº¸´Ù ¼º´É Á¶±Ý ³ôÀÌÀÚ°í µ¿±âÈ­ ¹®Á¦¸¦ ¹æÄ¡ÇÑ´Ù´Â °Ç ¸»ÀÌ ¾È µÈ´Ù.

=> ¿ÇÄ¿´Ï~. ÀÚ¹Ù 5¿¡ ±×·± °Ô ÀÖ¾ú±¸³ª.. ¿ì¿Í;; Æò¼Ò¿¡ ¾²·¹µå ´Ù·ê ÀÏÀÌ °ÅÀÇ ¾øÀ¸´Ï ¿ÏÀü ¸ô¶ú³×.

=> »ìÆì º¼ Ŭ·¡½º
- ReadWriterLock
- ReentrantReadWriteLock



½Å°í

'Spring DM > OSGi' Ä«Å×°í¸®ÀÇ ´Ù¸¥ ±Û

OSGi Åø ¼¼Æ® Pax  (0)2008.10.21
Shared Mutable State  (2)2008.09.25
The Price of Freedom  (0)2008.09.25
Concurrency and OSGi  (0)2008.09.25
BundleContext·Î ÇÒ ¼ö ÀÖ´Â ÀÏ  (0)2008.06.25
2 Security Layer  (0)2008.02.18
1. Introduction  (0)2008.02.17
top

The Price of Freedom

Spring DM/OSGi : 2008.09.25 11:13


ÂüÁ¶ : http://neilbartlett.name/blog/osgibook/

ÀÚÀ¯ÀÇ ´ñ°¡.

=> ¾²·¹µå¸¦ ¸¾´ë·Î ¸¸µé¾î »ç¿ëÇÒ ¼ö ÀÖ´Â ÀÚÀ¯ÀÇ ´ñ°¡.

»ó»óÀ¸·Î ¸¸µç A, B, C ¹øµé¿¡ ´ëÇÑ °£´ÙÇÑ ½Ã³ª¸®¿À¸¦ »ìÆ캸ÀÚ. ±×¸² 6.1¿¡ UML ½ÃÄö½º ´ÙÀ̾î±×·¥À¸·Î ³ªÅ¸³Â´Ù. ¹øµé A°¡ ¾²·¹µå¸¦ ½ÃÀÛ½ÃÅ°°í ¾î´À ¼ø°£ ¹øµé B¿¡ Á¢±ÙÇÏ¿© ÇØ´ç ¾²·¹µå¿¡¼­ ¹øµé BÀÇ start ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù. ±×·¯¸é ¹øµé B°¡ È°µ¿À» ½ÃÀÛÇÏ°í(active), ¹øµé B ¾×Ƽº£ÀÌÅÍÀÇ start ¸Þ¼Òµå°¡ ¹øµé A°¡ ¸¸µç ¾²·¹µå¿¡¼­ È£ÃâµÉ °ÍÀÌ´Ù. °Ô´Ù°¡, BÀÇ start ¸Þ¼Òµå¿¡¼­ ¾î¶² ¼­ºñ½º¸¦ µî·ÏÇÏ°í, C°¡ ¼­ºñ½º Æ®·¡Ä¿·Î ÀÌ ¼­ºñ½º ŸÀÔÀ» ¸®½º´×ÇÏ°í ÀÖ´Ù. ¹øµé C Æ®·¡Ä¿ÀÇ addingService ¸Þ¼Òµå°¡ È£ÃâµÇ°í, ÀÌ ¿ª½Ã A°¡ ¸¸µç ¾²·¹µå¿¡¼­ È£ÃâµÈ´Ù. ¸¶Áö¸·À¸·Î C°¡ B°¡ µî·ÏÇÑ ¼­ºñ½º¸¦ ÁÖ±âÀûÀ¸·Î È£ÃâÇÏ´Â ¾²·¹µå¸¦ ¸¸µé¾ú´Ù°í °¡Á¤Çغ¸ÀÚ.

=> ¾Æ.. ³Ê¹«ÇØ. ÀÌ°Ô ¹º¸®¾ß. Á» Â÷±Ù Â÷±Ù ¾ê±âÇØÁÖÁö. -_-;; ±×·¯´Ï±î...
1. ¹øµé A°¡ ¾²·¹µå¸¦ ¸¸µé°í °Å±â¼­ ¹øµé BÀÇ start ¸Þ¼Òµå¸¦ È£ÃâÇؼ­ ¹øµé B¸¦ È°¼ºÈ­ ½ÃŲ´Ù.
2. ¹øµé BÀÇ start ¸Þ¼Òµå¿¡¼­´Â ¹øµé C°¡ ¸®½º´×ÇÏ°í ÀÖ´Â ¼­ºñ½º¸¦ ¼­ºñ½º ·¹Áö½ºÆ®¸®¿¡ µî·ÏÇÑ´Ù.
3. ¹øµé C´Â »õ·Î¿î ¾²·¹µå¸¦ ¸¸µé¾î¼­ ÁÖ±âÀûÀ¸·Î B°¡ µî·ÏÇÑ ¼­ºñ½º¸¦ °¡Á®¿Â´Ù.
À̸»Àΰ¡? ±×·¸´Ù Ä¡°í.. 

»ç¿ëÀÚ »ðÀÔ À̹ÌÁö

Ŭ¶óÀ̾ðÆ®°¡ ¼­ºñ½º ·¹Áö½ºÆ®¸®¿¡¼­ ¼­ºñ½º¸¦ °¡Á®°¥ ¶§, ÇÁ·Ï½Ã³ª ·¦ÆÛ°¡ ¾Æ´Ñ ÁøÂ¥ ¼­ºñ½º °´Ã¼¸¦ ã´Â´Ù. µû¶ó¼­ Ŭ¶óÀ̾ðÆ®°¡ ¼­ºñ½º¿¡ ¸Þ¼Òµå¸¦ È£ÃâÇÒ ¶§, ÇØ´ç È£ÃâµéÀº ±âº»ÀûÀ¸·Î µ¿±âÀûÀÎ ¸Þ¼Òµå È£ÃâÀÌ´Ù. Áï, ¾²·¹µå¿¡¼­ ½ÇÇàÇÏ´Â ¼­ºñ½º ¸Þ¼Òµå¸¦ Ŭ¶óÀ̾ðÆ® ¹øµéÀÌ "Áã°íÀÖ´Ù."(owned)¶ó´Â ¶æÀÌ´Ù.

=> ³ß. 

¶ÇÇÑ, ¸¹Àº(ÀüºÎ´Â ¾Æ´Ô) OSGi ³»ÀÇ ¾Ë¸²Àº µ¿±âÀûÀ¸·Î ¹ß»ýÇÑ´Ù. ÇÁ·¹ÀÓ¿öÅ©°¡ ÄݹéÀ» »ç¿ëÇÏ´Â ¸Þ¼Òµå(ServiceEvent¸¦ µî·ÏµÇ¾û ÀÖ´Â ¼­ºñ½º ¸®½º³Ê·Î º¸³»´Â °ÍÀ̳ª ¹øµé ¿¢Æ¼º£ÀÌÅÍÀÇ start ¶Ç´Â stop ¸Þ¼Òµå¸¦ È£ÃâÇÏ´Â °Í °°Àº)¿¡ ÀÇÇØ È£ÃâµÉ ¶§, ±×·± ÄݹéµéÀº µ¿ÀÏÇÑ ¾²·¹µå¿¡¼­ ½ÇÇàµÇ°í, ÀÌÀü Á¦¾î±ÇÀÌ ÇÁ·¹ÀÓ¿öÅ© ¸Þ¼Òµå¸¦ È£ÃâÇÑ ÂÊ¿¡ µÇµ¹¾Æ°¡±â Àü¿¡ ¿Ï·áÇØ¾ß ÇÑ´Ù.

=> ¾Æ.. ¾î·Æ´Ù. ÇÁ·¹ÀÓ¿öÅ©ÀÇ ¾î¶² ¸Þ¼Òµå¿¡ ÄݹéÀ» ³Ñ°ÜÁáÀ» ¶§, ±× Äݹ鵵 °°Àº ¾²·¹µå¿¡¼­ È£ÃâµÈ´Ù´Â °ÍÀÌ°í, ÇØ´ç ÄÝ¹é ½ÇÇàÀÌ ¿Ï·áÇÑ ´ÙÀ½¿¡, Á¦¾î±ÇÀ» ³Ñ°ÜÁà¾ß ÇÑ´Ù´Â °ÍÀ̱º.

À§¿Í °°Àº »óȲ¿¡´Â ¼¼ °³ÀÇ ÁÖ¿ä °¡Á¤ÀÌ Á¸ÀçÇÑ´Ù.
  • Äݹé°ú ¼­ºñ½º ¸Þ¼Òµå´Â ¾î¶² ¾²·¹µå¿¡¼­µç È£ÃâµÉ ¼ö ÀÖ´Ù. ¿©·¯ ¾²·¹µå¿¡¼­ µ¿½Ã¿¡ È£ÃâµÉ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. À̸¦ ÁÖ½ÃÇÏÁö ¾Ê°í ÄÚµùÇßÀ» ¶§´Â ¿¹»óÇÏÁö ¸øÇÑ ¹®Á¦¸¦ ¹ß»ý½Ãų ¼ö ÀÖ´Ù.
  • ¿ì¸®°¡ ÀÛ¼ºÇÒ Äݹé°ú ¼­ºñ½º ¸Þ¼Òµå¸¦ È£ÃâÇÏ´Â ¾²·¹µå´Â ¿ì¸®°¡ ¸¸µé °Í¿¡ "Æ÷ÇԵǾî ÀÖÁö ¾Ê´Ù." ¸¸¾à ¿À·£ ½Ã°£ µ¿ÀÛÇϰųª, blocking I/O¸¦ ÀÌ·± Äݹ鿡¼­ »ç¿ëÇÑ´Ù¸é Àüü ½Ã½ºÅÛÀ» Áö¿¬½Ãų ¼ö ÀÖ´Ù.
  • OSGi API ¸Þ¼Òµå¸¦ »ç¿ëÇϸé, ¿ì¸° ÇØ´ç ÇÁ·¹ÀÓ¿öÅ©°¡ ¾î¶² ¸®½º³Ê³ª ÄݹéÀ» »ç¿ëÇÏ´ÂÁö ¿¹ÃøÇÒ ¼ö ¾ø°í, µû¶ó¼­ ÇØ´ç Äݹ鿡¼­ ¾î¶² ?ôÀ? ÃëÇÏ·Á´ÂÁöµµ ¾Ë ¼ö°¡ ¾ø´Ù. ¸¸¾à ±×·± ¸Þ¼Òµå¸¦ È£ÃâÇÏ´Â µµÁß ´Ù¸¥ ?ôÀ? °¡Áö°í ÀÖ´Ù¸é, daedlockÀ» ¹ß»ýÅ°Áú À§ÇèÀÌ ÀÖ´Ù.
ÀÌ·± ¹®Á¦¿¡ ´ëÇÑ ÇØ°áÃ¥Àº ÁÁÀº µ¿½Ã¼º ÇÁ·Î±×·¡¹Ö ÇÁ·¢Æ¼½º¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÇÏÁö¸¸, ¾ÈÀüÇÑ µ¿½Ã¼ºÀº ±×·¸°Ô ¾î·ÆÁö ¾Ê´Ù. ÃÖ¼ÒÇÑ ºí¶ó ºí¶ó ÇÏ´Â °Íó·³. õÀ縸 ÇÒ ¼ö ÀÖ´Â °ÍÀÌ ¾Æ´Ï´Ù. ÇÙ½ÉÀº (¸¹Àº õÀçµéÀÌ ÇÏÁö¾Ê´Â) ÈÆ·ÃÀÌ´Ù. ¸î °¡Áö ±ÔÄ¢À» Àû¿ëÇÏ¿©, ¿ì¸®°¡ ¸Â´ÚµéÀÌ°Ô µÉ ´ëºÎºÐÀÇ »óȲÀ» ½±°Ô ó¸®ÇÒ ¼ö ÀÖ´Ù.

1. º¯ÇÏ´Â(Immutable) °´Ã¼´Â ÀÚµ¿ÀûÀ¸·Î ¾²·¹µå ¼¼ÀÌÇÁÇϸç, ¿©·¯ ¾²·¹µå¿¡ °ÉÃÄ °øÀ¯µÉ °´Ã¼°¡ ¾Æ´Ï¶ó¸é ¾²·¹µå ¼¼ÀÌÇÁ ÇؾßÇÒ ÀÌÀ¯°¡ ¾ø´Ù. µû¶ó¼­ °¡´ÉÇÑ °øÀ¯ÇÒ °ÍÀ» ÃÖ¼ÒÈ­ ÇÏ°í °¡´ÉÇÑ immutable °´Ã¼¸¦ »ç¿ëÇ϶ó.

2. °øÀ¯ÇÏ´Â ºÒº¯ÀÇ(mutabl) °´Ã¼°¡ Á¤¸»·Î ²À ÇÊ¿äÇÑ °æ¿ì, ¸ðµç Á¢±Ù(Àб⠾²±â)À» ¸·¾Æ¼­ µ¿ÀÏÇÑ °´Ã¼ÀÇ ?ôÀ? °¡Áö°í Çʵ带 º¸È£Çϰųª volatile º¯¼ö¸¦ »ç¿ëÇ϶ó.

3. ÀÌ¹Ì ?ôÀ? °¡Áö°í ÀÖ´Â »óÅ¿¡¼­ »õ·Î¿î ?ôÀ? ¾òÀ¸·Á°í ÇÏÁö ¸»¾Æ¶ó. ÀÌ ±ÔÄ¢À» µû¸£¸é ÀÚ¿¬½º·¡, ?ôÀ? ¾òÀ¸·Á´Â ½Ãµµ¸¦ ÇÒÁöµµ ¸ð¸£´Â "¾Æ´Â¹Ù¾ø´Â" ȤÀº "¿ÜºÎ" Äڵ带 È£ÃâÇÒ ¶§´Â ¾î¶² ?ôµ? Áã°í À־´Â ¾È µÈ´Ù. ÀÌ´Â ¼­ºñ½º ¶Ç´Â OSGi API¸¦ È£ÃâÇÒ ¶§¸¦ ¸»Çϸç, À̵é Áß ´ëºÎºÐÀÌ ´Ù¸¥ ¹øµéÀÇ ÄݹéÀ» ¿ì¸®°¡ ¸¸µç ¾²·¹µå¿¡¼­ ½ÇÇàÇÏ°Ô µÈ´Ù.

=> ±ÛÄï, ?ôÀ? Áã°í ÀÖ´Â »óÅ¿¡¼­ ?ôÀ? °¡Áö·Á°í ÇÒÁöµµ ¸ð¸£´Â ¾î¶² ¼­ºñ½º ¶Ç´Â OSGi API¸¦ È£ÃâÇϸé deadlockÀÌ ¹ß»ýÇÒ ¼ö ÀÖÀ¸´Ï, ±×·² ¶© ?ôÀ? Áã°í ÀÖÁö ¸»¶ó´Â °ÍÀ̷২ä. 

=> ÇÑ°¡Áö ±Ã±ÝÇÑ°Ç 2¹ø¿¡¼­ volatileÀ» »ç¿ëÇÏ¸é ¸ðµç ¾²·¹µå¿¡¼­ µ¿ÀÏÇÑ °ªÀ» »ç¿ëÇÏ°Ô µÉÅÙµ¥ ±×·¸°Ô µÇ¸é, °á±¹¿£ mutable ÇÏÁö ¸øÇÑ°Ô µÈ´À°Å ¾Æ´Ñ°¡.. Èì.. A ¾²·¹µå¿¡¼­ foo.nameÀ» a¶ó°í ÇÏ°í B ¾²·¹µå¿¡¼­ foo.nameÀ» ÂïÀ¸¸é a°¡ ÂïÈúÅ×°í B ¾²·¹µå¿¡¼­ ´Ù½Ã foo.nameÀ» b¶ó°í Çϸé, À̹ø¿£ A ¾²·¹µå¿¡¼­ foo.nameÀ» ÂïÀ¸¸é b°¡ ÂïÈúÅÙµ¥... ³»°¡ volatileÀ» À߸øÀÌÇØÇÑ°Ç°¡.. ¾Æ´Ñµ¥, ¸ÂÀ»ÅÙµ¥, ¾Æ´Ï¸é, mutable->immutableÇÏ°Ô »ç¿ëÇ϶ó´Â °ÍÀΰ¡.. Â÷¸®¸® ThreadLocalÀ» »ç¿ëÇÏ´Â°Ô ³´Áö ¾ÊÀ»±î. ¾Æ´Ñµ¥ ÀúÀÚ°¡ ±×°É ¸ð¸¦¸®µµ ¾ø°í, ¾Æ. mutableÀ̴ϱî, setter¸¦ ¸·¾ÆµÖ¼­ °ª º¯°æÀ» ¸·¾Æµ×°Ú±¸³ª.. À§¿Í °°Àº ³» »ý°¢Àº immutable°´Ã¼¸¦ °øÀ¯ÇÒ ¶§ »ý±â´Â ¹®Á¦Áö;. (Èì.. À̰͵µ ¾Æ´Ñ°¡ À§¿¡¼± ºÐ¸í 'Àбâ¿Í ¾²±â'¶ó°í '¾²±â'¸¦ ¾ð±ÞÇÏ°í ÀÖÀÚ³ª..) Èì..±×·³ ¹ÂÅÍºí °´Ã¼¸¦ ¿Ö °øÀ¯Çؼ­ ¾²´Â°ÅÁö. ±×·² ¶§ ±× °´Ã¼ °ªÀ» º¯°æÇÏÁö ¸øÇϸé, ¸ÖƼ ¾²·¹µå °ÆÁ¤ ¾ÈÇصµ µÇ´Â°Å ¾Æ´Ï¾ß? ¾Æ.. ´ÙÀ½ éÅ͸¦ ÀоÀÚ. ¾Æ ³» ¸Ó¸®.
½Å°í

'Spring DM > OSGi' Ä«Å×°í¸®ÀÇ ´Ù¸¥ ±Û

OSGi Åø ¼¼Æ® Pax  (0)2008.10.21
Shared Mutable State  (2)2008.09.25
The Price of Freedom  (0)2008.09.25
Concurrency and OSGi  (0)2008.09.25
BundleContext·Î ÇÒ ¼ö ÀÖ´Â ÀÏ  (0)2008.06.25
2 Security Layer  (0)2008.02.18
1. Introduction  (0)2008.02.17
top

Concurrency and OSGi

Spring DM/OSGi : 2008.09.25 10:25


ÂüÁ¶ : http://neilbartlett.name/blog/osgibook/

J2EE °°Àº ¹«°Å¿î(heavyweight) ÇÁ·¹ÀÓ¿öÅ©¿¡ ºñÇØ, OSGi´Â ¾²·¹µå¸¦ Æ÷ÇÔÇÑ JVMÀÇ ¸ðµç ¸®¼Ò½º¸¦ Á¦¾îÇÏ·Á µéÁö ¾Ê´Â´Ù. J2EE¿¡¼± Á÷Á¢ ¾²·¹µå¸¦ ¸¸µé°Å³ª ¸í½ÃÀûÀÎ µ¿±âÈ­(synchronization)¸¦ ÇÏ´Â Äڵ带 ÀÛ¼ºÇÏ´Â °ÍÀ» ±ÝÇÏ°í, ´ë½Å¿¡ Á¦ÇÑÀûÀÎ "ÀÛ¾÷ °ü¸®" ÇÁ·¹ÀÓ¿öÅ©¸¦ Á¦°øÇÑ´Ù. OSGi´Â ¿©·¯ºÐÀÌ Á÷Á¢ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ¾²·¹µå¸¦ ¸¸µé°í ½ºÄÉÁ층À» ÇÒ ¼ö ÀÖ´Ù. ±×·¸°Ô ÇÏ·Á¸é OSGi ¶óÀ̺귯¸®µéÀº ¾²·¹µå ¼¼ÀÌÇÁÇØ¾ß ÇÏ¸ç ¾î¶² ¾²·¹µå¿¡¼­µµ È£ÃâÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù.

=> Áï, OSGi¿¡¼­´Â ¾²·¹µå¸¦ Á÷Á¢ ´Ù·ç´Â Äڵ带 ÀÛ¼ºÇÒ ¼öµµ ÀÖÀ¸´Ï, ¾²·¹µå ¼¼ÀÌÇÁÇÑ ¶óÀ̺귯¸®¸¦ ¸¸µå´Â °ÍÀÌ Áß¿äÇÏ´Ù´Â ¶æÀεí..

ÇÏÁö¸¸, ÀÌ·± ÀÚÀ¯¿¡´Â ´ñ°¡°¡ µû¸£µíÀÌ, ¿ì¸®°¡ ¸¸µé ¹øµé¿¡¼­ ¾²·¹µå¸¦ »ý¼ºÇÏ¿© »ç¿ëÇϴ°ÍÀÌ °¡´ÉÇϵíÀÌ, ¿ì¸®°¡ ¸¸µé ¹øµéÀÌ ´ÜÀÏ ¾²·¹µå ȯ°æ¿¡¼­¸¸ »ç¿ëµÇ¸®¶ó´Â º¸ÀåÀº ¸øÇÑ´Ù. OSGi´Â ¾Ï¹¬ÀûÀ¸·Î ¸ÖƼ ¾²·¹µå´Ù. µû¶ó¼­ ¹Ýµå½Ã ÀÛ¼ºÇÏ´Â Äڵ尡 ¾²·¹µå ¼¼ÀÌÇÁÇØ¾ß Çϸç, ƯÈ÷ À̺¥Æ®³ª ÄݹéÀ» ´Ù¸¥ ÇÁ·¹ÀÓ¿öÅ© ¶Ç´Â ¹øµé¿¡¼­ ¹Þ¾Æ¿Ã ¶§ ÁÖÀÇÇØ¾ß ÇÑ´Ù.

=> Èì. ´ç¿¬ÇÑ ¸»¾¸.

Brian GoetzÀÇ "Java Concurrency in Practice"¿¡¼­ ÀÚ¹Ù µ¿½Ã¼º¿¡ ´ëÇØ ÀÚ¼¼È÷ ´Ù·ç°í ÀÖÀ¸´Ï, ÇÁ·ÎÆä¼Å³Î ÀÚ¹Ù ÇÁ·Î±×·¡¸Ó¶ó¸é Ç×»ó ÀÌ Ã¥À» °¡±îÀÌ Ç϶ó.

=> ³Ü.
½Å°í

'Spring DM > OSGi' Ä«Å×°í¸®ÀÇ ´Ù¸¥ ±Û

OSGi Åø ¼¼Æ® Pax  (0)2008.10.21
Shared Mutable State  (2)2008.09.25
The Price of Freedom  (0)2008.09.25
Concurrency and OSGi  (0)2008.09.25
BundleContext·Î ÇÒ ¼ö ÀÖ´Â ÀÏ  (0)2008.06.25
2 Security Layer  (0)2008.02.18
1. Introduction  (0)2008.02.17
top

OSGi °³¹ß¿¡ PDE°¡ ÇÊ¿äÇÑ°¡?

Spring DM/etc : 2008.09.15 20:21


Àý´ë·Î ±×·¸Áö ¾Ê½À´Ï´Ù. ¿ÀÈ÷·Á OSGi¸¦ óÀ½ Á¢ÇÒ ¶§ ÀÌŬ¸³½º PDE(Plug-in Development Environment)·Î ½ÃÀÛÇϸé, ´õ ³¸¼³°í º¹ÀâÇØ º¸ÀÔ´Ï´Ù. ¿ØÁö ²À ±×·± µµ±¸°¡ ÀÖ¾î¾ß °³¹ßÇÒ ¼ö ÀÖÀ» °Í °°Àº ±âºÐÀÌ µéÁÒ. ±×·¡¼­, ¿ÀÈ÷·Á óÀ½ OSGi °³¹ßÀ» ½ÃÀÛÇϰųª °øºÎÇÒ ¶§´Â PDE¸¦ »ç¿ëÇÏÁö ¾Ê´Â°Ô ´õ ÁÁÀº ¹æ¹ýÀ̶ó°í »ý°¢ÇÕ´Ï´Ù. ÃÖ¼ÒÇÑÀÇ µµ±¸¸¸À» »ç¿ëÇϴ°ÍÀÌ ¿ÀÈ÷·Á OSGi ÇнÀ¿¡ µµ¿òÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù.

¶ÇÇÑ, µµ±¸µéÀº ¾î´ÀÁ¤µµ ÇнÀÀÚ·Î½á ¹Ýµå½Ã ¾Ë¾Æ¾ß ÇÒ °ÍÀ» °¨Ãß´Â °æÇâÀÌ ÀÖ½À´Ï´Ù. µµ±¸¸¦ »ç¿ëÇÏ´Â °ÍÀº ÁÁÄ¡¸¸, ¸¶Ä¡ ÀÚ¹Ù¸¦ ¹è¿ï ¶§ javac Hello.java ¶û java Helloµµ ¾È Çغ¸°í ÀÌŬ¸³½º¿¡¼­ Run As -> Java Application¸¸ ½ÇÇàÇÏ´Â °Í¿¡´Â Å« Â÷ÀÌ°¡ ÀÖµíÀÌ..¸»ÀÌÁÒ.

±×·¡¼­ OSGi ÇнÀÀ» ÇÒ ¶§ ±ÇÀåÇÏ´Â µµ±¸´Â ÃÖ¼ÒÇÑÀÇ ÀÚ¹Ù ÇÁ·ÎÁ§Æ® ÆíÁý±â + bnd ÀÔ´Ï´Ù. bnd´Â MANIFEST.MF »ý¼º°ú, ÇØ´ç ÇÁ·ÎÁ§Æ®¸¦ ¹øµé·Î ¹­¾îÁÖ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. MANIFEST.MF ÆÄÀÏÀ» bnd·Î ¸¸µå´Â ÀÌÀ¯´Â MANIFEST.MF ÆÄÀÏÀÌ ´Ü¼øÇÑ ÅؽºÆ® ÆÄÀÏÀÌ ¾Æ´Ï±â ¶§¹®ÀÔ´Ï´Ù. ÇÑ Çà´ç ±æÀÌ Á¦ÇÑÀÌ ÀÖÀ¸¸ç, »ç¿ëÇÒ ¼ö ÀÖ´Â Çì´õ¿Í °ªÀ» ÁöÄѼ­ ¸¸µé¾î¾ß ÇÕ´Ï´Ù. bnd´Â ±×·± ºÒÆíÇÔÀ» ÃÖ¼ÒÈ­ ÇØÁÝ´Ï´Ù. ±×¸®°í ¹øµé·Î ¸¸µé¾î ÁÖ´Â ±â´ÉÀ» Á¦°øÇÏ´Â ÀÌÀ¯´Â ÀÌ MANIFEST.MF ÆÄÀÏÀÌ jar ÆÄÀÏÀÇ Á© »óÀ§ META-INF¶ó´Â Æú´õÀÇ Á© óÀ½¿¡ À§Ä¡ÇØ¾ß ÇÕ´Ï´Ù. ±×·¡¾ß ÀÏ¹Ý jar°¡ ¾Æ´Ñ OSGi ¹øµé·Î ÀνÄÇÕ´Ï´Ù. ±×·¸°Ô ÆÐŰ¡ ÇØÁÖ´Â ±â´ÉÀ» Á¦°øÇÏ´Â °Ì´Ï´Ù.

¹°·Ð MavenÀ» »ç¿ëÇÑ´Ù¸é, À̾߱Ⱑ Á¶±Ý ´Þ¶óÁý´Ï´Ù. À̶§´Â M2Eclipse ±â¹ÝÀÇ ¸ÞÀ̺ì ÇÁ·ÎÁ§Æ® + ¸ÞÀÌºì ¹øµé Ç÷¯±×ÀÎÀÔ´Ï´Ù. ¸ÞÀÌºì ¹øµé Ç÷¯±äÀº bnd ÅøÀ» ±×´ë·Î ¸ÞÀ̺ì Ç÷¯±äÀ¸·Î ¸¸µç °ÍÀε¥, ÀÌ Ç÷¯±äÀÌ ¸ÞÀ̺ì ÆäÀ̽º(phase)¿¡ ³¢¿öÁ®À־, ÇØ´ç mvn package¸¦ ½ÇÇàÇÒ ¶§, ÇØ´ç ÇÁ·ÎÁ§Æ®¸¦ ¹øµéÈ­ ÇÏ´Â ÀÛ¾÷ÀÌ Ãß°¡µË´Ï´Ù. ¹øµéÈ­¶ó°í ÇغÃÀÚ, MANIFEST.MF¸¦ »ý¼ºÇؼ­ Á¦ À§Ä¡¿¡ ³Ö¾îÁÖ´Â °Í »ÓÀÔ´Ï´Ù. µû¶ó¼­ Maven ÇÁ·ÎÁ§Æ® °ü¸® + Ç÷¯±ä Çϳª·Î OSGi °³¹ßÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù.

bnd¿¡¼­ MANIFEST.MF ÆÄÀÏÀ» ¸¸µé±â À§ÇÑ ¼³¸í¼­·Î .bnd ÆÄÀÏÀ» ¸¸µå´Âµ¥, ÀÌ ÆÄÀÏÀº properties ÆÄÀÏ Ã³·³ Å°= °ª ÇüÅ ÀÔ´Ï´Ù. ÀÌ ¶§ »ç¿ëÇÏ´Â Å°´Â Manifest Çì´õ¿Í ºñ½ÁÇÑ °ÍµéÀÌ ¸¹±â ¶§¹®¿¡ Manifest Çì´õ¸¦ ÀÌÇØÇϴµ¥ µµ¿òÀÌ µÇ°í, ÀÌŬ¸³½º Ç÷¯±äÀ¸·Î »ç¿ëÇÒ ¼öµµ À־ .bnd ÆÄÀÏÀ» ¿ìŬ¸¯Çϸé make bundleÀ̶ó´Â ¸Þ´º°¡ »ý±â´Âµ¥ ÀÌ°ÍÀ» Ŭ¸¯ÇÏ¸é ¹Ù·Î MANIFEST.MF ÆÄÀÏ »ý¼ºÇÏ°í ÇØ´ç ÇÁ·ÎÁ§Æ®¸¦ ¹øµé·Î ¸¸µé¾îÁÝ´Ï´Ù. ÀÌŬ¸³½º¿¡¼­ export ÇÏ¸é ±æ°í ±ä ¸¶¹ý»ç Âß µû¶ó°¡¾ß Çϴµ¥ ±×·± ºÒÆíÇÔÀÌ ¾øÁÒ. ±×¾ß¸»·Î OSGi ÇнÀ°ú °³¹ß¿¡ ¸Å¿ì À¯¿ëÇÑ ÅøÀÌ ¾Æ´Ñ°¡ ½Í½À´Ï´Ù.

OSGi¸¦ ÇнÀÇϽô ºÐµé¿¡°Ô PDE º¸´Ù´Â bnd »ç¿ëÀ» ±ÇÇØ º¸¸é¼­ ¸¶¹«¸® ÇÏ°Ú½À´Ï´Ù.

2008/06/22 - [Spring DM/exercise] - bnd¸¦ ¼Ò°³ÇÕ´Ï´Ù.
2008/07/08 - [Screen Casting] - Eclipse¿¡¼­ bnd »ç¿ëÇؼ­ ¹øµé ¸¸µé±â
2008/07/10 - [Spring DM/exercise] - bnd »ç¿ëÇؼ­ API °¡Á®¿À±â(Import)
2008/07/13 - [Spring DM/exercise] - bnd¿¡ ¹øµé ½ÇÇàȯ°æ ¼³Á¤Çϱâ
2008/08/18 - [Spring DM/exercise] - pom.xml¿¡¼­ bnd ¼³Á¤ ÆÄÀÏ ºÐ¸®Çϱâ


½Å°í
top

TAG BndOSGipde

½ºÇÁ¸µ DM 1.2.0 M1 ¹èÆ÷

Spring DM/etc : 2008.09.05 20:43


ÂüÁ¶ : http://www.springframework.org/node/754

´«¿¡ ¶ç´Â º¯°æ »çÇ×Àº µü Çϳª

"½ºÇÁ¸µ MVC ¿¹Á¦, ±×°Íµµ ¾Ö³ëÅ×ÀÌ¼Ç ±â¹ÝÀÇ ¿¹Á¦¸¦ Ãß°¡Çß´Ù."
½Å°í
top

OSGi¿¡¼­ SessionFactory(Hibenate) »ç¿ëÇϱâ

Spring DM/exercise : 2008.08.25 14:59


ÂüÁ¶ : 
http://www.osgi.org/blog/2007/06/osgi-and-hibernate.html
http://notehive.com/wp/2008/07/23/osgi-hibernate-spring-dm-sample/

¹øµé ¼¼ °³¸¸ »ìÆ캸°Ú½À´Ï´Ù.

1. hibernate-class
2. hibernate-session
3. model-a

1. hibernate-class

ÀÌ ³à¼®Àº ÇÏÀ̹ö³×ÀÌÆ® ¶óÀ̺귯¸®¸¦ ¹­¾î³õÀº ¹øµéÀÔ´Ï´Ù. ¾ê°¡ ´ã°í ÀÖ´Â ¶óÀ̺귯¸®´Â ´ÙÀ½°ú °°½À´Ï´Ù.
»ç¿ëÀÚ »ðÀÔ À̹ÌÁö

ÀÌ·¸°Ô ¹­¾î³õÀº°Å ¸»°í ½ºÇÁ¸µ ¹øµé ÀúÀå¼Ò¿¡¼­ ´Ù¿î·ÎµåÇؼ­ ÀÏÀÏÈ÷ ¼³Ä¡Çصµ µÇ¾ß ÇÒ °Í °°Àºµ¥, Àú¹ø¿¡µµ Çغðí, ¿À´Ãµµ ´Ù½Ã ½Ãµµ Çغôµ¥, ¶È°°Àº ¹®Á¦°¡ ¹ß»ýÇÏ°í À־ ½ÇÆÐÇß½À´Ï´Ù. ¾Æ¹«·¡µµ ½ºÇÁ¸µ DM Áö¶ó¿¡ ¿Ã¸®´ø°¡ Æ÷·³¿¡ ¿Ã·Á¼­ ¹°¾îºÁ¾ß ÇÒ °Í °°³×¿ä.

2. hibernate-session

ÀÌ ³à¼®ÀÌ ÇÏ´Â ÀÏÀº ¸¹½À´Ï´Ù. Å×½ºÆ® DB¸¦ ¸¸µé°í, ÇÏÀ̹ö³×ÀÌÆ® ¾Ö³ëÅ×À̼ÇÀ» »ç¿ëÇÑ µµ¸ÞÀΠŬ·¡½ºµéµµ ÀÖ°í, SessionFactoryµµ ¸¸µì´Ï´Ù. ´Ü, SessionFactory¸¦ ¸¸µé ¶§ Á» ƯÀÌÇÏ°Ô com.notehive.osgi.hibernate_samples.session.DynamicConfiguration Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© »ý¼ºÇÕ´Ï´Ù. ½ÇÁúÀûÀ¸·Î SessionFactory¸¦ ¸¸µé¾î ³»´Â Ŭ·¡½ºÀÔ´Ï´Ù. ÀÌ Å¬·¡½ºÀÇ ÇÙ½É ¸Þ¼ÒµåÀÎ createNewSessionFactory() ¸Þ¼Òµå¿¡¼­ JDK Proxy Ŭ·¡½º¸¦ »ç¿ëÇؼ­ ÇÁ·Ï½Ã °´Ã¼¸¦ »ý¼ºÇÏ°í ÀÖ½À´Ï´Ù.

OSGi ¼­ºñ½º·Î com.notehive.osgi.hibernate_samples.session.DynamicConfiguration¸¦ °ø°³ÇÏ°í ÀÖ½À´Ï´Ù.

3. model-a

ÀÌ ¹øµé¿¡´Â ÇÏÀ̹ö³×ÀÌÆ® ¾Ö³ëÅ×À̼ÇÀ» »ç¿ëÇÑ ¸ðµ¨°ú, DAO ±¸Çöü°¡ µé¾îÀÖ½À´Ï´Ù. SessionFactory¿Í TransactionManager¸¦ ³»ºÎ¿¡¼­ ºóÀ¸·Î Á¤ÀÇÇÏ°í Àִµ¥, SessionFactory¸¦ ¸¸µé ¶§ À§¿¡¼­ »ìÆ캻 hibernate-session ¹øµéÀÌ °ø°³ÇÑ com.notehive.osgi.hibernate_samples.session.DynamicConfiguration ¼­ºñ½º¸¦ »ç¿ëÇÕ´Ï´Ù. SessionFactory¸¦ ºó ¼³Á¤¸¸ º¸¸é, hibernate-sessionÀ̳ª model-a³ª µ¿ÀÏÇÕ´Ï´Ù.

´Ü, ÀÌ ºóÀº com.notehive.osgi.hibernate_samples.session.DynamicConfiguration ¼­ºñ½º¸¦ °¡Á®¿É´Ï´Ù. ±×¸®°í DAO¿¡¼­´Â ÇØ´ç ¼­ºñ½º¸¦ »ç¿ëÇؼ­ ¸¸µç SessionFactory¸¦ »ç¿ëÇÏÁÒ. 

±×¸®°í DynamicConfigurationListener ¶ó´Â ºóÀ» µî·ÏÇؼ­ DynamicConfiguration ÀÌ °´Ã¼¿¡´Ù°¡ ÇÏÀ̹ö³×ÀÌÆ® ¾Ö³ëÅ×À̼ÇÀÌ ºÙ¾îÀִ Ŭ·¡½º¸¦ Ãß°¡Çϰųª, Á¦°ÅÇÏ´Â Äڵ带 ³Ö¾îµ×½À´Ï´Ù.

¸¶Áö¸·À¸·Î ÁÖ¸ñÇÒ °ÍÀº osgi.bnd ÆÄÀÏÀÇ ¼³Á¤Àε¥..

Hibernate-Contribution: default; \
    classes="com.notehive.osgi.hibernate_samples.model.a.A1"

ÀÌ·±½ÄÀ¸·Î ¼Ó¼º/°ªÀ» Ãß°¡Çصװí, ÀÌ °ªÀ» hibernate-session ¹øµéÀÇ BundleTracker°¡ Àаí DynamicConfiguration¿¡ ¾Ö³ëÅ×À̼ÇÀÌ ºÙÀº Ŭ·¡½º¸¦ Ãß°¡/Á¦°Å ÇÕ´Ï´Ù. ±× µÚ¿£ ´ç±Ù »õ·Î¿î SessionFactory¸¦ ¸¸µé¾î °¡Áö°Ô µË´Ï´Ù.



ļ...ÀÌÁ¦¾ß OSAF¸¦ µ¹¸± ¼ö ÀÖ´Â(Á¤È®ÇÏ°Õ ÇÏÀ̹ö³×ÀÌÆ® App¸¦ µ¹¸± ¼ö ÀÖ´Â) Ç÷§ÆûÀ» ±¸¼ºÇÏ´Â ½Ç¸¶¸®¸¦ ãÀº °Í °°½À´Ï´Ù.

½Å°í
top

OSGi ÆÐÅ°Áö°¡ ¾Æ´Ï¶ó ¼­ºñ½º¾ß ¸»·Î ÁøÁ¤ÇÑ Dynamic

Spring DM/exercise : 2008.08.20 22:05


¹øµé°ú ¹øµé »çÀÌ¿¡¼­ ÀÚ½ÅÀÌ °¡Áö°í ÀÖ´Â Á¤º¸¸¦ °øÀ¯ÇÏ´Â ¹æ¹ýÀº µÎ °¡Áö ÀÔ´Ï´Ù. ÆÐÅ°Áö ¾È¿¡ Àִ Ŭ·¡½ºµéÀ» °ø°³Çؼ­ »ó´ë¹æÀÌ ³»°¡ °¡Áø Ŭ·¡½ºÀÇ °´Ã¼¸¦ ¸¸µé¾î¼­ »ç¿ëÇÏ°Ô ÇÒ °ÍÀ̳Ä, ¾Æ´Ï¸é ³»°¡ ÆÐÅ°Áö ¸»°í ³»°¡ °´Ã¼¸¦ ¸¸µé¾î¼­ Á¦°øÇÒ °ÍÀ̳Ä. ÈÄÀÚ°¡ ¹Ù·Î ¼­ºñ½º. ÀüÀÚ´Â ÆÐÅ°ÁöÀÔ´Ï´Ù.

Â÷ÀÌ´Â ¸Å¿ì Å®´Ï´Ù. Dynamic Module System¿¡¼­ Dynamic À̶ó°í ÇÒ·Á¸é »ç½Ç »ó ÆÐÅ°Áö °ø°³·Î´Â ¾Æ¹« Àǹ̰¡ ¾ø°í,  Service-Export/Import¸¦ ÇØ¾ß Àǹ̰¡ ÀÖ½À´Ï´Ù. ¿Ö³Ä¸é ¸»ÀÌÁÒ... »ý°¢À» Çغ¸¸é µË´Ï´Ù.

A ¹øµé whiteship ÆÐÅ°Áö¿¡ Whiteship.java Ŭ·¡½º°¡ ÀÖ°í,
B ¹øµé blueship ÆÐÅ°Áö¿¡ Blueship.java Ŭ·¡½º°¡ ÀÖ´Ù°í ÇÏ°Ú½À´Ï´Ù.

ÀÌ ¶§ B ¹øµé¿¡¼­ A ¹øµé¿¡ ÀÖ´Â Whiteship ŸÀÔÀÇ °´Ã¼°¡ ÇÊ¿äÇÕ´Ï´Ù. ±×·¡¼­ A ¹øµé¿¡¼­ Export-Package·Î whiteship ÆÐÅ°Áö¸¦ µî·ÏÇÏ°í, B ¹øµé¿¡¼­´Â Import-Package·Î whieshipÀ» µî·ÏÇß½À´Ï´Ù. ±×·± ´ÙÀ½ B ¹øµé¿¡¼­ Whiteship ŸÀÔ °´Ã¼¸¦ ¸¸µé¾î¼­ »ç¿ëÇÕ´Ï´Ù.

ÀÚ A ¹øµéÀÇ Whiteship.java Ŭ·¡½º°¡ ¹Ù²¼½À´Ï´Ù. ¾î¶±ÇÒ°Ç°¡¿ä? A ¹øµéÀ» ´Ù½Ã ¼³Ä¡ÇÕ´Ï´Ù. B ¹øµé¿¡¼­ »ç¿ëÇÏ°í ÀÖ´Â Whiteship ŸÀÔ °´Ã¼´Â¿ä?? ±×´ë·ÎÁÒ. ¹¹ º¯ÇÑ°Ô ¾ø½À´Ï´Ù.  ¹¹°¡ µ¿ÀûÀ¸·Î ¹Ù²îÁÒ? ¹Ù²î´Â°Å ¾øÁÒ? ÀÌÁ¦ ¹º°¡¿ä? ÀÌÁ¦ Dynamic Àΰ¡¿ä? ¾Æ´ÏÁÒ.

ÆÐÅ°Áö ´ë½Å ¼­ºñ½º·Î ´Ü¾î¸¦ ¹Ù²ã¼­ ´Ù½Ã »ý°¢Çغ¸½Ã¸é ¹º°¡°¡ ´Þ¶óÁý´Ï´Ù.

´Ù½Ã, (¼­ºñ½º¸¦ »ç¿ëÇÑ´Ù´Â °¡Á¤ÇÏ¿¡) A ¹øµéÀÇ Whiteship.java Ŭ·¡½º°¡ ¹Ù²¼½À´Ï´Ù. A ¹øµéÀ» ´Ù½Ã ¼³Ä¡Çؾ߰ڱº¿ä. ÀÌ°Ç ´ç¿¬ÇÑ °Ì´Ï´Ù. ¼³¸¶ A ¹øµéµµ ´Ù½Ã ¼³Ä¡Çϴµ¥ ÀÌ°Ô ¹¹°¡ µ¿ÀûÀ̾ß??? ¶ó°í »ý°¢ÇϽô ºÐÀº ¾È °è½ÃÁÒ? ¸¸¾à¿¡ ±×·¯¸é ±×°Ç Á» ÄÚ¸ÞµðÀÔ´Ï´Ù. ¤»¤» ¾Æ¹«Æ° Àâ´ãÀ̾ú±¸¿ä. ÀÚ. ÀÌ ´ÙÀ½¿£ ¾î¶² ÀÏÀÌ ¹ú¾îÁú±î¿ä? B ¹øµéÀÌ »ç¿ëÇϸé Whiteship.java ŸÀÔÀÇ ¼­ºñ½º±îÁö ¹Ù²ò´Ï´Ù. ļ~~ ³î¶øÁÒ? ¾î¶»°Ô ¹Ù²î³Ä±¸¿ä? A ¹øµéÀÌ Á×À» ¶§ ÀڱⰡ µî·ÏÇÑ ¼­ºñ½ºµéµµ ÀüºÎ Á×ÀÔ´Ï´Ù. ±×·³ B ¹øµéÀÌ »ç¿ëÇÏ°í ÀÖ´ø Whiteship ŸÀÔÀÇ ¼­ºñ½ºµµ Á×¾ú°ÚÁÒ. ±×·± ´ÙÀ½ A ¹øµéÀÌ ´Ù½Ã »ì¾Æ³ª¸é, ¼­ºñ½º¸¦ µî·ÏÇÏ°í ±×·³ ±× ¼­ºñ½º¸¦ ±â´Ù¸®°í ÀÖ´ø B ¹øµéÀÌ ´Ù½Ã Whiteship ŸÀÔÀÇ ¼­ºñ½º¸¦ »ç¿ëÇÏ´Â °Ì´Ï´Ù.

º¹ÀâÇÏÁÒ? ³×.. »ç½Ç ÀÌ·¸°Ô ÇØÇÇÇÑ ½Ã³ª¸®¿À´ë·Î Èê·¯°¡Áö ¾ÊÀ» °¡´É¼ºµµ ¸¹½À´Ï´Ù. ¼³Á¤Çϱ⠳ª¸§ÀÔ´Ï´Ù. ´ë±â ½Ã°£ ¼³Á¤À̶󵢰¡. ¼­ºñ½ºÀÇ Çʼö ¿©ºÎ ¼³Á¤À̶󵢰¡. µ¢µ¢µ¢.

±×¸®°í ¶Ç ÀÖ½À´Ï´Ù.

ÆÐÅ°Áö·Î export/import  ÇÒ ¶§´Â impl ±îÁöµµ export ÇØÁà¾ß°ÚÁÒ? °´Ã¼¸¦ »ý¼ºÇÏ·Á¸é ¾îÂ÷ÇÇ ±¸ÇöÇÑ Å¬·¡½º±îÁö ¾Ë¾Æ¾ß ÇÒÅ״ϱî¿ä. ±×·±µ¥ ¼­ºñ½º·Î °ø°³ÇÒ ??´Â ±¸Çöü±îÁø ¾È ¾Ë·ÁÁ൵ µË´Ï´Ù. ±¸ÇöÀº °¨Ãß°í ÀÎÅÍÆäÀ̽º¸¸ °ø°³ÇÒ ¼ö Àִ°ÅÁÒ. ļ~

Anyway!! ÆÐÅ°Áö¸¦ »ç¿ëÇϴ°Šº¸´Ù´Â ¼­ºñ½º¸¦ »ç¿ëÇÏ´Â°Ô ÁøÁ¤ÇÑ Dynamic À̶ó´Â°Å ¾Æ½Ã°ÚÁÒ?

±×·³? ¼­ºñ½º¸¸ ¾²Áö ÆÐÅ°Áö´Â ¿Ö Àִ°žß?? ¶ó´Â »ý°¢.. µå½ÃÁÒ??

Àúµµ Á» »ý°¢À» Çغôµ¥¿ä. GenericDao °°Àº Ŭ·¡½ºÀÇ ¼­ºñ½º°¡ ÇÊ¿äÇÑ°¡¿ä? ±×³É »ó¼ÓÇؼ­ ¾²¸é ±×¸¸ÀÌÁÒ? Áï ÀÌ·¸°Ô ÆÐÅ°Áö·Î °ø°³ÇÒ °ÍÀΰ¡ ¼­ºñ½º·Î °ø°³ÇÒ °ÍÀ̳Ĵ ¿ëµµ¿¡ µû¶ó Á» ´Þ¶óÁú °Í °°½À´Ï´Ù. Ŭ·¡½º°¡ ÇÊ¿äÇϸé ÆÐÅ°Áö·Î, °´Ã¼°¡ ÇÊ¿äÇÏ¸é ¼­ºñ½º·Î. ±ÛÃÝ? ±×·±°Å °°ÁÒ? ¤¾¤¾; Àúµµ Àß ¸ô¶ó¿ä.

½Å°í
top

Èì... Hibernate Annotation ¹øµé ¿ÖÀÌ·¡ ¿Ö ¤Ð.¤Ð

Spring DM/exercise : 2008.08.19 12:20


osgi> diag 13
initial@reference:file:com.springsource.org.hibernate.annotations-3.3.1.ga.jar/ [13]
  Constraints from the fragment conflict with the host: Import-Package: org.apache.commons.logging; version="[1.1.1,2.0.0)"
  Missing Constraint: Fragment-Host: com.springsource.org.hibernate; bundle-version="[3.2.6.ga,3.3.0)"

osgi> 

Èì... ÀÌ»óÇϳ×. host(org.hibernate) ¶û dep Ãæµ¹ÀÌ ³­´Ù´Âµ¥, hostµµ commons.logging 1.1.1 »ç¿ëÇÏ°í, ÀÌ ³à¼®µµ 1.1.1 ÂüÁ¶Çϴµ¥, ¹¹°¡ Ãæµ¹ÀÌ ³­´Ù´Â°Å¾ä ¤Ð.¤Ð

¿Ö±×·¯´Ï.. ³»°¡ ³Î ¸¸µé¾îÁÙ±î??
½Å°í
top

pom.xml¿¡¼­ bnd ¼³Á¤ ÆÄÀÏ ºÐ¸®Çϱâ

Spring DM/exercise : 2008.08.18 15:29


»ç¿ëÀÚ »ðÀÔ À̹ÌÁö


bnd ¼³Á¤ ÆÄÀÏÀ» pom.xml¿¡¼­ ºÐ¸®ÇÏ°í pom.xmlÀÇ bnd Ç÷¯±ä ¼³Á¤Àº ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÕ´Ï´Ù.

            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <version>1.4.0</version>
                <configuration>
                    <instructions>
                        <_include>-osgi.bnd</_include>
                    </instructions>
                </configuration>
            </plugin>       

pom.xmlÀº ÈξÀ °¡º­¿öÁö°í, bnd ¼³Á¤°ú pom.xmlÀ» À¯Áöº¸¼ö ÇÒ ¶§µµ ÀÌ·¸°Ô ³ª´² µÎ´Â°Ô ÁÁÀ» µí ÇÕ´Ï´Ù.
½Å°í
top

TAG Bndmaven

OSGi ±â¹Ý ÇÁ·¹ÀÓ¿öÅ©°ú ¾ÖÇø®ÄÉÀÌ¼Ç ¾ÆÅ°ÅØó ÁøÈ­ °úÁ¤

Spring DM/exercise : 2008.08.14 18:11


´ëü ¾î¶»°Ô ¸ðµâÈ­ ÇØ¾ß ÇÒ±î... 
¾î¶»°Ô ³ª´­ °ÍÀΰ¡.. 
¾î¶»°Ô ±¸¼ºÇØ¾ß ¹øµé°£ÀÇ »óÈ£ÂüÁ¶(CD)¸¦ ¾ø¾Ù ¼ö ÀÖÀ»±î..
¾î¶»°Ô ³ª´²³ö¾ß °³¹ßÀ» ÇÒ ¶§ ¿©·¯ ¹øµéÀ» µÚÀû°Å¸®Áö ¾ÊÀ»±î.. 
¹øµéÇïÀÌ ¹ß»ýÇÏÁö ¾Ê°Ô ÇÏ·Á¸é...

À§¿Í °°Àº °í¹ÎµéÀº OSGi¿Í ½ºÇÁ¸µ DMÀ» ÇнÀÇÏ´Ùº¸¸é, ÀÚ¿¬½º·¹ ¸Â´Úµå¸®°Ô µÇ´Â ¹®Á¦µéÀÔ´Ï´Ù.

ÀÌ Áú¹®¿¡ ´ëÇÑ ´äÀº ¸ð¸£°Ú½À´Ï´Ù. »ç½Ç ´äÀº ÀÖÁÒ. "Àß". ±×·¯·Á¸é, ¸¹ÀÌ ½ÇÇèÀ» ÇغÁ¾ß ÇÕ´Ï´Ù. ¶§¸¶Ä§ ÀúÇÑÅÙ ¾ÆÁÖ ÁÁÀº ½ÇÇèü°¡ ÀÖ½À´Ï´Ù. ÀÓ»ó ½ÇÇè ÇÁ·ÎÁ§Æ®¶ö±î¿ä.¤¾¤¾ ½ºÇÁ¸µ ÇÏÀ̹ö±â¹ÝÀ¸·Î ¼¼ ´Þ¿¡ °ÉÃļ­ ¸¸µç ½Ã½ºÅÛÀÌ Çϳª ÀÖ½À´Ï´Ù. ±Ô¸ð°¡ Å©Áöµµ ÀÛÁöµµ ¾Ê°í ÁÁ½À´Ï´Ù. µµ¸ÞÀÎ ¸ðµ¨ÀÌ ÇÑ 40°³ Á¤µµµÇ´Â ÇÁ·ÎÁ§Æ®ÀÔ´Ï´Ù. ºñÁî´Ï½º ·ÎÁ÷µµ Æ÷ÇÔÇÏ°í À־ ¼­·Î ¾ôÈ÷°í ?ùÇôÀÖÁö¿?.

ÀÌ ÇÁ·ÎÁ§Æ®¿¡¼­ OSAF15¿¡ µé¾î°¥ Äڵ带 ºÐ¸®Çس½À´Ï´Ù. ±×°Ô 1´Ü°è¿´ÁÒ. ºÐ¸®Çس½Áö´Â ²Ï µÆÁö¸¸, ÁÖ¼®À̶û Å×½ºÆ® Äڵ带 Ãß°¡ÇÏ´À¶ó ½Ã°£ÀÌ Á» Áö¿¬µÆ½À´Ï´Ù. ¾îÁ¦ºÎ·Î ±× ÀÛ¾÷µµ ³¡³µ½À´Ï´Ù. 1.5 ´Ü°è¶ö±î¿ä. Á¤¸®ÇÏ´Â ´Ü°è´Â ±×·¸°Ô ³¡³µ½À´Ï´Ù.

ÀÌÁ¦´Â º»°ÝÀûÀ¸·Î 2´Ü°è·Î µ¹ÀÔÇؼ­ ÂÉ°µ °ÍÀ» Àû¿ëÇغÁ¾ß ÇÕ´Ï´Ù. ±×·¡¼­ °ËÁõÀÌ µÇ´Â°ÅÁÒ. ÀÏ´ÜÀº OSGiÈ­ ÇÏÁö ¾Ê¾Ò´ø ±âÁ¸ ½Ã½ºÅÛ°ú µ¿ÀÏÇÏ°Ô µ¿ÀÛÇϴ°ÍÀ» ¸ñÇ¥·Î Àû¿ëÇÕ´Ï´Ù. 

2´Ü°è°¡ Àß µ¹¾Æ°¡¸é, ±× µÚ¿£ ÂÉ°µ °ÍÀ» µ¹¸®´Â »óÅ¿¡¼­ OSAF ¹øµé¸¸ ¼öÁ¤Çؼ­ ¾÷µ¥ÀÌÆ®¸¦ ÇÏ´Â °Ì´Ï´Ù. ÀÌ°Ô ¸¶Áö¸·ÀÎ 3´Ü°èÀÔ´Ï´Ù.

¿À´ÃÀº 2´Ü°è¿¡ ¸· µé¾î¼± ³¯·Î, ÄÚµùÀº º°·Î ¸øÇÏ°í ³«¼­¿Í ±×¸²À» ±×¸®°í À¥ ¼­ÇÎÀ» Çϸ鼭 ´Ù¸¥ ÀڷḦ ã´Âµ¥ ½Ã°£À» ¸¹ÀÌ º¸³Â½À´Ï´Ù. ´ÙÇàÈ÷ ¾î´À Á¤µµ ¼º°ú°¡ ÀÖ¾ú½À´Ï´Ù.

»ç¿ëÀÚ »ðÀÔ À̹ÌÁö
óÀ½¿¡ ±×¸° ±×¸²ÀÔ´Ï´Ù. OSAF15 ¹øµé ÀÚü°¡ ³Ê¹« Ä¿¼­, ±× ¾È¿¡ µé¾îÀÖ´Â ¸î °³ÀÇ ÆÐÅ°Áö¸¦ º°µµÀÇ ¸ðµâ·Î ÂÉ°³´Â °É ±¸»óÇÏ¿© ±×¸° °Ì´Ï´Ù. OSAF, OSAF-App ÀÌ·¸°Ô µÑ·Î ÂÉ°³°í, ÀÏ¹Ý App ¹øµé°ú OSAF-App ¹øµéÀ» WAR ¹øµé¿¡¼­ ÂüÁ¶ÇÏ´Â °É ±×¸®´Ù°¡.. ¹®Á¦¸¦ ¹ß°ßÇß½À´Ï´Ù. ±×°Ô ¹Ù·Î ¾Æ·¡¿¡ ÀÖ´Â S/F SessionFactory ÀÔ´Ï´Ù.

Àú ¶§´Â ¾ÆÁ÷ ¹®Á¦¸¦ ¹ß°ßÇߴٱ⠺¸´Ù.. ¹¹¶ö±î.. ³¿»õ°¡ ³ª°í ÀÖ¾ú´Ù°í ÇÒ±î¿ä.. Àú ¶© ´Ü¼øÇÏ°Ô SessionFactory¸¦ »ç¿ëÇÑ´Ù°í¸¸ »ý°¢ÇßÁö SessionFactory¿¡¼­ Àú ¹øµéµé ¾È¿¡ µé¾îÀÖ´Â ¸ðµ¨À» ÂüÁ¶ÇØ¾ß ÇÑ´Ù°í.. Áï »óÈ£ÂüÁ¶°¡ ¹ß»ýÇϸ®¶ó°ï ¹ÌÃÄ »ý°¢À» ¸øÇÏ°í ÀÖ¾ú½À´Ï´Ù.

»ç¿ëÀÚ »ðÀÔ À̹ÌÁö
(¿©·¯ »öÀÇ Çü±¤ÆæÀ» ¹ß°ßÇÏ°í, Àß ³ª¿À³ª È®ÀÎÀ» Çغ¸´Â ±×¸²ÀÌ Á» ¸ÚÀÖ¾î Á³½À´Ï´Ù.¤»¤»¤»¤»)

µÎ ¹ø° ±×¸²ÀÔ´Ï´Ù. ù ¹ø°¿Í ºñ½ÁÇÏ°Ô OSAF¿¡¼­ À̹ø¿£ Security ºÎºÐÀ» ¶¼¾î ³»¾ß°Ú´Ù´Â »ý°¢ÀÌ µé¾ú½À´Ï´Ù. OSAF-App¿¡´Â User, Role, Audit°ú °°Àº ÀÎÁõ, ±ÇÇÑ °ú °ü·ÃµÈ ±âº» µµ¸ÞÀεé°ú ±× µµ¸ÞÀÎÀÌ »ç¿ëÇÏ´Â AuditÀ̶ó´Â Ŭ·¡½º°¡ ÀÖ¾ú½À´Ï´Ù. ±×¸®°í User, Role¿¡ ´ëÇÑ Dao, Service, Controller ±îÁöµµ µé¾îÀÖ¾úÁÒ.

¹®Á¦´Â Security°¡ Àú ³à¼®µéÀ» »ç¿ëÇÏ°í ÀÖ´Ù´Â °Ì´Ï´Ù. User, UserDao¸¦ »ç¿ëÇÕ´Ï´Ù. ±×·¸°Ô µÇ¸é OSAF¿Í OSAF-App µÎ ¹øµéÀÌ CD¿¡ ºüÁý´Ï´Ù. ±×·¡¼­ Security¸¦ »©³»¸é µÉ ÁÙ ¾Ë°í Àú·¸°Ô OSAF-Security¸¦ »©³»±â·Î °áÁ¤.

½ÇÁ¦ ÄÚµå ÀÛ¾÷À» Á» ÇÏ´Ù°¡ º¸´Ï... Å©Çä!!!! osaf.service¿¡¼­ osaf.security¸¦ ÂüÁ¶ÇÏ°í ÀÖ¾ú½À´Ï´Ù. ÀÌ·¯¸é ÀÌ°Å ¶§¾î³½´Ù°í Çؼ­ ÇØ°áµÉ ¹®Á¦°¡ ¾Æ´Ñ°Ô µÇ´Â°Å¶ó.. ´Ù½Ã °í¹Î¿¡ ºüÁü...

»ç¿ëÀÚ »ðÀÔ À̹ÌÁö
(À̶§ºÎÅÍ ±×¸²¿¡ Á» ½Å°æÀ» ¾²±â ½ÃÀÛÇßÁÒ.)

¸Ç ¿ÞÂÊ¿¡ X Ç¥¸¦ Ä£ ºÎºÐÀÌ ¹Ù·Î ±× ÁÂÀýÇÏ´Â ¼ø°£ÀÔ´Ï´Ù.

¿©Â÷ÀúÂ÷Çؼ­ SessionFactory¿¡ ´ëÇÑ ½Ç¸¶¸®¸¦ ã¾Ò°í, ´Ù½Ã OSAF´Â Á» Å©Áö¸¸, ÇÑ µ¢¾î¸®·Î °¡±â·Î Çß½À´Ï´Ù.
»ç¿ëÀÚ »ðÀÔ À̹ÌÁö
(³×¸ð¿Í µ¿±×¶ó¹Ì¸¦ ±×¸®´Â ¿¬½ÀÀ» ÀÚÁÖ Çؾ߰ڽÀ´Ï´Ù.)

½ÇÁ¦ OSAF ³»ºÎ¿¡¼± Àú·± ¼øȯ ±¸Á¶´Â ¾Æ´Õ´Ï´Ù. baseÂÊ¿¡ ÆÐÅ°Áö¸¦ ¼¼¼¼ÇÏ°Ô ³ª´²µ×±â ¶§¹®¿¡ ÆÐÅ°Áö ¼øȯ ÂüÁ¶´Â ¹ß»ýÇÏÁö ¾Ê½À´Ï´Ù. CD´Â Çϳªµµ ¾ø½À´Ï´Ù.

¿À´ÃÀº ¿©±â±îÁö ±¸»óÇÏ°í ¸¶Ä¡°í ³»ÀÏ ´Ù½Ã ÀçµµÀüÇؾ߰ڽÀ´Ï´Ù. "Àß" ³ª´©´Â ¹æ¹ýÀ» ã±â¶õ ÀÌ·¸°Ô Èûµé°í Àç¹Õ´Â ÀÏÀÌ´õ±º¿ä. ļļļ. 
½Å°í
top

TAG OSAFOSGi

OSGi¿¡¼­ HibernateÀÇ SessionFactory ¹®Á¦

Spring DM/exercise : 2008.08.14 15:34


´ëü ¾î¶»°Ô ÇØ¾ß ÇÒ±î? ¹»? @Entity ´Þ·ÁÀִ Ŭ·¡½ºµéÀÌ ¿©·¯ ¹øµéµé¿¡ ºÐÆ÷µÇ¾î ÀÖ°í, ¾ÖÇø®ÄÉÀ̼ÇÀÌ µ¹¾Æ°¡´Â µµÁß¿¡ ¹øµéÀÌ Ãß°¡µÇ°í, ¾ø¾îÁö°í, ´Ù½Ã ¼³Ä¡µÇ°í, ¾÷µ¥ÀÌÆ® µÇ´Â ¿ÍÁß¿¡ SessionFactory´Â ±×¿¡ µû¶ó °è¼Ó ¹Ù²¸¾ßÇÕ´Ï´Ù.

SpringÀÌ Á¦°øÇÏ´Â AnnotationSessionFactoryBean Ŭ·¡½º·Î ¸¸µå´Â SessionFactory´Â Á¤ÀûÀÔ´Ï´Ù. ÇÑ ¹ø ¸¸µé°í ´Ù¸¥ ºóµéÀÌ ÁÖÀԹ޾Ƽ­ »ç¿ëÇϴµ¥, µµÅë ¾î¶»°Ô º¯°æÇØ¾ß ÇÒÁö ¸ð¸£°Ú½À´Ï´Ù.

ÀÌ°Ô ¹®Á¦´Â OSGi, Hibernate, Spring DM, JPA¸¦ »ç¿ëÇÏ·Á´Ù º¸¸é ÀÚ¿¬½º·´°Ô ´Ù°¡¿À´Â ¹®Á¦ÀÔ´Ï´Ù. Àú ¸»°íµµ ÀÌ¹Ì ¿¹ÀüºÎÅÍ ÀÌ ¹®Á¦¸¦ ´ç¸éÇÑ ¿©·¯ °³¹ßÀÚµéÀÌ ÀÖ¾ú½À´Ï´Ù. Áö±Ý ÀÌ ¼ø°£ "³ª´Â iBatis¸¦ ¾²°í À־ ´ÙÇàÀ̾ß!!!" ¶ó°í ¿ÜÄ¡°í °è½Å ºÐÀÌ È¤½Ã °è½Å°¡¿ä??? ¤¾¤¾¤¾ ¾î¸²¾ø½À´Ï´Ù. ÀÌ ¹®Á¦¿¡¼­ ¸ø ¹þ¾î³³´Ï´Ù. SessionFactory ´ë½Å¿¡ SqlMapClient·Î ³õ°í »ý°¢ÇØ º¸½Ã¸é ¶È°°½À´Ï´Ù.

¼³Á¤ ÆÄÀÏÀ» ¹øµé Çϳª¿¡ ÀüºÎ ³Ö¾î ³õ°í(¾Ö³ëÅ×ÀÌ¼Ç ºÙÀÎ µµ¸ÞÀÎ °´Ã¼µéÀ» ¸ðµÎ ÇÑ ¹øµé¿¡ ³õ°í), ±×°É·Î SessionFactory ¸¸µé¸é µÇÁö ¾Ê°Ú³Ä±¸¿ä? ¾Æ´Ï.. ¹Ì·¡¿¡ Ãß°¡µÉ ¹øµé¿¡ µé¾îÀÖ´Â µµ¸ÞÀÎÀ» ¾î¶»°Ô Áö±Ý Ãß°¡ÇÒ ¼ö°¡ ÀÖ³ª¿ä? ¹éÅõ´õÇ»ÃÄ°¡ ¾Æ´ÑÀÌ»ó ºÒ°¡´ÉÇÒ »Ó´õ·¯, ±×·² ¹Ù¿£ ¾Æ¿¹ OSGi ¹øµé·Î ³ª´©Áö ¸»°í ±×³É ±âÁ¸ÀÇ ¾ÖÇø®ÄÉÀ̼Çó·³ »ç¿ëÇÏ´Â°Ô ÁÁÀ» °Å °°½À´Ï´Ù. ¹¹ Àá±ñ ¼­¹öÁ» ²°´Ù Å°ÁÒ ¹¹.¤¾¤¾

´ÙÇàÈ÷µµ ÀÌ ¹®Á¦¿¡ ´ëÇÑ ÇØ°áÃ¥ÀÌ ³ª¿Ô°í, ±×°É ±¸ÇöÇÑ ¿¹Á¦±îÁöµµ Á¦°øÇÏ°í ÀÖ½À´Ï´Ù.
http://notehive.com/wp/2008/07/23/osgi-hibernate-spring-dm-sample/
Àü ÀÌ·± °³¹ßÀÚ°¡ Á¤¸» ¸ÚÁ®º¸ÀÔ´Ï´Ù. À̷¼­¸¦ º¸´Ï±î, 88/89³â¿¡ ÀÎÅϽ± ÇÏ°í, 92³âµµºÎÅÍ °è¼Ó °³¹ßÀ» ÇØ¿Â »ç¶÷À̳׿ä. ±×·³.. Áö±Ý.. 16³â°.. ļ;;;; Àå³­ ¾Æ´Ï¼É!!!
½Å°í
top

¹øµéÀ» ãÀ¸·Á¸é.. http://www.springsource.com/repository/

Spring DM/etc : 2008.08.13 12:04


http://www.springsource.com/repository/ ÇÊ¿äÇÑ ¹øµéÀ» ãÀ¸·Á¸é ¿ÞÂÊ »çÀÌÆ®¿¡ °¡¼Å¼­ °Ë»öÇÏ½Ã¸é µË´Ï´Ù. ´Ù¼Ò º¹ÀâÇÑ dep ±¸Á¶¸¦ °¡Áö°í ÀÖ´Â ÇÏÀ̹ö³×ÀÌÆ®µµ Àß Á¤¸®µÇ¾î ÀÖ¾ú½À´Ï´Ù.

»ç¿ëÀÚ »ðÀÔ À̹ÌÁö

À§¿¡ ¸µÅ©¿¡¼­ ¹øµé ÆÄÀÏÀ» ¹Ù·Î ´Ù¿î·Îµå ÇÒ ¼ö ÀÖÀ¸¸ç, MavenÀ» »ç¿ëÇÒ ¶§´Â ¾Æ·¡ dependency µ¢¾î¸®¸¦ pom.xml¿¡ Ãß°¡ÇÏ¸é µË´Ï´Ù. ±×¸®°í ÀÌ ¹øµéÀÌ ÀÇÁ¸ÇÏ´Â ´Ù¸¥ ¹øµéµéÀÇ ¸µÅ©±îÁö È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÇÏ´ÜÀÇ Required Dependencies ¹Ù¸¦ ÆîÄ¡¸é ÇØ´ç ¸µÅ©·Î ¹Ù·Î À̵¿ÇÒ ¼ö ÀÖÁÒ.
»ç¿ëÀÚ »ðÀÔ À̹ÌÁö

ÀÌ·¸°Ô À§ »çÀÌÆ®ÀÇ µµ¿òÀ¸·Î OSAF 1.5ÀÇ ¸ðµç ÀÇÁ¸¼ºÀ» ÇØ°áÇؼ­ ACTIVE »óÅ·Π¸¸µé ¼ö ÀÖ¾ú½À´Ï´Ù. 

»ç¿ëÀÚ »ðÀÔ À̹ÌÁö

Â÷±Ù Â÷±Ù ÁøÇàÀÌ µÇ¾î °©´Ï´Ù. ¸ÖÁö ¾Ê¾Ò½À´Ï´Ù. ÇÏÁö¸¸, ÇÑ ¹ß¦ ¹°·¯³ª¾ß ÇÒ ÀÏÀÌ »ý°å±º¿ä. 

1. OSAF 1.5 ¸ðµâ¿¡¼­ ½ºÇÁ¸µ DMÀÌ ÇØÁÙ ÀÏÀÌ »ý°Ü¼­, ºó ¸î °³¸¦ ¼­ºñ½º·Î µî·ÏÀ» Çؾ߰ڽÀ´Ï´Ù. ÄÄÆ÷³ÍÆ® ½ºÄµ È®ÀÎ Á» Çؾ߰ڳ׿ä. ÄÄÆ÷³ÍÆ® ½ºÄµ±îÁö µÇ¸é...

2. ´ÙÀ½Àº ¿¹Á¦ ¸¸µé¾î¼­ Àú ¹øµéÀÌ Á¦°øÇÏ´Â ¼­ºñ½º¿Í ÆÐÅ°Áö¸¦ Á¦´ë·Î ¾µ ¼ö ÀÖ´ÂÁö È®ÀÎÇÏ°í..

3. °£´Ü Æ©Å丮¾ó ¸¸µé°í...

4. OSAF À¥ »çÀÌÆ®Á» ²Ù¹Î ´ÙÀ½..

5. ÃÖÁ¾ ¹èÆ÷!!!

¸ÖÁö ¾Ê¾Ò½À´Ï´Ù. ¹èÆ÷ÇÑ µÚ¿¡´Â Á» ´õ ½ÉÈ­ ÀÛ¾÷À» ÁøÇàÇÒ »ý°¢ÀÔ´Ï´Ù.

6. ±âÁ¸ ½Ã½ºÅÛ OSGiÈ­ Çϱâ

7. ÄÚµå Á¦³Ê·¹ÀÌÅÍ ¸¸µé±â

8. ÀÌŬ¸³½º Ç÷¯±ä ¸¸µé±â
½Å°í
top

¸ÆºÏ¿¡¼­µµ Spring DM À¥ ¹øµé ¼³Ä¡ ¼º°ø

Spring DM/exercise : 2008.07.31 00:03


ÀÎÁõ¼¦ 1. ¹øµé ¸ñ·Ï

»ç¿ëÀÚ »ðÀÔ À̹ÌÁö

ÀÎÁõ¼¦ 2. simple-web-app ù È­¸é

»ç¿ëÀÚ »ðÀÔ À̹ÌÁö
ÀÎÁõ¼¦ 3. ¼­ºí¸´

»ç¿ëÀÚ »ðÀÔ À̹ÌÁö
ÀÎÁõ¼¦ 4. JSP´Â.. ¶Ç ½ÇÆÐ;;

»ç¿ëÀÚ »ðÀÔ À̹ÌÁö
Èì... ¸®¼Ò½º°¡ Á¦´ë·Î µî·ÏÀÌ ¾È µÇÀִ°ÇÁö.. ¿øÀÎÀ» Á» ã¾ÆºÁ¾ß°Ú½À´Ï´Ù.


¸ÆºÏ¿¡¼­ Spring DM À¥ ¹øµé µ¹¸°°Ô ¿Ö ±â»Ú³Ä¸é¿ä;; ¾È Çغ¸½Å ºÐµéÀº ¸ô¶ó¿ä... À©µµ¿¡¼­ µ¹¸®´Â Equinox(ÁÙ¿©¼­ À©E)¶û ¸Æ¿¡¼­ µ¹¸®´Â Equinox(¸ÆE)°¡ Á» Â÷ÀÌ°¡ ³ª´Â °Í °°½À´Ï´Ù. ¹ö±× °°Àºµ¥, ±×°Ô ¸ÆE ÀÇ ¹ö±×ÀÎÁö, Spring DM web extenderÀÇ ¹ö±× ÀÎÁö, catalinaÀÇ ¹ö±×ÀÎÁö µµÅë..Àß ¸ð¸£°Ú½À´Ï´Ù. 

spring web extender°¡ catalina ¹øµéÀÌ Á¦°øÇÏ´Â ¼­ºñ½º¸¦ ÇÊ¿ä·Î Çϴµ¥, ¸¸¾à¿¡ catalina º¸´Ù ¸ÕÀú, start ½ÃÅ°¸é ´ç¿¬È÷.. resolved »óÅ·Π¸ø°¡°í ÇØ´ç ¼­ºñ½º°¡ µé¾î¿Ã ¶§±îÁö Á» ±â´Ù¸³´Ï´Ù. ±×·¯´Ù°¡ ƯÁ¤ ½Ã°£ÀÌ µÇ¸é ŸÀӵǼ­ ³Ñ¾î°©´Ï´Ù. ÀÌ°Ô Á¤»óÀÌÁÒ. À©E¿¡¼± ÀÌ·¸°Ô Á¤»óÀûÀ¸·Î µ¿ÀÛÇÕ´Ï´Ù. ±×·¡¼­ ¼³Ä¡ÇÒ ¹øµé ¸ñ·Ï¿¡¼­ spring web extender °¡ catalina º¸´Ù À§¿¡ À־(Áï ¸ÕÀú start¸¦ ½ÃµµÇÏ°ÚÁÒ.) »ó°ü¾ø½À´Ï´Ù. ±â´Ù¸®´Ù º¸¸é, ´Ù¸¥ ¹øµéµé ¸ðµÎ Active »óÅ°¡ µÇ°í, spring web extender¸¸ Resolved »óÅ·Π³²¾ÆÀÖ½À´Ï´Ù.(catalinaµµ Active »óÅ°¡ µÆÀ¸´Ï web extender°¡ ÇÊ¿ä·Î ÇÏ´Â ¼­ºñ½º°¡ Á¦°ø µÇ¼­ »óÅ°¡ º¯ÇÑ°Ì´Ï´Ù.) ±×·¯¸é... ÀÌÁ¦ web extender¸¸ ´Ù½Ã start ¸í·É¾î·Î Active »óÅ·Π¸¸µé¾î ÁÖ¸é µË´Ï´Ù.

ÇÏÁö¸¸.... ¸ÆE¿¡¼±, ÇÑ ¹ø Çغ¸¼¼¿ä~ Çغ¸¼Ì¾î¿ä? ¾È Çغ¸¼ÌÀ¸¸é ¸»À» ÇÏÁö¸¶¼¼¿ä.

»ç¿ëÀÚ »ðÀÔ À̹ÌÁö
»ç¿ëÀÚ »ðÀÔ À̹ÌÁö


Âü.. Å×½ºÆ® ȯ°æÀº. Eclipse 3.4. Spring DM 1.1.1 ÀÔ´Ï´Ù.

ps: Bad case¿¡ °É·ÈÀ» ¶§ Good case¸¦ ã¾Æ ºüÁ® ³ª°¡´Â ¹æ¹ýÀÌ ÀÖ±ä Àִµ¥.. ±×°Ç ºñ¹ÐÀÔ´Ï´Ù. ļļļ
½Å°í
top

Spring DM 1.1.1 ¹èÆ÷

Spring DM/etc : 2008.07.29 23:44


http://www.springframework.org/node/718

¹ö±×µéÀ» Á» ¼öÁ¤Çß³ªº¾´Ï´Ù. ´«¿¡ È® µé¾î¿À´Â ¹º°¡´Â ¾ø¾î¼­ ÄÚ¸àÆ® ÇÒ ²² ¾ø³×¿ä;;
½Å°í
top

½ºÇÁ¸µ DM ¸ðµâ¿¡¼­ ´ÜÀ§ Å×½ºÆ®Çϱâ(¸µÅ©)

Spring DM/etc : 2008.07.23 08:53


http://springtips.blogspot.com/2008/07/unit-test-with-spring-dynamic-modules.html

Á¦¸ñÀº ´ÜÀ§ Å×½ºÆ®Àε¥, »ç½Ç OSGi ȯ°æ¿¡¼­ ¹øµé·Î ¼³Ä¡ÇÑ ´ã¿¡ ½ÇÇàÇÏ´Â °ÍÀÌ°í, ½ºÇÁ¸µ ApplicationContextµµ »ç¿ëÇÏ°í ÀÖÀ¸´Ï±î Á¤È®ÇÏ°Ô´Â ÅëÇÕ Å×½ºÆ® ÀÔ´Ï´Ù. Á¦¸ñÀÌ ±»ÀÌ ´ÜÀ§ Å×½ºÆ®ÀÎ ÀÌÀ¯´Â ¸ô°Ú³×¿ä. Èì.. ´ÜÀ§ Å×½ºÆ®¸¦ ¿Ö OSGi ȯ°æ¿¡¼­ ½ÇÇàÇßÀ»¶ó³ª..

¾î·µç, ½ºÇÁ¸µ DM¿¡¼­ Å×½ºÆ®¸¦ ÀÛ¼ºÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇØÁÖ°í ÀÖ´Â ±¦ÃáÇÑ ±ÛÀÔ´Ï´Ù. ¹ú½á Àú·¸°Ô Àڱ⠾ÖÇø®ÄÉÀ̼ÇÀ» ½ºÇÁ¸µ DM ¹øµé·Î ÀüȯÇÏ´Â ÀÛ¾÷À» ¸¶Ä£ »ç¶÷µéµµ ¸¹Àºµ¥, Àúµµ Á» ºÐ¹ßÇؾ߰ڽÀ´Ï´Ù.
½Å°í
top

Late Binding in Java

Spring DM/exercise : 2008.07.20 17:04


ÂüÁ¶ : http://neilbartlett.name/blog/osgibook/

OOPÀÇ ¸ñÀû Áß Çϳª´Â ÀÇÁ¸¼ºÀ» ÃÖ´ëÇÑ ³·Ãç¼­ ÄÚµåÀÇ Àç»ç¿ë¼º°ú À¯¿¬ÇÔÀ» ´Ã¸®´Â °ÍÀÌ´Ù.

ÀÚ¹Ù¿¡¼­´Â ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇؼ­ ÀÌ·± ¸ñÀû¿¡ Á¢±Ù Çß´Ù. ÀÎÅÍÆäÀ̽º´Â ºÒÆíÇÏ°í ±×°ÍÀ» ±¸ÇöÇÑ ±¸Çöü¸¸ ¹Ù²Ù¸é ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ°í Àִ Ŭ¶óÀ̾ðÆ® ÄÚµå´Â º¯°æÇÒ ÇÊ¿ä°¡ ¾ø¾ú±â ¶§¹®ÀÌ´Ù. ÇÏÁö¸¸, ÇÑ°è°¡ Àִµ¥, °´Ã¼¸¦ »ý¼ºÇÏ·Á¸é ¾îÂ÷ÇÇ ±¸ÇöÇÑ Å¬·¡½º¸¦ Ŭ¶óÀ̾ðÆ® ÂÊ¿¡¼­ ¾Ë°í ÀÖ¾î¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù.

±×·¡¼­, ½ºÄ³³ÊÀÇ »ý¼ºÀÚ¸¦ »ç¿ëÇؼ­ ¹®ÀÚ¿­À» ¹Þ°í ±× ¹®ÀÚ¿­·Î ºÐ±â¹®À» µ¹·Á¼­ ±¸Çöü¸¦ ±â¹ÝÀ¸·Î °´Ã¼¸¦ ¸¸µå´Â Äڵ带 »ç¿ëÇϱ⵵ Çϴµ¥, ¿ª½Ã³ª »õ·Î¿î ±¸Çöü°¡ »ý±â°Å³ª Çϸé, ¶Ç Äڵ带 ¹Ù²ã¾ß µÈ´Ù.

ÀÌ¿¡ ´ëÇÑ ´ë¾ÈÀ¸·Î ½ºÄ³³Ê¸¦ »ç¿ëÇÏÁö ¾Ê°í, "´Ù¸¥ ¹º°¡"°¡ ±× °´Ã¼¸¦ Á¦°øÇØÁÖ°Ô ÇÏ´Â °ÍÀÌ´Ù. ±×·¡¼­ µîÀåÇÑ°Ô "Assembler" ´Ù. "Assembler"¸¦ ¿©·¯ °÷¿¡¼­ ¸¸µé¾î ¾²´Ù°¡ ÆÐÅÏÀÌ ¹ß°ßµÇ¾ú°í, ±× ÆÐÅÏÀ» ±¸ÇöÇÑ ÇÁ·¹ÀÓ¿öÅ©°¡ ½ºÇÁ¸µ°ú ±¸±ÛÁ꽺´Ù.

ÀÌ µéÀ» Dependency Injection ÇÁ·¹ÀÓ¿öÅ©¶ó°í ÇÑ´Ù. (¹°·Ð ½ºÇÁ¸µÀº ±×°Ô ÀüºÎ´Â ¾Æ´ÏÁö¸¸) ºÒÇàÈ÷µµ, ÀÌ·± Assembler Patternµµ Á¤ÀûÀ̶ó´Â Ư¼º ¶§¹®¿¡ ¸î °¡Áö ¹®Á¦°¡ ÀÖ´Ù. °´Ã¼µéÀÇ ¿¬°ü °ü°è¸¦ Á¤ÀûÀ¸·Î ÇÑ ¹ø »ý¼ºÇÏ°í ¸»±â ??¹®¿¡, °´Ã¼ »ý¼º ¼ø¼­¸¦ ½Å°æ ½á¾ß ÇÑ´Ù. B°¡ A °´Ã¼¸¦ ÂüÁ¶ÇÏ·Á¸é A °´Ã¼¸¦ ¸ÕÀú ¸¸µé¾î¾ß µÈ´Ù. ±×¸®°í °´Ã¼°£¿¡ »óÈ£ ÂüÁ¶(Circular Dependency)µµ Á¶½ÉÇØ¾ß µÈ´Ù.

¶Ç ´Ù¸¥ ¹®Á¨ µ¿ÀûÀ¸·Î ¾÷µ¥ÀÌÆ® ÇÏ´Â °ÍÀÌ ºÒ°¡´ÉÇÏ´Ù. ÀÌ·¸°Ô Á¤ÀûÀ¸·Î ¹­¿©ÀÖ´Â ÀÇÁ¸¼º ±×·¡ÇÁ¿¡´Â, ¾ÆÁÖ ÀÛÀº °´Ã¼ ¿¬°ü °ü°è¸¦ º¯°æÇÏ·Á°í Çصµ Àüü ½Ã½ºÅÛÀ» ²°´Ù°¡ ÄÑ¾ß ÇÑ´Ù.

OSGi´Â ¹Ù·Î ÀÌ ¹®Á¦¸¦ µ¿ÀûÀÎ "¼­ºñ½º"¸¦ ÀÌ¿ëÇؼ­ ÇØ°áÇÑ´Ù. 

¼­ºñ½º´Â DI ÇÁ·¹ÀÓ¿öÅ©¿¡¼­ÀÇ ºó ó·³ Æò¹øÇÑ ÀÚ¹Ù °´Ã¼(POJO)´Ù. ¼­ºñ½º´Â Çϳª ÀÌ»óÀÇ ÀÎÅÍÆäÀ̽º À̸§À¸·Î OSGi ¼­ºñ½º ·¹Áö½ºÆ®¸®¿¡ ÀÇÇØ Á¦°øµÈ´Ù. ¼­ºñ½º´Â ´Ù¸¥ ¼­ºñ½º¸¦ »ç¿ëÇÒ ¼ö ÀÖ°í °íÁ¤ÀûÀÎ ±×·¡ÇÁ·Î ¹­ÀÌ´Â°Ô ¾Æ´Ï¶ó, ¼­ºñ½º´Â ¾ðÁ¦µçÁö µ¿ÀûÀ¸·Î µî·ÏµÇ°í ÇØÁöµÉ¼ö ÀÖ´Ù. µû¶ó¼­ ¼­ºñ½ºµé »çÀÌÀÇ °ü°è´Â ÀÓ½ÃÀûÀÎ °ü°èÀÌ´Ù.

°´Ã¼ »ý¼º ¼ø¼­ ¹®Á¦´Â ´ÙÀ½°ú °°ÀÌ ÇØ°áÇÑ´Ù. B°¡ A¸¦ ÇÊ¿ä·Î ÇÏ´Â »óȲ¿¡¼­ B °´Ã¼¸¦ ¸¸µé ¶§ A °´Ã¼°¡ ÀÖ´ÂÁö È­ÀÎÇÏ°í ¾È ¸¸µé¾îÁ®ÀÖÀ¸¸é ÀÌ °´Ã¼¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖÀ» ¶§ ±îÁö Àá½Ã ´ë±âÇÑ´Ù. ±×¸®°í A °´Ã¼¸¦ B°¡ ÀÌ¿ëÇÏ°í ÀÖ´Â µµÁß¿¡ A°¡ »ç¶óÁö°í »õ·Î¿î A' °´Ã¼¸¦ µî·ÏÇÏ¸é ¼­ºñ½º BÇÑÅ× À̺¥Æ®¸¦ ³¯·Á¼­ ±³Ã¼ÇÏ°Ô ÇØÁØ´Ù.


ÀÎÅÍÆäÀ̽º -> Scanner -> Assembler -> DI Framework -> OSGi


½Å°í
top

Whiteship's ½ºÇÁ¸µ DM ·¹ÆÛ·±½º 1.0 m3 ¹èÆ÷

Spring DM/etc : 2008.07.20 12:20


Áö³­ ¹èÆ÷ µÚ¿¡ ½Ã°£Á» ¿À·¡ °É·È½À´Ï´Ù. Å©°Ô ´Þ¶óÁø °Ç ¾ø°í, 10Àå°ú Appendix A, B, C, D, E¸¦ Ãß°¡Çß½À´Ï´Ù.


»ý·«ÇÑ Ç¥µéÀ» Ãß°¡ÇÏ´Â ÀÛ¾÷±îÁö ¿Ï·áÇϸé, 1.0 Á¤½ÄÆÇÀÌ ¿Ï¼º µÉ °Í °°½À´Ï´Ù.
½Å°í
top

bnd¿¡ ¹øµé ½ÇÇàȯ°æ ¼³Á¤Çϱâ

Spring DM/exercise : 2008.07.13 09:29


Bundle-RequiredExecutionEnvironment: J2SE-1.5, J2SE-1.4

ÀÌ·±½ÄÀ¸·Î ¼³Á¤Çϸé ÀÌ ¼³Á¤ ±×´ë·Î MANIFEST.MF¿¡ º¹»çÇؼ­ ºÙ¿©³Ö¾îÁÝ´Ï´Ù. ¸ðµç ¹øµé¿¡ ÀÌ·± ½ÇÇàȯ°æÀ» ¼³Á¤ÇØÁִ°ÍÀÌ ÁÁ°ÚÁÒ. °¡¿ëÇÑ ¼³Á¤ °ªµåÀº ´ÙÀ½°ú °°½À´Ï´Ù.

CDC-1.0/Foundation-1.0
CDC-1.1/Foundation-1.1
JRE-1.1
J2SE-1.2
J2SE-1.3
J2SE-1.4
J2SE-1.5
J2SE-1.6
OSGi/Minimum-1.0
OSGi/Minimum-1.1

1.5 ȯ°æ¿¡¼­ 1.4 ¿ë ¹øµéÀ» ¸¸µé°í ½ÍÀ» ¶§, -source ¿Í -targetÀ» »ç¿ëÇؼ­ ÄÄÆÄÀÏ ÇÏ¸é µÇÁö¸¸, -source´Â ¾Ö³ëÅ×À̼ÇÀ̳ª Á¦³×·º, for-each¹®°ú °°Àº ±â´ÉÀ» ²¨¹ö¸®°í, -targetÀº Ŭ·¡½º ÆÄÀÏ ¹öÀüÀ» 1.4 ȯ°æÀÌ ÀÐÀ» ¼ö ÀÖµµ·Ï ¼³Á¤ÇÏ´Â °ÍÀÏ »Ó, ½ÇÁ¦ API »óÀÇ Â÷ÀÌ´Â Àâ¾Æ³»Áö ¸øÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, StringÀÇ contains() ¸Þ¼Òµå´Â 1.5¿¡ Ãß°¡µÇ¾î¼­ JDK 1.5 ÀÌ»óÀÌ È¯°æ¿¡¼­ ¾ó¸¶µçÁö Àú ¸Þ¼Òµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Àú Äڵ带 ´ã°í ÀÖ´Â ¹øµéÀ» -target°ú -source¸¦ »ç¿ëÇؼ­ 1.4 ¹øµé·Î ¸¸µé°í JDK 1.4 À§¿¡¼­ µ¹¸®¸é, ¿¹¿Ü°¡ ¹ß»ýÇÕ´Ï´Ù. ´ç¿¬ÇÑ°ÅÁÒ. µû¶ó¼­, 1.4 ¿ë ¹øµéÀ» ¸¸µé°íÀÚ ÇÑ´Ù¸é, JDK 1.4 À§¿¡¼­ ÇØ´ç ¹øµéÀ» ¸¸µé°í ÆÐŰ¡ÇÏ´Â °ÍÀ» ±ÇÀåÇÕ´Ï´Ù.
½Å°í
top