·Î±×ÀÎ | ȸ¿ø°¡ÀÔ (´º½º·¹ÅͽÅû) | SITEMAP
   
  °³¹ß   Ç÷§Æû   ½Ã½ºÅÛ   ¸Å´ÏÁö¸ÕÆ®   Àüü±â»ç  
ÀÚ¹Ù
´å³Ý
C/C++
DB
¸ðµ¨¸µ
À¥°³¹ß
±âŸ
À¯´Ð½º/¸®´ª½º
À©µµ¿ì
±âŸ
¼­¹ö
³×Æ®¿öÅ©
º¸¾È
±âŸ
BM
PM
±âŸ
 
±â»çÀúÀå
0
 
¸¶ÀÌ ½ºÅ©·¦
POJO·Î µ¹¾Æ¿Â¡¸EJB 3.0°ú ÀÚ¹Ù ÆÛ½Ã½ºÅϽº API¡¹

±è¿ø¼®(Ƽ¸Æ½º¼ÒÇÁÆ®ÀÇ Á¦¿ì½º °³¹ß ´ã´ç)   2006/12/28
1ºÎ | ÇÁ·Î±×·¡¸ÓÀÇ ²ÞÀÌ Çö½Ç·Î ÆîÃÄÁú¡¸ÀÚ¹Ù 2.0ÀÇ ½Ã´ë¡¹
2ºÎ | POJO·Î µ¹¾Æ¿Â¡¸EJB 3.0°ú ÀÚ¹Ù ÆÛ½Ã½ºÅϽº API¡¹
3ºÎ | À¥ 2.0 ½Ã´ë¸¦ ¼±µµÇÒ¡¸ÀÚ¹Ù À¥ ¼­ºñ½º 2.0¡¹
4ºÎ | ¸ð¹ÙÀÏ ±â±âÀÇ ¹Ì·¡¸¦ ¿©´Â¡¸¸ð¹ÙÀÏ ÀÚ¹Ù Ç÷§Æû¡¹
5ºÎ | ¹Ì¸® º¸´Â ¹Ì·¡ °³¹ßȯ°æ¡¸ÀÚ¹ÙSE 6¡¹
Plus | ÀÚ¹Ù°³¹ßÀÚ Æä½ºÆ¼¹ú - The Power Of The Java¡¸2006 ÀÚ¹Ù¿ø ÄÁÆÛ·±½º¡¹
ÀÚ¹Ù
EJB(Enterprise JavaBeans)´Â ÇѸ¶µð·Î ¸»ÇØ ºÐ»ê ÄÄÆ÷³ÍÆ®¿Í DB¿¡ ´ëÇÑ Á¢±Ù ¹æ¹ýÀ» Á¦°øÇÏ´Â ±â¼úÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù.

EJB´Â ÀÚ¹ÙEE ÇÁ·¹ÀÓ¿öÅ©¿¡¼­ ¹é¿£µå¸¦ ´ã´çÇÏ´Â Áß¿äÇÑ ¿ªÇÒÀ» ÇØ¿ÔÁö¸¸ ±âÁ¸ EJB 2.1Àº °³¹ßÀÚ¿¡°Ô ´Ù°¡°¡±â ½¬¿î Á¸Àç´Â ¾Æ´Ï¾ú´Ù. ÀϹÝÀûÀÎ ÀÚ¹Ù OOP ÇÁ·Î±×·¡¹Ö°ú´Â ´Ù¸¥ º¹ÀâÇÑ ±¸Á¶¿Í ¸¹Àº ÄÚµå, º¹ÀâÇÑ XML Á¤Àǰ¡ ÇÊ¿äÇÑ µîÀÇ ¹®Á¦ Å¿À̾ú´Ù. EJB ÇÁ·Î±×·¡¹ÖÀ» À§Çؼ­´Â ¸¹Àº ³ë·ÂÀÌ ÇÊ¿ä Çß°í, ´ç¿¬È÷ óÀ½ Á¢ÇÏ´Â »ç¶÷µé¿¡°Ô´Â ³ôÀº º®À¸·Î ´À²¸Áú ¼ö ¹Û¿¡ ¾ø¾ú´Ù.

ÇÏÁö¸¸ EJB 3.0¿¡¼­´Â EJB¸¸ÀÇ º¹ÀâÇÑ ÇÁ·Î±×·¡¹Ö ¸ðµ¨¿¡¼­ Å»ÇÇÇÏ¿© ÀϹÝÀûÀÎ ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¸ðµ¨ÀÎ POJO(Plain Old Java Object) ½ºÅ¸ÀÏ·Î ¹Ù²î¸é¼­ ´Ü¼øÈ­µÈ ÇÁ·Î±×·¡¹ÖÀÌ °¡´É ÇØÁ³´Ù.

POJO ½ºÅ¸ÀÏ ÇÁ·Î±×·¡¹ÖÀº ÀÌ¹Ì ½ºÇÁ¸µ(Spring)À̳ª ÇÏÀ̹ö ³×ÀÌÆ®(Hibernate)¿Í °°Àº ¿ÀÇ ¼Ò½º ÇÁ·¹ÀÓ¿öÅ©¿¡¼­ ¸¹ÀÌ »ç¿ë µÇ°í ÀÖ´Ù. ´Ü¼øÈ­µÈ ÇÁ·Î±×·¡¹Ö ¸ðµ¨°ú ÄÚµåÀÇ ÀçȰ¿ë °¡´É¼ºÀ» ³ô¿©ÁÙ »Ó¸¸ ¾Æ´Ï¶ó IDEÀÇ ¸®ÆÑÅ丵 ±â´ÉÀ» ½ÊºÐ Ȱ¿ëÇÒ ¼ö ÀÖ´Ù´Â Á¡µéÀÌ ÀÌ ÇÁ·¹ÀÓ¿öÅ©µéÀÇ Àα⠺ñ°áÀÌ´Ù.

¶ÇÇÑ ÀÚ¹ÙSE 5¿¡¼­ Ãß°¡µÈ ¸ÞŸµ¥ÀÌÅÍ ¾î³ëÅ×À̼Ç(Metadata annotation) ¾ð¾î ±â´ÉÀ» »ç¿ëÇÏ¿© EJB¿¡ °ü·ÃµÈ ¼³Á¤À» XML µð½ºÅ©¸³ÅÍ(deployment descriptor)´ë½Å ÄÚµå »ó¿¡¼­ Á÷Á¢ ÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù. ÀÌ·¸°Ô Çϸ鼭 °³¹ßÀÚ´Â º¹ÀâÇÑ XML ¼³Á¤¿¡¼­ Å»ÇÇÇÒ ¼ö ÀÖ°Ô µÇ°í ÄÚµå »ó¿¡¼­ ¿¬°üµÈ ¼³Á¤À» ÇÒ ¼ö Àֱ⠶§¹®¿¡ ÄÚµåÀÇ °¡µ¶¼ºµµ ³ô¾ÆÁö°Ô µÇ¾ú´Ù. ¹°·Ð ±× ¿Ü¿¡µµ ¿©·¯ ¹æ¸é¿¡¼­ °³¹ßÀÚ ÆíÀǼºÀ» ³ôÀ̱â À§ÇÑ ³ë·ÂÀÌ ÀÌ·ç¾îÁ³´Ù.

ÀÚ¹Ù ÆÛ½Ã½ºÅϽº(Java Persistence) API 1.0Àº DB¿¡ Á¢±ÙÇϱâ À§ÇØ »ç¿ëµÇ¾ú´ø ±âÁ¸ ¿£Æ¼Æ¼ ºóÀ» ´ëüÇÏ´Â »õ·Î¿î ±â¼úÀÌ´Ù. ÀÚ¹Ù ÆÛ½Ã½ºÅϽº´Â ¿£Æ¼Æ¼ ºó°ú´Â ¾ÆÁÖ ´Ù¸¥ POJO ±â¹ÝÀÇ ORM(Object-Relational Mapping) ÇÁ·Î±×·¡¹Ö ¸ðµ¨À» Á¦°øÇÏ¸ç ±âÁ¸¿¡ Á¸ÀçÇÏ´ø ÇÏÀ̹ö³×ÀÌÆ®(Hibernate)¿Í °°Àº ORM ¼Ö·ç¼Ç°ú À¯»çÇÏ´Ù. ¶ÇÇÑ EJB¿¡ ±¹ÇѵÇÁö ¾ÊÀº ¹ü¿ëÀûÀÎ ±â¼ú·Î ¸¸µé¾îÁ³±â ¶§¹®¿¡ ÀÚ¹ÙEE ȯ°æ¿¡¼­»Ó¸¸ ¾Æ´Ï¶ó ÀÚ¹ÙSE ȯ°æ ¿¡¼­µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

ÀÚ¹Ù ÆÛ½Ã½ºÅϽº´Â EJB 3.0°ú´Â º°µµ·Î ´Ù·ç±â·Î ÇÏ°í ¿©±â¿¡¼­´Â ¸ÕÀú EJB 3.0¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸ÀÚ.

  EJB 3.0

EJB 3.0 ÇÁ·Î±×·¡¹Ö ¸ðµ¨ÀÌ EJB 2.1¿¡ ºñÇØ¼­ ¾ó¸¶³ª °³¼±µÇ¾úÀ»±î? ¹é¹®ÀÌ ºÒ¿©ÀϰßÀ̶ó ÇßÀ¸´Ï Hello ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ´Â °£´ÜÇÑ ¿¹Á¦ ÄÚµåÀÎ HelloEJB¸¦ ÅëÇØ »ìÆìº¸µµ·Ï ÇÏÀÚ. <¸®½ºÆ® 1>Àº ±âÁ¸ EJB 2.1 ¹æ½ÄÀ¸·Î ±¸ÇöÇÑ °ÍÀÌ´Ù.

 <¸®½ºÆ® 1> EJB 2.1·Î ±¸ÇöÇÑ HelloEJB¿Í Ŭ¶óÀ̾ðÆ®


ÀÚ¹ÙEE 5 ¾ÖÇø®ÄÉÀÌ¼Ç ¼­¹ö  

ÇöÀç ¿©·¯ º¥´õµéÀÌ ÀÚ¹ÙEE 5ÀÇ Ç÷§ÆûÀ» ³»³õ°í ÀÖ´Ù. ¿Ï¼ºµÈ »ó¿ë ¼öÁØÀÇ Á¦Ç°Àº ¾Æ´ÏÁö¸¸ ÃæºÐÈ÷ °³¹ß¿ëÀ¸·Î ¾µ ¸¸ÇÏ´Ù. ±¹³» Á¦Ç°À¸·Î´Â ÀÚ ¹ÙEE 5 ȣȯ ÀÎÁõÀ» ¼¼°è ÃÖÃÊ·Î Åë°úÇÑ Æ¼¸Æ½º ¼ÒÇÁÆ®ÀÇ Á¦¿ì½º (JEUS) 6.0 ÇÁ¸®ºä°¡ ÀÖ´Ù. ¶ÇÇÑ ½ã¸¶ÀÌÅ©·Î½Ã½ºÅÛÁîÀÇ ÀÚ¹ÙEE 5 SDK(¶Ç´Â ÀÌÀÇ ¿ÀǼҽº ±¸ÇöÀÎ ±Û·¡½ºÇǽÃ(GlassFish))µµ ³ª¿Í ÀÖ´Ù.
±× ¿Ü¿¡µµ EJB 3.0¸¸ Áö¿øÇÏ´Â JBoss EJB 3.0°ú Oracle Application
Server 10.1.3, BEA WebLogic Server EJB 3.0 ÇÁ¸®ºä¿Í °°Àº Á¦Ç°µµ ÀÖÀ¸´Ï Âü°íÇÏÀÚ.
¿©±â¿¡ Á¦½ÃµÈ ¿¹Á¦µéÀº ±âº»ÀûÀ¸·Î Á¦¿ì½º 6.0À» ±â¹ÝÀ¸·Î ÀÛ¼º µÇ¾úÀ¸¸ç ÀÚ¹ÙEE 5 SDK¸¦ ÅëÇØ¼­µµ ±¸µ¿ÇÒ ¼ö ÀÖ´Ù.

¡Ü TmaxSoft JEUS 6.0 - http://www.tmax.co.kr
¡Ü Java EE 5 SDK - http://java.sun.com/javaee/
¡Ü GlassFish - https://glassfish.dev.java.net/
¡Ü JBoss - http://jboss.com/products/jbossas
¡Ü Oracle AS - http://www.oracle.com/technology/products/ias/index.html
¡Ü BEA WebLogic Server - http://www.bea.com/products/weblogic/server/


ÀÌ¹Ì EJB ÇÁ·Î±×·¡¹ÖÀ» ÇØº» µ¶ÀÚ¶ó¸é ¾Ë°ÚÁö¸¸ ¸Å¿ì °£´ÜÇÑ HelloEJB ¿¹Á¦¿¡µµ ¸¹Àº Äڵ尡 ÇÊ¿äÇÏ´Ù. ¶ÇÇÑ ÀϹÝÀûÀÎ ÀÚ¹Ù OOP ÇÁ·Î±×·¡¹Ö°ú ´Þ¸® EJB ¸¸ÀÇ Æ¯¼öÇÑ ¸ðµ¨¿¡ ¸Â°Ô ÇÁ·Î±×·¡¹Ö ÇØ¾ß Çß´Ù. ´ÙÀ½Àº EJB 2.1ÀÇ ´ëÇ¥ÀûÀÎ ºÒÆí»çÇ×µéÀ» Á¤¸® ÇØ ³õÀº °ÍÀÌ´Ù.

¡Ü ÄÄÆ÷³ÍÆ® ÀÎÅÍÆäÀ̽º - ºñÁî´Ï½º ¸Þ¼Òµå¸¦ Á¤ÀÇÇÑ ºÎºÐÀ¸·Î EJBObject/EJBLocalObject¸¦ extendsÇÏ¿© Á¤ÀÇÇÑ´Ù. EJB¸¸ÀÇ ÀÎÅÍÆäÀ̽º »ó¼Ó±¸Á¶¸¦ µû¶ó¾ß ÇϹǷΠ±âÁ¸¿¡ Á¸ÀçÇÏ´ø ÀÏ¹Ý ÀÚ¹Ù ÀÎÅÍÆäÀ̽º¸¦ ¹Ù·Î ÀçȰ¿ë ÇÒ ¼ö ¾ø´Ù. ¶ÇÇÑ EJBObject¸¦ extendsÇÑ ¿ø°Ý ÀÎÅÍÆäÀ̽ºÀÇ °æ¿ì RMI(Remote Method Invocation) ÀÎÅÍÆäÀ̽ºÀ̹ǷΠ¸ðµç ¸Þ¼Òµå Á¤ÀÇ¿¡ RemoteExceptionÀÌ ²À µé¾î°¡¾ß ÇÑ´Ù.
¡Ü Ȩ ÀÎÅÍÆäÀ̽º - Stateless ¼¼¼Ç ºóÀÇ °æ¿ì Ç×»ó ¶È °°ÀÌ À§¿Í °°Àº create() ¸Þ¼Òµå¸¦ Á¤ÀÇÇØ¾ß ÇÑ´Ù. EJB°¡ ¸¹¾ÆÁö¸é ¹Ýº¹ÀûÀ¸·Î ÄÚµùÇØ¾ß ÇÑ´Ù.
¡Ü ºó Ŭ·¡½º - ÄÄÆ÷³ÍÆ® ÀÎÅÍÆäÀ̽º¿¡ Á¤ÀÇµÈ ºñÁî´Ï½º ¸Þ¼Òµå¸¦ ±¸ÇöÇÑ´Ù. ÇÏÁö¸¸ ÇØ´ç ÄÄÆ÷³ÍÆ® ÀÎÅÍÆäÀ̽º¸¦ ¹®¹ýÀûÀ¸·Î implements ÇÏÁö ¾Ê¾Æ ½ÇÁ¦ ÀÎÅÍÆäÀ̽º¿ÍÀÇ °ü°è°¡ ¸í½ÃÀûÀ¸·Î ÀνĵÇÁö ¾Ê´Â´Ù(IDEÀÇ ¸®ÆÑÅ丵 ±â´Éµµ ¾µ ¼ö ¾ø´Ù).
SessionBean ÀÎÅÍÆäÀ̽º¸¦ Ç×»ó implementsÇØ¾ß Çϱ⠶§¹® ¿¡ ¾²Áöµµ ¾Ê´Â ÄÝ¹é ¸Þ¼Òµå¸¦ ¸ðµÎ ±¸ÇöÇØ¾ß ÇÑ´Ù.
¡Ü ejb-jar.xml - EJB¿¡ ´ëÇÑ ¼³Á¤À» ¼±¾ðÀûÀ¸·Î ÇØÁÖ¸ç Ç×»ó ÀÖ¾î¾ß ÇÑ´Ù. ÄÄÆ÷³ÍÆ® ÀÎÅÍÆäÀ̽º, Ȩ ÀÎÅÍÆäÀ̽º, ºó Ŭ·¡½ºÀÇ °ü°è°¡ ¿©±â¼­ ³ªÅ¸³ª±â ¶§¹®¿¡ ÀÚ¹Ù ÄÚµå¿Í º°µµ·Î Ç×»ó ÀÌ XMLÀ» Âü°íÇØ¾ß EJB ±¸Á¶¸¦ ¾Ë ¼ö ÀÖ´Ù. ¼³Á¤ÀÌ ¸¹¾ÆÁö¸é XML ³»¿ë°ú ±¸Á¶°¡ º¹ÀâÇØÁø´Ù.
¡Ü Ŭ¶óÀÌ¾ðÆ® - EJB¸¦ ¾ò±â À§ÇØ ¿©·¯ ´Ü°è¸¦ °ÅÄ£´Ù. JNDI lookup, Ȩ °´Ã¼ ij½ºÆÃ, create ¸Þ¼Òµå È£Ãâ µî ºñÁî´Ï½º ·ÎÁ÷°ú °ü°è ¾ø´Â Äڵ尡 ¸¹´Ù. ¶ÇÇÑ ÄÄÆ÷³ÍÆ® ÀÎÅÍÆäÀ̽º°¡ RemoteExceptionÀ» ´øÁú ¼ö Àֱ⠶§¹®¿¡ Ç×»ó ¿¹¿Ü(checked Exception 󸮸¦ ÇØÁÖ¾î¾ß ÇÑ´Ù.

EJB 3.0¿¡¼­´Â À§¿¡¼­ Á¦±âÇÑ »ó´ç¼öÀÇ ¹®Á¦¸¦ ÇØ°áÇÏ¿´´Ù.

<¸®½ºÆ® 2>´Â ¶È°°Àº ¿¹Á¦¸¦ EJB 3.0 ¹æ½ÄÀ¸·Î ±¸ÇöÇÑ °ÍÀÌ´Ù.

½ÇÁ¦ ·ÎÁ÷¿¡ ºÒÇÊ¿äÇÑ ÄÚµåÀÇ ¾çÀÌ È® ÁÙ¾ú°í POJO ¹æ½ÄÀ¸·Î ÇÁ·Î±×·¡¹Ö ¸ðµ¨ÀÌ ´Ü¼øÇØÁø °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. »õ·Ó°Ô µµÀÔ µÈ ºñÁî´Ï½º ÀÎÅÍÆäÀ̽º´Â ÀÌÁ¦ º¸ÅëÀÇ ÀÚ¹Ù ÀÎÅÍÆäÀ̽ºÀÌ°í ºó Ŭ·¡½º°¡ À̸¦ ±¸Çö(implements)ÇÏ´Â POJO °´Ã¼ÀÌ´Ù. EJB¿¡ °ü·ÃµÈ ³»¿ëÀº ¾î³ëÅ×À̼ÇÀ» ÅëÇØ Ç¥±âµÇ¹Ç·Î EJB ±¸Á¶¸¦ ÄÚµå »ó¿¡¼­ ÆÄ¾ÇÇÒ ¼ö ÀÖ´Ù. µû¶ó¼­ XML ¼³Á¤(ejb-jar.xml)Àº ´õ ÀÌ »ó »ç¿ëÇÒ Çʿ䰡 ¾ø´Ù. ¹Ýº¹µÇ´ø Ȩ ÀÎÅÍÆäÀ̽º Á¤Àǵµ ¾ø¾îÁ³ ´Ù. Ŭ¶óÀÌ¾ðÆ® Äڵ嵵 ¸Å¿ì ±ò²ûÇØÁ³´Âµ¥ ÀÎÁ§¼Ç(Injection)À» ÅëÇØ EJB¸¦ ¾ò´Â °úÁ¤ÀÌ ´Ü¼øÈ­ µÇ¾ú´Ù.

 <¸®½ºÆ® 2> EJB 3.0À¸·Î ±¸ÇöÇÑ HelloEJB¿Í Ŭ¶óÀ̾ðÆ®


¾ÕÀ¸·Î´Â LottoApp À̶ó°í ÇÏ´Â °£´ÜÇÑ »ùÇà ¾ÖÇø®ÄÉÀ̼ÇÀ» ÅëÇØ EJB 3.0 Äڵ带 »ìÆìº¼ °ÍÀÌ´Ù. LottoApp´Â ·Î¶Ç¸¦ ¹ß±Þ ÇÏ´Â ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î À¥ ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ EJB¸¦ È£ÃâÇÑ´Ù.
À¥À» ÅëÇØ µé¾î¿Â »ç¿ëÀÚ ¿äûÀº ¼­ºí¸´(Servlet)ÀÌ ´ÙÀ½ÀÇ EJB µéÀ» »ç¿ëÇÏ¿© ó¸®ÇÏ°Ô µÈ´Ù.

¡Ü LotteryBean - ·Î¶Ç ¹øÈ£¸¦ ¹ß±ÞÇÏ´Â Stateful ¼¼¼Ç ºó¡Ü RandomGeneratorBean - 1¿¡¼­ 45»çÀÌÀÇ ·£´ý ¼ýÀÚ¸¦ ¹ß»ý½ÃŰ´Â Stateless ¼¼¼Ç ºó
¡Ü TimestampBean - ÇöÀç ³¯Â¥¸¦ µ¹·ÁÁÖ´Â Stateless ¼¼¼Ç ºó

¼¼¼Ç ºó(Session Bean)

¸ÕÀú ¼¼¼Ç ºóÀÇ º¯È­µÈ Ư¡¿¡ ´ëÇØ¼­ ¸ÕÀú »ìÆìº¸ÀÚ. »õ·Ó°Ô µµÀÔµÈ ¼¼¼Ç ºóÀÇ ºñÁî´Ï½º ÀÎÅÍÆäÀ̽º(business interface)´Â EJBObject/EJBLocalObject¸¦ extendsÇÑ ÀÎÅÍÆäÀ̽º´ë½Å ÀϹÝÀûÀÎ ÀÚ¹Ù ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÑ´Ù. ´ÜÁö ¿ø°Ý ÀÎÅÍÆäÀ̽ºÀÎÁö
·ÎÄà ÀÎÅÍÆäÀ̽ºÀÎÁö ±¸ºÐÇϱâ À§ÇØ @Remote ¶Ç´Â @Local ¾î³ëÅ×À̼ÇÀ» ¾Æ·¡¿Í °°ÀÌ ´Þ¾ÆÁÖ¸é µÈ´Ù.

@Remote // ¿ø°Ý ºñÁî´Ï½º ÀÎÅÍÆäÀ̽ºpublic interface RandomGenerator {public int getNumber( );
}

@Local // ·ÎÄà ºñÁî´Ï½º ÀÎÅÍÆäÀ̽ºpublic interface Timestamp {
public String today( );
}

À§ÀÇ RandomGenerator ÀÎÅÍÆäÀ̽º¿¡¼­ º¸µíÀÌ ¿ø°Ý ÀÎÅÍÆäÀ̽ºÀÇ °æ¿ì¿¡ java.rmi.Remote ÀÎÅÍÆäÀ̽º¸¦ extends ÇÏÁö ¾Ê¾Æµµ µÇ¾î(¼±ÅûçÇ×ÀÓ) ¸ðµç ¸Þ¼Òµå¿¡ RemoteExceptionÀ» ºÙÀÏ Çʿ䰡 ¾ø¾îÁ³´Ù. µû¶ó¼­ Ŭ¶óÀÌ¾ðÆ®µµ ÀÌÁ¦ ÀÌ Ã¼Å© ÀͼÁ¼Ç (checked Exception)À» Ç×»ó ó¸®ÇÒ Çʿ䰡 ¾ø´Ù. ³×Æ®¿öÅ©¿Í °°Àº ½Ã½ºÅÛ ¹®Á¦´Â ÀÌÁ¦ RuntimeExceptionÀÎ EJBExceptionÀ¸·Î ¹ß»ýÇϱ⠶§¹®¿¡ ÀͼÁ¼Ç 󸮿¡ Á» ´õ À¯¿¬¼ºÀ» °¡Áö°Ô µÆ´Ù.
¹°·Ð ¿©ÀüÈ÷ EJB¿¡ ´ëÇÑ ¿ø°Ý Á¢±ÙÀº RMI/IIOP¸¦ ÅëÇØ¼­ ÀÌ·ç¾îÁø´Ù. ÀÌÁ¦ ºñÁî´Ï½º ¸Þ¼Òµå¸¦ ±¸ÇöÇÏ´Â ºó Ŭ·¡½º¸¦ »ìÆìº¸ÀÚ.

@Stateless
public class RandomGeneratorBean implementsRandomGenerator {
public int getNumber() {
Random random = new Random();
return 1 + random.nextInt(45);}
}

ºó Ŭ·¡½º´Â ºñÁî´Ï½º ÀÎÅÍÆäÀ̽º¸¦ implements ÇÑ POJO °´Ã¼·Î Á¤ÀÇÇÑ´Ù. ¼¼¼Ç ºóÀÓÀ» Ç¥½ÃÇϱâ À§ÇØ @Stateless³ª @Stateful ¾î³ëÅ×À̼Ǹ¸ ´Þ¾ÆÁÖ¸é µÈ´Ù. ¶ÇÇÑ ºó Ŭ·¡½º°¡ SessionBean ÀÎÅÍÆäÀ̽º¸¦ implements ÇÒ Çʿ䰡 ¾ø¾î »ç¿ëÇÏÁö ¾Ê´Â ÄÝ¹é ¸Þ¼Òµå¸¦ ¸ðµÎ ±¸ÇöÇÒ Çʿ䰡 ¾ø¾îÁ³´Ù. ÇÊ¿äÇÑ ÄÝ ¹éÀÇ °æ¿ì ÄÝ¹é ¾î³ëÅ×À̼ÇÀ» ÅëÇØ ÄÝ¹é ¸Þ¼Òµå¸¦ ÁöÁ¤ÇÏ¸é µÈ ´Ù. <¸®½ºÆ® 3>¿¡ ÀÖ´Â Á»´õ º¹ÀâÇÑ LotteryBean Stateful ¼¼¼Ç ºóÀ» »ìÆìº¸ÀÚ.

 <¸®½ºÆ® 3> LotteryBean Stateful ¼¼¼Ç ºó


<¸®½ºÆ® 3>¿¡¼­´Â @PostConstruct ¾î³ëÅ×À̼ÇÀ» ÅëÇØ¼­ PostConstruct ÄÝ¹é ¸Þ¼Òµå¸¦ ÁöÁ¤Çϰí ÀÖ´Ù. XXX void XXX() ÇüÅÂÀÇ ½Ã±×³Êó¸¦ °¡Áø ¸ðµç ¸Þ¼Òµå´Â ¾î³ëÅ×À̼ÇÀ¸·Î ÄÝ¹é ¸Þ¼Òµå·Î ÁöÁ¤ÇÒ ¼ö Àֱ⠶§¹®¿¡ ÇϳªÀÇ ¸Þ¼Òµå·Î ¿©·¯ ÄݹéÀ» ó ¸® ÇÏ´Â µî »ó´çÇÑ À¯¿¬¼ºÀ» Á¦°øÇÑ´Ù. ´ÙÀ½Àº ÄÝ¹é ¾î³ëÅ×ÀÌ¼Ç ÀÇ Á¾·ùº° ¼³¸íÀÌ´Ù.

¡Ü @PostConstruct - ºó ÀνºÅϽº°¡ »ý¼ºµÈ ÈÄ¿¡ ºÒ¸®¸ç ¿¹Àü ÀÇ ejbCreate( )¿Í µ¿ÀÏ
¡Ü @PreDestroy - ºó ÀνºÅϽº°¡ »èÁ¦µÇ±â Àü¿¡ ºÒ¸®¸ç ¿¹Àü ÀÇ ejbRemove( )¿Í µ¿ÀÏ
¡Ü @PrePassivate - Stateful ¼¼¼Ç ºó ÀνºÅϽº°¡ passivation µÇ±â Àü¿¡ ºÒ¸®¸ç ¿¹ÀüÀÇ ejbPassivate( )¿Í µ¿ÀÏ¡Ü @PostActivate - Stateful ¼¼¼Ç ºó ÀνºÅϽº°¡ activation µÈ ÈÄ¿¡ ºÒ¸®¸ç ¿¹ÀüÀÇ ejbActivate( )¿Í µ¿ÀÏ
LotteryBeanÀÇ °æ¿ì ¶ÇÇÑ SessionContext °´Ã¼¸¦ @Re source ¾î³ëÅ×À̼ÇÀ» »ç¿ëÇÏ¿© ÀÎÁ§¼ÇÇØ¼­ °¡Á®¿À°í ÀÖ´Ù. ÀÎÁ§¼ÇÀº Á¤È®ÇÑ ¿ë¾î·Î µðÆæ´ø½Ã ÀÎÁ§¼Ç(Dependency Injection) Ȥ Àº ¸®¼Ò½º ÀÎÁ§¼Ç(Resource Injection)À̶ó°í Çϴµ¥ ÇØ´ç ÄÄÆ÷³ÍÆ®°¡ ÀÇÁ¸ÇÏ´Â ¿ÜºÎ ¸®¼Ò½º¸¦ °¡Á®¿À´Â »õ·Î¿î ¹æ¹ýÀÌ´Ù. ±âÁ¸¿¡ °³¹ßÀÚ°¡ Á÷Á¢ JNDI lookupÇÏ´ø °ÍÀ» ÀÌÁ¦ ÄÁÅ×À̳ʰ¡ ¾Ë¾Æ¼­ ÇÊµå °ª¿¡ ³Ö¾îÁÖ°Ô µÈ °ÍÀÌ´Ù. ÀÎÁ§¼ÇÀº Çʵ忡 Àû¿ëÇÒ ¼öµµ ÀÖ°í ¾Æ·¡¿Í °°ÀÌ setter ¸Þ¼Òµå¿¡µµ Àû¿ëÇÒ ¼ö ÀÖ´Ù.

@Resource
private void setSessionContext(SessionContext sc){this.sc = sc;
}

¶Ç, ÀÎÁ§¼ÇÀ» ÀÌ¿ëÇÏ¿© DataSource³ª EJB ÂüÁ¶, Connection Factory, Queue, Topic, UserTransaction µîÀÇ ¿ÜºÎ ¸®¼Ò½º¸¦ °¡Á®¿Ã ¼ö ÀÖ´Ù.
LotteryBeanÀº Stateful ¼¼¼Ç ºóÀ̱⠶§¹®¿¡ ºóÀ» Á¦°ÅÇϱâ À§ ÇÑ Remove ¸Þ¼Òµå¸¦ @Remove ¾î³ëÅ×À̼ÇÀ¸·Î ÁöÁ¤ÇÑ´Ù.
Remove ¸Þ¼Òµå´Â ÀÓÀÇÀÇ ºñÁî´Ï½º ¸Þ¼Òµå¿¡ ÁöÁ¤ÇÒ ¼ö ÀÖÀ¸¸ç ¸Þ¼ÒµåÀÇ ¼öÇàÀÌ ³¡³ª¸é ÇØ´ç Stateful ¼¼¼Ç ÀνºÅϽº°¡ Á¦°ÅµÈ´Ù.

ÀÎÅͼÁÅÍ (Interceptor)
<¸®½ºÆ® 3> LotteryBeanÀÇ °æ¿ì @Interceptors ¾î³ëÅ×À̼ÇÀ» ÀÌ¿ëÇÏ¿© EJB 3.0¿¡¼­ »õ·Î Ãß°¡µÈ ÀÎÅͼÁÅÍ(interceptor)Ŭ·¡½º¸¦ ÁöÁ¤Çϰí ÀÖ´Ù.

ÀÎÅͼÁÅÍ´Â ÇöÀç ¸¹Àº °ü½ÉÀ» ²ø°í ÀÖ´Â AOP(AspectOriented Programming)ÀÇ °³³ä¿¡¼­ ÆÄ»ýµÈ °ÍÀ¸·Î ºñÁî´Ï½º¸Þ¼Òµå°¡ ºÒ¸®±â Àü¿¡(ȤÀº ÈÄ¿¡) ÇØ¾ß ÇÏ´Â °øÅëÀûÀÎ ºÎºÐ(cross-cutting concerns)À» º°µµ·Î ±¸ÇöÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. ÀÎÅͼÁÅÍ´Â ´Ù¾çÇÑ ¸ñÀûÀ¸·Î Ȱ¿ëµÉ ¼ö Àִµ¥, ¿¹¸¦ µé¾î ¸Þ¼ÒµåÀÇ ¼öÇà½Ã°£À» ÃøÁ¤Çϰųª ¿¹¿Üó¸®, ÆÄ¶ó¹ÌÅÍ °Ë»ç, »ç¿ëÀÚ °íÀ¯ÀÇ º¸¾È °Ë»ç µî¿¡ ÀÌ¿ëµÉ ¼ö ÀÖ´Ù. <¸®½ºÆ® 4>´Â ¸Þ¼Òµå ¼öÇà ½Ã°£À» ÃøÁ¤ÇÏ´Â ÀÎÅͼÁÅÍÀÌ´Ù.

 <¸®½ºÆ® 4> ProfilingInterceptor ÀÎÅͼÁÅÍ


ÀÎÅͼÁÅÍ Å¬·¡½º¿¡´Â ÇϳªÀÇ ÀÎÅͼÁÆ® ¸Þ¼Òµå°¡ @AroundInvoke¶ó´Â ¾î³ëÅ×À̼ÇÀ» ÅëÇØ ÁöÁ¤µÈ´Ù. ÀÎÅͼÁÆ® ¸Þ¼Òµå´Â ºóŬ·¡½º ³»¿¡¼­ ±¸ÇöÇϰųª ProfilingInterceptor¿Í °°ÀÌ º°µµ·Î ÀÎÅͼÁÆ® Ŭ·¡½º·Î ¸¸µé ¼ö ÀÖÀ¸¸ç ÀÎÅͼÁÆ® Ŭ·¡½º´Â ÀçȰ¿ë ÇÒ ¼ö ÀÖ´Ù´Â ÀåÁ¡µµ ÀÖ´Ù. Áß¿äÇÑ °ÍÀº ÀÎÅͼÁÅÍ´Â ¿©·¯ °³°¡ ÀÖÀ¸¸é üÀÎÀ¸·Î ±¸¼ºµÇ±â ¶§¹®¿¡ Invocation Context.proceed()¸¦ È£ÃâÇØ¾ß ´ÙÀ½ ÀÎÅͼÁÅͳª ½ÇÁ¦ ºó ¸Þ¼Òµå·Î ³Ñ¾î°¡°Ô µÈ´Ù´Â Á¡ÀÌ´Ù.

ÀÎÅͼÁÅÍ´Â ¶ÇÇÑ µðÆúÆ® ·¹º§·Î Á¤ÀÇÇÏ¿© ¸ðµç ºó¿¡°Ô Àû¿ë½Ãų ¼öµµ ÀÖ°í ¸Þ¼Òµåº°·Î Á¤ÀÇÇÒ ¼öµµ ÀÖÀ¸¸ç PostConstruct,PreDestroy¿Í °°Àº Äݹé ÀÎÅͼÁÆ® ¸Þ¼Òµåµµ °¡Áú ¼ö ÀÖ¾î ÄݹéÀ» º°µµÀÇ Çڵ鷯 Ŭ·¡½º·Î ó¸®ÇÒ ¼ö ÀÖ´Ù.

Ŭ¶óÀÌ¾ðÆ® ºä(Client view)
±âÁ¸ÀÇ EJB¸¦ È£ÃâÇϴ Ŭ¶óÀÌ¾ðÆ® ÄÚµå´Â ½ÇÁ¦ ºñÁî´Ï½º ¸Þ¼Òµå¸¦ ¼öÇàÇϱâ Àü¿¡ JNDI lookup ÄÚµå µî º¹ÀâÇÑ °úÁ¤À» ¼öÇàÇØ¾ß Çß´Ù. EJB 3.0¿¡¼­´Â ÀÎÁ§¼Ç°ú ´Ü¼øÈ­µÈ lookupÀ» ÅëÇØ EJB¸¦ ¾ò¾î¿À´Â °úÁ¤ÀÌ ´Ü¼øÇØÁ³´Ù. <¸®½ºÆ® 5> ¼­ºí¸´ Ŭ¶óÀÌ¾ðÆ®¸¦ »ìÆìº¸ÀÚ.

 <¸®½ºÆ® 5> ¼­ºí¸´ Ŭ¶óÀ̾ðÆ®


Ŭ·¡½º¿¡ ºÙ¾î ÀÖ´Â @EJB(name="ejb/lottery"...) ¾î³ëÅ×À̼ÇÀº ±âÁ¸ÀÇ ¿Í °°ÀÌ ÂüÁ¶µÇ´Â EJB¿¡ ´ëÇØ Á¤ÀǸ¦ ÇÑ °ÍÀ¸·Î EJB¸¦ JNDI lookupÀ¸·Î °¡Á®¿À±â À§ÇØ ÇÊ¿äÇÏ´Ù. ÀÌ·¸°Ô Á¤ÀǸ¦ Çϸé ÇØ´ç EJB ·¹ÆÛ·±½º´Â ENC(EnvironmentNaming Context)¿¡ ÇØ´çÇÏ´Â java:comp/env ³×ÀÓ½ºÆäÀ̽º¿¡ µé¾î°£´Ù. ¸Ç ¾Æ·§ÁÙÀÇ lookup Äڵ尡 ÇØ´ç EJB ·¹ÆÛ·±½º¸¦ ¾ò¾î¿À´Â °ÍÀ» º¸¿©ÁÖ°í Àִµ¥ ÀÌó·³ Ȩ °´Ã¼¸¦ ÅëÇÏÁö ¾Ê°í ¹Ù·Î ºñÁî´Ï½º °´Ã¼¸¦ ¹Þ¾Æ ¿Ã ¼ö ÀÖ´Ù. ºñÁî´Ï½º ÀÎÅÍÆäÀ̽º´Â ÄÁÅ×À̳ʰ¡ lookup ÇÒ ¶§ ±âÁ¸ÀÇ È¨ °´Ã¼ÀÇ create ¸Þ¼Òµå¿Í °°Àº°úÁ¤À» ´ë½ÅÇØ ÁØ´Ù. ÀÌ °æ¿ì¿¡´Â »õ·Î¿î Stateful ¼¼¼Ç ºó ÀνºÅϽº¸¦ »ý¼ºÇϰí ÀÌ¿¡ ´ëÇÑ ·¹ÆÛ·±½º¸¦ ¾ò¾î¿À°Ô µÈ´Ù.

ÀÎÁ§¼ÇÀ» ÀÌ¿ëÇϸé JNDI lookup º¸´Ù ´õ ½±°Ô EJB ·¹ÆÛ·±½º¸¦ ¾ò¾î¿Ã ¼ö ÀÖ´Ù. Çʵ忡 ºÙ¾îÀÖ´Â @EJB ¾î³ëÅ×À̼ÇÀº Çʵå
ÀÇ Å¸ÀÔÀ» ÂüÁ¶ÇÏ¿© ÇØ´ç EJB ·¹ÆÛ·±½º¸¦ Çʵ忡 ³Ö¾îÁØ´Ù.

À¥¼­ºñ½º ¿£µåÆ÷ÀÎÆ®
EJB 3.0¿¡¼­´Â ¼¼¼Ç ºóÀ» À¥¼­ºñ½º·Î ³ëÃâÇÏ´Â °Íµµ ¸Å¿ì °£´ÜÇØÁ³´Ù. ÀÌ¿¡ ´ëÇÑ °ÍÀº ƯÁý 3ºÎ JAX-WS 2.0À» ÂüÁ¶ÇÏÀÚ.

MDB(Message-Driven Bean)

¸Þ½ÃÁö¸¦ ó¸®Çϱâ À§ÇÑ MDBµµ EJB 3.0¿¡¼­ POJO ÇüÅ·δܼøÈ­ µÇ¾ú´Ù. <¸®½ºÆ® 6>¿¡¼­ º¸µíÀÌ MDBµµ ¾î³ëÅ×À̼ÇÀ» ÅëÇØ ÇÊ¿äÇÑ ¼³Á¤À» Çϸç ÀÌÁ¦ MessageListener¸¦ Á÷Á¢ implements ÇÏ°Ô µÈ´Ù.

 <¸®½ºÆ® 6> MDB ¿¹Á¦


µð½ºÅ©¸³ÅÍ
EJB 3.0¿¡¼­´Â ejb-jar.xml Ç¥ÁØ µð½ºÅ©¸³ÅÍÀÇ ´ëºÎºÐÀ» ¾î³ëÅ×À̼ÇÀ¸·Î ¼³Á¤ÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù. ¹°·Ð, ¾î³ëÅ×À̼ÇÀÌ ¸ðµç °ÍÀ» Ä¿¹öÇÏÁö ¾Ê±â ¶§¹®¿¡ ¾î¶² °æ¿ì¿¡´Â µð½ºÅ©¸³ÅÍ¿¡ ¼³Á¤ÀÌ ÇÊ¿äÇÒ ¶§°¡ ÀÖ±â´Â ÇÏ´Ù. ¶ÇÇÑ º¸¾È ¼³Á¤(security role)°ú °°ÀÌ ½ÇÁ¦ ·±Å¸ÀÓ È¯°æ¿¡¼­ ¹Ù²ð ¼ö ÀÖ´Â ºÎºÐÀº µð½ºÅ©¸³ÅÍ¿¡ ¼³Á¤À» ÇÏ´Â °ÍÀÌ ÁÁ´Ù. EJB 3.0¿¡¼­´Â µð½ºÅ©¸³ÅÍ ¿À¹ö¶óÀ̵ùÀ» Áö¿øÇϱ⠶§¹®¿¡ ÇÊ¿äÇÑ Á¤º¸¸¸ µð½ºÅ©¸³ÅÍ¿¡¼­ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¸¸¾à ¾î³ëÅ×ÀÌ¼Ç ´ë½Å¿¡ ¿¹Àüó·³ µð½ºÅ©¸³ÅÍ¿¡ ¸ðµç Á¤º¸¸¦ ÁÖ°í ½ÍÀ¸¸é ±×·¸°Ô ÇÒ ¼öµµ ÀÖ´Ù.

  ÀÚ¹Ù ÆÛ½Ã½ºÅϽº(Java Persistence) API

ÀÌÁ¦ºÎÅÍ´Â µ¥ÀÌÅ͸¦ °ü°èÇü µ¥ÀÌÅͺ£À̽º(RDBMS)¿¡ ÀúÀåÇϱâ À§ÇÑ ÆÛ½Ã½ºÅϽº ·¹ÀÌ¾î ±â¼úÀÎ ÀÚ¹Ù ÆÛ½Ã½ºÅϽº¿¡ ´ëÇØ¼­ »ìÆìº¸ÀÚ.

¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ´Ù·ç´Â °´Ã¼ ¸ðµ¨À» µ¥ÀÌÅͺ£À̽ºÀÇ µ¥ÀÌÅ͸𵨷ΠÀúÀåÇÏ°í ¸ÅÇÎÇϱâ À§ÇØ ´Ù¾çÇÑ ORM(Object-Relational Mapping) ±â¼úµéÀÌ Á¤ÀÇµÇ¾î ¿Ô´Ù. EJB¿¡¼­´Â ¿£Æ¼Æ¼ ºóÀÌ ±× ±â¼úÀ» Á¦°øÇؿԴÙ. ¿£Æ¼Æ¼ ºóÀº °³¹ßÇϱⰡ ±î´Ù·Ó°í EJB ÀÚüÀÇ º¹ÀâÇÑ ÇÁ·Î±×·¡¹Ö ¸ðµ¨À» »ç¿ëÇØ¾ß ÇÒ »Ó ¾Æ´Ï¶ó °´Ã¼°£ÀÇ »ó¼Ó(Inheritance) °ü°è¸¦ ¸ÅÇÎÇÏÁö ¸øÇÏ´Â µîÀÇ Á¦¾àÀÌ À־ ½ÇÁ¦·Î ¾²±â¿¡´Â ºÒÆíÇÏ¿´´Ù. µû¶ó¼­ ÃÖ±Ù¿¡´Â ÇÏÀ̹ö³×ÀÌÆ®¿Í °°Àº POJO ±â¹ÝÀÇ ´Ù¸¥ ORM ±â¼úµéÀÌ Á¡Á¡ ´õ Àα⸦ ²ø¾î ¿Ô´Ù. °á±¹ EJB 3.0 Ç¥ÁØÈ­ ±×·ìÀÎ JSR 220¿¡¼­ POJO¸¦ Ç¥ÁØÈ­µÈ ORM ±â¼ú·Î äÅÃÇÏ°Ô µÇ¾ú´Âµ¥ ±×°ÍÀÌ ¹Ù·ÎÀÚ¹Ù ÆÛ½Ã½ºÅϽº API ½ºÆåÀÌ´Ù. ½ÇÁ¦·Î ÀÚ¹Ù ÆÛ½Ã½ºÅϽº ½ºÆå Á¦Á¤¿¡´Â Gavin King(ÇÏÀ̹ö ³×ÀÌÆ® Á¦ÀÛÀÚ)À» Æ÷ÇÔÇÏ¿© ¿©·¯ ORM ±â¼ú °³¹ßÀÚµéÀÌ Âü¿©Ç߱⿡ ¶§¹®¿¡ À¯»çÇÑ Á¡ÀÌ ¸¹´Ù. ¸ÕÀú ÀÚ¹Ù ÆÛ½Ã½ºÅϽº°¡ °¡Áö´Â Ư¡ÀÌ ¾î¶² °ÍÀÌ ÀÖ´ÂÁö »ìÆìº¸ÀÚ.

¡Ü POJO ±â¹ÝÀÇ ´Ü¼øÇÑ ÆÛ½Ã½ºÅϽº ¸ðµ¨
¡Ü Ç¥ÁØÈ­µÈ O/R ¸ÅÇÎ - ¾î³ëÅ×ÀÌ¼Ç È¤Àº XML »ç¿ë, µðÆúÆ® ±ÔÄ¢ Àû¿ëÀ¸·Î ´ëºÎºÐÀÇ °æ¿ì º°µµÀÇ O/R ¸ÅÇÎÀ» ÁöÁ¤ÇÒ Çʿ䰡 ¾øÀ½
¡Ü °´Ã¼°£ÀÇ »ó¼Ó°ü°è Áö¿ø
¡Ü EJBQL¿¡ ºñÇØ¼­ ¹ßÀüµÈ Äõ¸® ¾ð¾î - Update/delete, ¼­ºêÄõ¸®, ³×ÀÌÆ¼ºê Äõ¸® Áö¿ø
¡Ü ÀÚ¹ÙEE ȯ°æ»Ó¸¸ ¾Æ´Ï¶ó ÀÚ¹ÙSE ȯ°æ Áö¿ø
¡Ü ÇÁ·Î¹ÙÀÌ´õ(Provider)À» Ç÷¯±×ÀÎ ÇØ¼­ »ç¿ë °¡´ÉPOJO ±â¹ÝÀÇ ´Ü¼øÈ­µÈ ÇÁ·Î±×·¡¹Ö ¸ðµ¨À» Áö¿øÇϱ⠶§¹®¿¡ ¿£Æ¼Æ¼ ºóó·³ º¹ÀâÇÑ EJB °´Ã¼ ¸ðµ¨´ë½Å ÀϹÝÀûÀÎ Àڹ٠Ŭ·¡½º Çϳª·Î ½±°Ô ¿£Æ¼Æ¼¸¦ ¸¸µé ¼ö ÀÖ´Ù. ÇÊ¿äÇÑ O/R ¸ÅÇÎÀº POJO À§¿¡ ¾î³ëÅ×À̼ÇÀ¸·Î Ç¥±âÇϰųª XML·Î Ç¥±âÇÒ ¼ö ÀÖ°í »ó¼Ó °ü°è¸¦ Áö¿øÇϹǷΠ±âÁ¸¿¡ Á¸ÀçÇÏ´ø °´Ã¼ ¸ðµ¨À» ½±°Ô ÀÚ¹Ù ÆÛ½Ã½ºÅϽº ¿£Æ¼Æ¼·Î ÀüÈ¯ÇØ¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ ¿£Æ¼Æ¼ °´Ã¼´Â POJO À̹ǷΠDTO(Data Transfer Object)·Î ¹Ù·Î »ç¿ëÀÌ °¡´ÉÇÏ´Ù.

¾ÕÀ¸·Î´Â OrderAppÀ̶ó°í ÇÏ´Â °£´ÜÇÑ ¾ÖÇø®ÄÉÀ̼ÇÀ» ÅëÇØ ÀÚ¹Ù ÆÛ½Ã½ºÅϽºÀÇ Àü¹ÝÀûÀÎ ³»¿ëÀ» »ìÆìº¼ °ÍÀÌ´Ù. OrderApp´Â EJB·Î ±¸ÇöµÈ ´Ü¼øÇÑ ÁÖ¹®½Ã½ºÅÛÀε¥ EJB¿¡¼­ ÀÚ¹Ù ÆÛ½Ã½ºÅϽº API¸¦ »ç¿ëÇÏ¿© µ¥ÀÌÅ͸¦ ´Ù·ç°Ô µÈ´Ù. ¿©±â¿¡¼­ »ç¿ëµÈ µ¥ÀÌÅÍ ¸ðµ¨Àº <±×¸² 1>°ú °°´Ù.

<±×¸² 1> ¿¹Á¦ µ¥ÀÌÅÍ ¸ðµ¨


¿£Æ¼Æ¼(Entity)

DBÀÇ µ¥ÀÌÅÍ ¸ðµ¨Àº ÀÚ¹Ù ÆÛ½Ã½ºÅϽº¿¡¼­ ¿£Æ¼Æ¼(Entity)·Î Ç¥ÇöµÈ´Ù. ¿£Æ¼Æ¼´Â µ¥ÀÌÅÍ ¸ðµ¨À» °´Ã¼ ¸ðµ¨·Î Ç¥ÇöÇÑ °ÍÀ¸·Î EJB 2.1ÀÇ ¿£Æ¼Æ¼ ºó°ú À¯»çÇÏÁö¸¸ ÀÚ¹Ù ÆÛ½Ã½ºÅϽº¿¡¼­´Â º°µµÀÇ ÀÎÅÍÆäÀ̽º ¾øÀÌ POJO Ŭ·¡½º·Î Ç¥ÇöµÈ´Ù. Ŭ·¡½º¿¡´Â ¿£Æ¼Æ¼ÀÓÀ» Ç¥½ÃÇϱâ À§ÇØ @Entity ¾î³ëÅ×À̼ÇÀÌ ´Þ·ÁÀÖ´Ù. ½ÇÁ¦·Î <±×¸² 1>ÀÇ µ¥ÀÌÅÍ ¸ðµ¨¿¡ ´ëÇØ¼­ ¿£Æ¼Æ¼°¡ ¾î¶»°Ô ¸¸µé¾î Áö´ÂÁö <¸®½ºÆ® 7>À» º¸µµ·Ï ÇÏÀÚ.

 <¸®½ºÆ® 7> ¿£Æ¼Æ¼ Ŭ·¡½º


¿£Æ¼Æ¼´Â ±âº»ÀûÀ¸·Î ÇϳªÀÇ ¿£Æ¼Æ¼ Ŭ·¡½º¿¡ ´ëÇØ ÇϳªÀÇDB Å×À̺íÀÌ ¸ÅÇεȴÙ(ÀÌ °æ¿ì¿¡´Â M:N(many to many) °ü°è¸¦ À§ÇÑ Å×À̺íÀÌ Çϳª ´õ ¸¸µé¾îÁø´Ù). Çʵ峪 ÀÚ¹ÙºóÁî(JavaBeans) ÇÁ·ÎÆÛƼ °ªÀº DBÀÇ Ä÷³¿¡ ¸ÅÇεȴÙ. ¾î¶² ºÎºÐ¿¡ ¾î³ëÅ×À̼ÇÀÌ ´Þ·ÁÀÖ´ÂÁö¿¡ µû¶ó¼­ Çʵå Á¢±Ù ŸÀÔ(Fieldaccess type)°ú ÇÁ·ÎÆÛƼ Á¢±Ù ŸÀÔ(Property access type)ÀÌ °áÁ¤µÈ´Ù. ¿¹Á¦¿¡¼­´Â Customer, Orders ¿£Æ¼Æ¼ÀÇ °æ¿ì ÇÊµå µéÀÌ ¸ÅÇεǰí, Item ¿£Æ¼Æ¼ÀÇ °æ¿ì ÇÁ·ÎÆÛƼ µéÀÌ DB Ä÷³¿¡ ¸ÅÇεȴÙ.

DB¿ÍÀÇ ¸ÅÇÎÀº O/R ¸ÅÇÎ ¾î³ëÅ×ÀÌ¼Ç È¤Àº XML(orm.xmlµð½ºÅ©¸³ÅÍ)·Î ÀÌ·ç¾îÁø´Ù. Primary Key¸¦ ³ªÅ¸³»´Â Çʵ峪 °ü°è(Relationship)¸¦ ³ªÅ¸³»´Â Çʵ带 Á¦¿ÜÇϰí´Â ´ëºÎºÐ µðÆúÆ®Á¤Ã¥¿¡ µû¶ó¼­ ¸ÅÇεDZ⠶§¹®¿¡ º°µµÀÇ ¾î³ëÅ×À̼ÇÀ» ÁöÁ¤ÇÏÁö ¾Ê¾Æµµ µÈ´Ù. ´ÙÀ½Àº À§ÀÇ ¿£Æ¼Æ¼¿¡¼­ »ç¿ëµÈ ¾î³ëÅ×À̼ǵ鿡 ´ëÇÑ ¼³¸íÀÌ´Ù. À̿ܿ¡µµ O/R ¸ÅÇο¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ¸¹Àº Ç¥ÁØ ¾î³ëÅ×À̼ÇÀÌ ÀÖ´Ù.

¡Ü @Id - Primary Key¿¡ ÇØ´çÇÏ´Â ID ÇʵåÀÓÀ» Ç¥½ÃÇÑ´Ù.
¡Ü @GeneratedValue - DB¿¡ ÀÇÇØ¼­ °ªÀÌ ÀÚµ¿À¸·Î »ý¼ºµÇ´Â ÇʵåÀÓÀ» Ç¥½ÃÇÑ´Ù.
¡Ü @OneToMany - 1:N °ü°è¸¦ À§ÇÑ Ç¥ÇöÇϱâ À§ÇÑ ÇʵåÀÓÀ» Ç¥½ÃÇÑ´Ù.
¡Ü @ManyToOne - N:1 °ü°è¸¦ À§ÇÑ Ç¥ÇöÇϱâ À§ÇÑ ÇʵåÀÓÀ» Ç¥½ÃÇÑ´Ù.
¡Ü @ManytoMany - M:N °ü°è¸¦ À§ÇÑ Ç¥ÇöÇϱâ À§ÇÑ ÇʵåÀÓÀ» Ç¥½ÃÇÑ´Ù.
¡Ü @JoinTable - °ü°è¸¦ Ç¥ÇöÇÒ ¶§ ¾î¶² Å×À̺íÀ» »ç¿ëÇÒ °ÍÀÎÁö¿¡ ´ëÇØ Ç¥½ÃÇÑ´Ù.

¿£Æ¼Æ¼´Â ÀÏ¹Ý Å¬·¡½º¿Í ºñ½ÁÇÏÁö¸¸ Ç×»ó µðÆúÆ® »ý¼ºÀÚ(Default constructor)¸¦ ¸¸µé¾î ÁÖ¾î¾ß ÇѴٴ Ư¡ÀÌ ÀÖ´Ù. µðÆúÆ® »ý¼ºÀÚ´Â ¿£Æ¼Æ¼ ÀνºÅϽº¸¦ ³»ºÎÀûÀ¸·Îµµ »ý¼ºÇؼ­ »ç¿ëÇϱ⠶§¹®¿¡ ÇÊ¿äÇÏ´Ù. ¶ÇÇÑ ¿¹Á¦ÀÇ °æ¿ì ¿£Æ¼Æ¼µéÀÌ Serializable °´Ã¼·Î ±¸ÇöµÇ¾ú´Âµ¥ ÀÌ´Â Çʼö»çÇ×Àº ¾Æ´ÏÁö¸¸ ¿£Æ¼Æ¼¸¦ DTO(Data Transfer Object)·Î »ç¿ëÇÏ¿© ¿ø°ÝÀ¸·Î º¸³¾ ¶§ ÇÊ¿äÇÏ´Ù.

EntityManager API

DB¿¡¼­ ¿£Æ¼Æ¼¸¦ °¡Á®¿À°Å³ª, »ý¼º, »èÁ¦ ÇÏ´Â ÀÏÀº ¸ðµÎ EntityManager API¸¦ ÅëÇØ¼­ ÀÌ·ç¾îÁø´Ù. EntityManager´Â ´©°¡ °ü¸®ÇÏ´À³Ä¿¡ µû¶ó Å©°Ô µÎ °¡Áö·Î ±¸ºÐµÈ´Ù.

¡Ü Container-managed EntityManager - ÀÚ¹ÙEE ȯ°æ¿¡¼­¸¸ »ç¿ëµÇ¸ç ÄÁÅÍÀ̳ʰ¡ EntityManager ÀνºÅϽºÀÇ LifecycleÀ» °ü¸®ÇÑ´Ù. JTA Æ®·£Àè¼Ç¿¡ ÀÚµ¿À¸·Î ¿¬°áµÇ±â ¶§¹®¿¡ ÀÚ¹ÙEE ȯ°æ¿¡¼­ À¯¿ëÇÏ´Ù.

¡Ü Application-managed EntityManager - ÀÚ¹ÙEE, ÀÚ¹ÙSEȯ°æ¿¡¼­ ¸ðµÎ »ç¿ëµÇ¸ç °³¹ßÀÚ°¡ EntityManager ÀνºÅϽºÀÇ LifecycleÀ» Á÷Á¢ °ü¸®ÇÏ¸ç Æ®·£Àè¼Çµµ Á÷Á¢ °ü¸®ÇØ¾ß ÇÑ´Ù.

EntityManager °´Ã¼´Â Container-managed EntityManagerÀÇ °æ¿ì ÀÎÁ§¼ÇÀ̳ª lookupÀ» ÅëÇØ¼­ ¹Ù·Î ¾ò¾î¿Ã ¼ö ÀÖ´Ù.

// ÀÎÁ§¼Ç ÀÌ¿ë. ÇØ´ç Çʵ峪 ¸Þ¼Òµå¿¡ @PersistenceContext Ç¥±â@PersistenceContext
private EntityManager em;

// lookup ÀÌ¿ë. Ŭ·¡½º¿¡ @PersistenceContext¸¦ Ç¥±âÇØ EntityManager¸¦ ENC ³×ÀÓ½ºÆäÀ̽º¿¡ µî·Ï
@PersistenceContext(name="em", unitName="HR")public class HelloBean implements Hello {//...
InitialContext ic = new InitialContext();EntityManager em = (EntityManager)ic.lookup("java:comp/env/em");

Application-managed EntityManagerÀÇ °æ¿ì EntityManagerFactory API¸¦ ÅëÇØ¼­ EntityManager °´Ã¼¸¦ ¾ò°Ô µÈ´Ù. ÀÚ¹ÙEE ȯ°æ¿¡¼­´Â ÀÎÁ§¼ÇÀ̳ª lookupÀ» ÅëÇØ EntityManagerFactory¸¦ ¾ò¾î¿Ã ¼ö ÀÖ´Ù.

@PersistenceUnit
private EntityManagerFactory emf;//...
EntityManager em = emf.createEntityManager();
¿£Æ¼Æ¼ °´Ã¼¸¦ ¸¸µå´Â °ÍÀº ÀÏ¹Ý ÀÚ¹Ù °´Ã¼¸¦ »ý¼ºÇϵíÀÌ new»ý¼ºÀÚ¸¦ »ç¿ëÇÏ¸é µÇ¸ç À̸¦ DB¿¡ ÀúÀåÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌEntityManager.persist() ¸Þ¼Òµå¸¦ È£ÃâÇØ¾ß ÇÑ´Ù.

Customer customer = new Customer(id, name, address);em.persist(customer);

DB¿¡¼­ ÇϳªÀÇ ¿£Æ¼Æ¼ °´Ã¼¸¦ °¡Á®¿À·Á¸é EntityManager.find() ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù. ÀÌ °æ¿ì¿¡´Â Primary key¿¡ ÇØ´çÇÏ´Â °ªÀ» ÅëÇØ¼­ ¿£Æ¼Æ¼¸¦ °¡Á®¿Ã ¼ö ÀÖ´Ù.

Customer c = em.find(Customer.class, id);
¶Ç´Â ÀÚ¹Ù ÆÛ½Ã½ºÅϽº Äõ¸® ·©±ÍÁö(Java Persistence QueryLanguage)¸¦ ÀÌ¿ëÇÏ¿© ¸ðµç ¿£Æ¼Æ¼ µéÀ» °¡Á®¿À°Å³ª ƯÁ¤ Çʵ尪À» ºñ±³ÇÏ¿© ¿£Æ¼Æ¼¸¦ °¡Á®¿Ã ¼ö ÀÖ´Ù.

Query query = em.createQuery("select c from Customer c");List list = query.getResultList();
¿£Æ¼Æ¼ÀÇ Çʵ带 ¼öÁ¤ÇÏ·Á¸é ¿£Æ¼Æ¼ °´Ã¼ÀÇ Çʵ带 ¼öÁ¤ÇÏ¸é µÈ´Ù. ÇØ´ç Çʵå´Â EntityManager.flush() ¸¦ È£ÃâÇϰųª Æ®·£Àè¼ÇÀÌ commit µÉ ¶§ DB¿Í µ¿±âÈ­ µÈ´Ù.

Customer c = em.find(Customer.class, id);
c.setAddress(address);
¿£Æ¼Æ¼¸¦ »èÁ¦ÇÒ ¶§¿¡´Â EntityManager.remove()¸¦ È£ÃâÇÑ´Ù.

em.remove(customer);

¿£Æ¼Æ¼ °£ÀÇ °ü°è(Relationship)´Â ´Ù¸¥ ¿£Æ¼Æ¼¿¡ ´ëÇÑ ·¹ÆÛ·±½º·Î Ç¥ÇöµÇ´Âµ¥ °ü°è¸¦ ¼öÁ¤ÇÏ·Á¸é ·¹ÆÛ·±½º °ªÀ» ¹Ù²Ù¸é µÈ´Ù. ȤÀº ManyToMany, OneToMany¿Í °°ÀÌ ¿©·¯ °³ÀÇ ¿£Æ¼Æ¼¿Í °ü°è¸¦ ¸Î°í ÀÖÀ» ¶§´Â Collection °´Ã¼·Î Ç¥ÇöµÇ¹Ç·Î ÇØ´çmicro software 2006+7 129
Collection ³»¿ëÀ» ¹Ù²Ù¸é µÈ´Ù.

public class Customer //...
@OneToMany(mappedBy="customer", cascade={CascadeType.
PERSIST, CascadeType.REMOVE})
private List orders;
public void addOrder(Orders o){orders.add(o);
}

°ü°èÀÇ °æ¿ì¿¡´Â ÇØ´ç ¿£Æ¼Æ¼¿¡ ´ëÇØ ¿ÀÆÛ·¹À̼Ç(persist,remove µî) ÇÒ ¶§ °ü°èµÈ ¿£Æ¼Æ¼µµ °°ÀÌ persist, remove µÉ °ÍÀÎÁö¸¦ ÁöÁ¤ÇÏ´Â cascade ŸÀÔÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ±âº»ÀûÀ¸·Î´Â cascade °ªÀÌ ÁöÁ¤µÇÁö ¾ÊÁö¸¸ À§¿Í °°ÀÌ ÁöÁ¤Çϸé Customer¿£Æ¼Æ¼°¡ »ý¼º, »èÁ¦µÉ ¶§ °ü°èµÈ Orders ¿£Æ¼Æ¼µµ °°ÀÌ »ý¼º, »èÁ¦µÈ´Ù.

Äõ¸®(Query)

ÀÚ¹Ù ÆÛ½Ã½ºÅϽº¿¡¼­´Â ÀÚ¹Ù ÆÛ½Ã½ºÅϽº Äõ¸® ·©±ÍÁö(JavaPersistence Query Language)¶ó°í ÇÏ´Â °´Ã¼ ÁöÇâÀûÀÎ Äõ¸® ¾ð¾î¸¦ Á¦°øÇÑ´Ù. EJBQL¿Í À¯»çÇÏÁö¸¸ ÀÚ¹Ù ÆÛ½Ã½ºÅϽº Äõ¸®´Â Bulk Update, Delete ¹® »Ó¸¸ ¾Æ´Ï¶ó ¼­ºêÄõ¸®(Subquery)µµ Áö¿øÇϹǷΠ±× Ȱ¿ë¹üÀ§°¡ ³Ð´Ù. ¶ÇÇÑ DB¿¡ ƯȭµÈ SQL ¹®À» Á÷Á¢ »ç¿ëÇÒ ¼ö ÀÖ´Â ³×ÀÌÆ¼ºê Äõ¸®(Native Query)µµ Áö¿øÇÑ´Ù.
Äõ¸®¸¦ ½ÇÁ¦·Î »ç¿ëÇÒ ¶§´Â µ¿ÀûÀ¸·Î ¹Ù·Î »ý¼ºÇؼ­ »ç¿ëÇϰųª ³×ÀÓµå Äõ¸®(Named query)¶ó°í ÇÏ´Â Á¤ÀûÀÎ ¹æ½ÄÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.

// µ¿Àû Äõ¸®
Query query = em.createQuery("select c from Customer c wherename=:name");
query.setParameter("name", name);List list = query.getResultList();
// Á¤Àû Äõ¸® - @NamedQuery´Â ¿£Æ¼Æ¼¿¡ ¸í±â@NamedQuery(name="findCustomerByName", query="select cfrom Customer c where c.name=:name")
Query query = em.createNamedQuery("findCustomerByName");query.setParameter("name", name);List list = query.getResultList();
³×ÀÓµå Äõ¸®(Named Query)´Â ¿£Æ¼Æ¼ Ŭ·¡½º¿¡ Á÷Á¢ ¸í±âµÇ¸ç ÀçȰ¿ëµÇ±â ¶§¹®¿¡ ÇØ´ç ¿£Æ¼Æ¼¿¡ ´ëÇØ¼­ ÀÚÁÖ È°¿ëµÇ´Â Äõ¸®ÀÇ °æ¿ì ¹Ì¸® Á¤ÀÇÇØ ³õ°í »ç¿ëÇÏ¸é Æí¸®ÇÏ´Ù.

¿£Æ¼Æ¼ÀÇ ¶óÀÌÇÁ»çÀÌŬ°ú ÆÛ½Ã½ºÅϽº ÄÁÅØ½ºÆ®

EntityManagerÀÇ µ¿ÀÛÀº ÆÛ½Ã½ºÅϽº ÄÁÅØ½ºÆ®(PersistenceContext)¿Í ÀÌ¿Í °ü·ÃµÈ ¿£Æ¼Æ¼ ÀνºÅϽºÀÇ ¶óÀÌÇÁ»çÀÌŬÀ» ¾Ë¾Æ¾ß ÀÌÇØÇÒ ¼ö ÀÖ´Ù. ÀÌ ºÎºÐÀº ÀÚ¹Ù ÆÛ½Ã½ºÅϽº¿¡¼­ Áß¿äÇÏ°íµµ Á¶±Ý º¹ÀâÇÑ ºÎºÐÀÌ´Ù. ÆÛ½Ã½ºÅϽº ÄÁÅØ½ºÆ®(PersistenceContext)´Â ÇöÀç °ü¸®µÇ°í ÀÖ´Â ¿£Æ¼Æ¼ ÀνºÅϽºµéÀÇ ÁýÇÕÀ» ¸»Çϴµ¥ ¿£Æ¼Æ¼ ÀνºÅϽºÀÇ »óÅ´ EntityManager ¿ÀÆÛ·¹À̼ǰú ¹ÐÁ¢ÇÑ °ü·ÃÀÌ ÀÖ´Ù. <±×¸² 2>´Â ¿£Æ¼Æ¼ÀÇ »óŰ¡ ¾î¶»°Ô º¯È­ÇÏ´ÂÁö º¸¿©ÁØ´Ù.

<±×¸² 2> EntityManager ¿ÀÆÛ·¹À̼ǿ¡ µû¸¥ ¿£Æ¼Æ¼ÀÇ ¶óÀÌÇÁ»çÀÌŬ


¡Ü New - ¿£Æ¼Æ¼ ÀνºÅϽº°¡ »ý¼ºµÇ¾úÀ» ¶§ÀÇ »óÅ·ΠDB¿Í ¿¬°áµÇ¾î ÀÖÁö ¾Ê´Ù. persist( )¸¦ ÅëÇØ¼­ DB¿¡ ÀúÀåµÇ¸çmanaged »óŰ¡ µÈ´Ù.

¡Ü Managed - ¿£Æ¼Æ¼ ÀνºÅϽº°¡ ÆÛ½Ã½ºÅϽº ÄÁÅØ½ºÆ®¿¡ ÀÇÇØ¼­ °ü¸®µÇ´Â »óÅ·Π¿£Æ¼Æ¼ ÀνºÅϽº °ªÀÇ º¯È­°¡ DB¿¡ ¹Ý¿µµÈ´Ù. Container-managed EntityManagerÀÇ °æ¿ì Æ®·£Àè¼ÇÀÌ Á¾·áµÇ¸é ¸ðµç ¿£Æ¼Æ¼´Â detached »óŰ¡ µÈ´Ù.

¡Ü Detached - ¿£Æ¼Æ¼ ÀνºÅϽº°¡ ÆÛ½Ã½ºÅϽº ÄÁÅØ½ºÆ®¿¡ ÀÇÇØ¼­ ´õ ÀÌ»ó °ü¸®µÇÁö ¾Ê´Â »óÅ·ΠDB¿Í ¿¬°áµÇÁö ¾Ê´Â´Ù.
EntityManager.merge( )¸¦ ÅëÇØ¼­ ´Ù½Ã managed »óÅ·Π¸¸µé ¼ö ÀÖ´Ù.

¡Ü Removed - DB¿¡¼­ ÇØ´ç ¿£Æ¼Æ¼°¡ »èÁ¦µÉ »óÅÂÀÌ´Ù.

ÆÐŰ¡(Packaging)

ÀÌÁ¦ ¿£Æ¼Æ¼ Ŭ·¡½ºµéÀ» ½ÇÁ¦·Î ¾ÖÇø®ÄÉÀ̼ǿ¡ ÆÐŰ¡ ½ÃŰ´Â ¹æ¹ý¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ. ¿£Æ¼Æ¼ Ŭ·¡½º¸¦ ÆÐŰ¡ ÇÒ ¶§´ÂMETA-INF/persistence.xml µð½ºÅ©¸³ÅͰ¡ ²À ÇÊ¿äÇÏ´Ù.

persistence.xmlÀº °ü·ÃµÈ ¿£Æ¼Æ¼ Ŭ·¡½ºµé°ú ÀÌ¿¡ ´ëÇÑ DB

DataSource ¼³Á¤ µî°ú °°ÀÌ ÆÛ½Ã½ºÅϽº À¯´Ö(PersistenceUnit_¿¡ ´ëÇÑ Á¤º¸¸¦ ´ã°í ÀÖ´Ù. ÆÛ½Ã½ºÅϽº À¯´ÖÀº ¿£Æ¼Æ¼¸¦ ¹­´Â ´ÜÀ§À̸ç À̰ÍÀº ÇϳªÀÇ DB¿¡¸¸ ¸ÅÇεȴÙ. ÆÛ½Ã½ºÅϽº À¯´ÖÀº À¯´Ö À̸§(Unit Name) ½Äº°ÀÚ¸¦ °¡Áö´Âµ¥ ÀÌ ½Äº°ÀÚ´Â EntityManager³ª EntityManagerFactory¸¦ ¾òÀ» ¶§ »ç¿ëµÈ´Ù.

// persistence.xml
<persistence version="1.0"xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="orderunit"transaction-type="JTA"><jta-data-source>jdbc/sample</jta-data-source><properties> <!-- ÇÁ·Î¹ÙÀÌ´õ º° ¼³Á¤ --><property name="toplink.ddl-generation"value="createtables"/></properties>
</persistence-unit>
</persistence>

ÆÐŰ¡Àº ´ÙÀ½°ú °°ÀÌ JAR ÆÄÀÏÀ̳ª µð·ºÅ丮¿¡ ÇÒ ¼ö ÀÖÀ¸¸ç ÀÌ ´ÜÀ§¸¦ ÆÛ½Ã½ºÅϽº À¯´Ö ·çÆ®(Persistence Unit Root)¶ó°í ÇÑ´Ù.

¡Ü EAR library µð·ºÅ͸®ÀÇ JAR ÆÄÀÏ(e.g. orderapp.ear!/lib/entities.jar)¡Ü EAR ·çÆ® µð·ºÅ͸®ÀÇ JAR ÆÄÀÏ(e.g. orderapp.ear!/entities.jar)¡Ü EJB JAR ÆÄÀÏ (e.g. orderapp.ear!/orderapp-ejb.jar)¡Ü WAR ÆÄÀÏÀÇ WEB-INF/classes
(e.g. orderapp-web.war!/WEB-INF/classes)¡Ü WAR ÆÄÀÏÀÇ WEB-INF/lib¿¡ JAR ÆÄÀÏ(e.g. orderapp-web.war!/WEB-INF/lib/entities.jar)¡Ü application clientÀÇ JAR ÆÄÀÏ(e.g. orderapp.ear!/orderapp-client.jar)

ÀÚ¹ÙSE ȯ°æ¿¡¼­ »ç¿ëÇϱâ

ÀÚ¹ÙSE ȯ°æ¿¡¼­ »ç¿ëÇÒ ¶§´Â Application-managedEntityManager¸¸ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç JDBC µå¶óÀ̹ö¿¡ ±¹ÇÑµÈ ·ÎÄÃ(resource-local) Æ®·£Àè¼Ç¸¸ ¾µ ¼ö ÀÖ´Ù.

EntityManagerFactory emf = Persistence.createEntityManagerFactory("orderunit");
EntityManager em = emf.createEntityManager();//...
EntityTransaction tx = em.getTransaction();tx.begin();
em.persist(customer);
tx.commit();
//...
em.close();
emf.close();

ÀÚ¹ÙSE¿¡¼­´Â javax.persistence.spi.Persistence ºÎÆ®½ºÆ®·¦API¸¦ »ç¿ëÇØ¼­ EntityManagerFactory¸¦ ¾ò´Â´Ù´Â °Í°ú EntityTransaction API¸¦ ÀÌ¿ëÇÏ¿© Á÷Á¢ Æ®·£Àè¼Ç ÄÁÆ®·ÑÀ» ÇØÁÖ¾î¾ß ÇÑ´Ù´Â Â÷À̰¡ ÀÖ´Ù. ¶ÇÇÑ persistence.xml ÆÄÀÏÀÇ À§Ä¡´Â Ŭ·¡½ºÆÐ½º »ó¿¡¼­ META-INF/persistence.xml¿¡ ÀÖ¾î¾ß Çϸç, ÀÚ¹ÙEE ȯ°æ°ú ´Þ¸® ´ÙÀ½°ú °°ÀÌ ¸ðµç ¿£Æ¼Æ¼ Ŭ·¡½º¸¦ ¸í½ÃÀûÀ¸·Î ³ª¿­ÇØ ÁÖ¾î¾ß ÇÑ´Ù.

<persistence-unit name="orderunit">
<class>orderapp.entities.Customer</class>
<class>orderapp.entities.Item</class>
<class>orderapp.entities.Orders</class>

Áö±Ý±îÁö EJB 3.0°ú ÀÚ¹Ù ÆÛ½Ã½ºÅϽº API 1.0 ³»¿ë°ú ¿¹Á¦Äڵ带 »ìÆìº¸¾Ò´Ù. ¸¹Àº ³»¿ëÀ» ±íÀÌ ÀÖ°Ô ´Ù·çÁö´Â ¸øÇÏ¿´Áö¸¸ Àü¹ÝÀûÀΠƯ¡À» »ìÆìº¸´Âµ¥ µµ¿òÀÌ µÇ¾úÀ¸¸®¶ó ¹Ï´Â´Ù.

2006³â ÀÚ¹Ù¿ø(JavaOne)¿¡¼­µµ EJB 3.0°ú ÀÚ¹Ù ÆÛ½Ã½ºÅϽº¿¡ °ü·ÃµÈ ¼¼¼ÇÀÌ ¸¹¾Ò´Ù. ÇÊÀÚÀÇ ºí·Î±×¿¡ °¡¸é ¼¼¼Ç¿¡ ´ëÇÑ ¼Ò°³¿Í ÇÁ¸®Á¨Å×ÀÌ¼Ç PDF¸¦ ¹ÞÀ» ¼ö ÀÖ´Ù(http://weblogs.java.net/blog/guruwons/archive/2006/06/ejb_30_sessions.html). @

Âü°í ÀÚ·á:1. Java EE 5 Tutorial - http://java.sun.com/javaee/5/docs/tutorial/doc/2. SDN Article: The Java Persistence API - A Simpler Programming Model forEntity Persistence - http://java.sun.com/developer/technicalArticles/J2EE/jpa/3. JSR 220 - http://jcp.org/en/jsr/detail?id=220ÀÌ´ÞÀÇ µð½ºÄÏ : EJB30samp.zip


* ÀÌ ±â»ç´Â ZDNet KoreaÀÇ Á¦ÈÞ¸ÅüÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù.
°ü·Ã±â»ç
À¥ÀÇ ÁøÈ­ ¾îµð±îÁö ¿Ô³ª?
ÀÚÀ̺ê,¡¸À¥ 2.0¡¹±¸Çö Çù¾÷ ¼ÒÇÁÆ®¿þ¾î °³¹ß Áß
XP °³¹ßÀ» À§ÇÑ °³¹ß »ý»ê¼º Çâ»ó ÆÄ³ë¶ó¸¶
½ã, µ¥½ºÅ©Åé À§ÇÑ ÀÚ¹Ù Ç÷§Æû¡¸ÀÚ¹Ù SE 6¡¹Á¦°ø
¿ÀÇ ¼Ò½º ¶óÀ̺귯¸® Ȱ¿ë
°³¹ß »ý»ê¼º Çâ»óÀ» À§ÇÑ Á¶¾ð
¡¸¼ÒÇÁÆ®¿þ¾î Ç÷§Æû¡¹°ø°³ - ¹Ì·¡ Çõ½ÅÀÇ Å°¿öµå
±¹³» ù¡¸¿ÀǼҽº °³¹ß ÇÁ·ÎÁ§Æ®¡¹Winter of Code Á¡È­!
µ¶ÀÚÀÇ°ß ³²±â±â (·Î±×ÀÎ ÈÄ µ¶ÀÚ ÀǰßÀ» ³²±â½Ç ¼ö ÀÖ½À´Ï´Ù.)
¾ÆÀ̵ð ºñ¹Ð¹øÈ£
 
 
?>
[DDD ¨ç] µµ¸ÞÀÎ ÁÖµµ °³¹ß
À©µµ¿ìCE µð¹ö±ë¿¡ °üÇÑ 12°¡Áö...
'°¡»óÈ­ °ü¸®'¿¡ ´ëÇÑ 10°¡Áö ...
[±â°í]±×¸° ½ºÅ丮Áö·Î °¡´Â±æ
°¡»óÈ­¿¡ ½ÇÆÐÇÏ´Â 10°¡Áö ÀÌÀ¯
[Ã¥¼Ò°³] À¥ °³¹ßÀÚ¸¦ À§ÇÑ ½ºÇÁ...
À¥ ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÑ ÆÐÅ¶Ææ½º
[Weekend TV]'½ºÅ¸Å©·¡ÇÁÆ®' ¼º´ë¸ð»çÀÇ ´ÞÀÎ [00:01:20]
ÁøÇà ·ùÁØ¿µ ±âÀÚ, Á¦ÀÛ À¯È¸Çö PD
[¼­¹ü±ÙÀÇ À¯ÄèÇÑ ¸®ºä]'º£Å×¶û' ·¹ÀÎÄÞ VS '½ÅÂü³»±â' TG»ïº¸ÀÇ 'PMP½ÃÀå ÀïÅ»Àü' [00:03:42]
ÁøÇà ·ùÁØ¿µ ±âÀÚ, Á¦ÀÛ À¯È¸Çö PD
º¸¾È°­È­ ±¸±Û ¡°À©µµ ¹ö¸®°í À¥À¸...
¡®À©µµXP¡¯½Ã´ë Æó¸·, »ç¿ëÀÚ¿¡°Ô...
ÀÎÅÍ³Ý ¹ðÅ· ºê¶ó¿ìÀú´Â µû·Î ÀÖ´Ù...
¡®³ªÈ¦·Î ¾×ƼºêX¡¯¡¦¼¼°è ÀÎÅͳݰú...
SKT µ¶Á¡ 800MHz Á֯ļö,...
´ÙÀ½ vs Á¶Áßµ¿, Á¤¸éÃæµ¹·Î Ä¡...
[Àλç]¹®È­Ã¼À°°ü±¤ºÎ
BT, 'GSM-CDMA Áö¿ø' ...
SKT '¾ÆÀ̽º¹Ú½º', ÅëÇÕ UC...
2011³â, LCD TV 10´ë ...
´Ù¿ì±â¼ú, À̸ÞÀÏ ¾ÆÄ«À̺ù ¼Ö·ç¼Ç...
 
 
The Korean edition of 'ZDNet' is published under license from CNET Networks, Inc., San Francisco, CA, USA. Editorial items appearing in 'ZDNet Korea' that were originally published in the US Edition of 'ZDNet', 'CNET', and 'CNET News.com' are the copyright properties of CNET Networks, Inc. or its suppliers.
Copyright ¨Ï 2008 CNET Networks, Inc. All Rights Reserved. 'ZDNet', 'CNET' and 'CNET News.com' are trademarks of CNET Networks, Inc.