.
.
Enterprise Java Technologies Technical Tips
.
2004³â 2¿ù 3ÀÏ    

Enterprise Java Technologies Tech Tips¿¡ ¿À½Å ¿©·¯ºÐÀ» ȯ¿µÇÕ´Ï´Ù. Java 2 Platform, Enterprise Edition (J2EE)¿¡ ±â¹ÝÇÑ enterprise Java technologies ¿Í APIsÀÇ »ç¿ë¿¡ °üÇÑ ÃֽŠÁ¤º¸¸¦ ¾ò¾î °¡½Ã±â ¹Ù¶ø´Ï´Ù. ÀÌ ±Û¿¡¼­´Â Java 2 Java 2, Enterprise Edition, v 1.4 ¸¦ »ç¿ëÇÕ´Ï´Ù. ´Ù¿î·Îµå

À̹ø È£¿¡¼­´Â,

.JAXB ¶óÀ̺귯¸®·Î ¿ÀºêÁ§Æ® ³ª¿­Çϱâ
.¿£ÅÍÇÁ¶óÀÌÁî ºóÀ» ÀÌ¿ëÇÑ Å¸ÀÌ¸Ó »ç¿ë

¸¦ ´Ù·ç°Ô µË´Ï´Ù.

ÀúÀÚ Robert Eckstein

.

JAXB ¶óÀ̺귯¸®·Î ¿ÀºêÁ§Æ® ³ª¿­Çϱâ

XMLÀº ÀÌÁ¦ µ¥ÀÌÅ͸¦ Ç¥ÇöÇϴ ǥÁØÀ̸ç, Java ¿ÀºêÁ§Æ®¸¦ XML·Î ³ª¿­ÇÒ ¶§ »ç¿ëÇÏ´Â ´Ù¾çÇÑ XML±â¼úµéÀÌ °³¹ßµÇ¾î ¿Ô´Ù. ±× Áß ÀÚ¹Ù °³¹ßÀڵ鿡°Ô Àͼ÷ÇÑ µÎ°¡Áö ±âº» ±â¼úÀº Simple API for XML (SAX)°ú Document Object Model (DOM) APIsÀÌ´Ù. ±×·¯³ª Á¾Á¾ ÇÁ·Î±×·¡¸ÓµéÀº Áï°¢ÀûÀÎ Å×½ºÆ®¿¡ Á» ´õ ƯÁ¤ÀûÀ¸·Î Àû¿ëÇÒ¸¸ÇÑ ±â¼úÀ» ÇÊ¿ä·Î Çϸç, ÀÌ °æ¿ì ¿ÀºêÁ§Æ® µ¥ÀÌÅ͸¦ ³ª¿­ÇÏ´Â µ¥ Á» ´õ °£´ÜÇÑ XML ±â¼úÀ» ¿øÇÒ °ÍÀÌ´Ù.

JAXB(XML ¹ÙÀεùÀ» À§ÇÑ Java API)¸¦ »ìÆìº¸ÀÚ. JAXB´Â ÀÌÁ¦ Java Web Services Development PackÀÇ Ç¥ÁØÀÌ µÇ¾ú´Ù. JAXB´Â XML ½ºÅ°¸¶·ÎºÎÅÍ Å¬·¡½º µ¥ÀÌÅ͸¦ ¹ÙÀεùÇϰųª, XML·ÎºÎÅÍ ³ª¿­Çϰųª ¹Ý´ë·Î XML·Î ³ª¿­ÇÏ´Â µîÀÇ ´Ù¾çÇÑ Å½ºÅ©¸¦ ¼öÇàÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.

À̹ø Å×Å©ÆÁ¿¡¼­´Â JAXB APIs¸¦ ¼Ò°³ÇÏ·Á°í ÇÑ´Ù. JAXB ¹ÙÀεù ÄÄÆÄÀÏ·¯¸¦ ÀÌ¿ëÇÏ¿© XML Schema ¹®¼­·ÎºÎÅÍ Java Ŭ·¡½ºµéÀ» »ý¼ºÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁØ´Ù. ÀÌ ÆÁ¿¡¼­´Â ¶ÇÇÑ ¿ÀºêÁ§Æ®µéÀ» XML ÆÄÀÏ¿¡ ³ª¿­ÇÏ´Â ¹ý(marshalling)°ú, ¹Ý´ë·Î XML·ÎºÎÅÍ ¿ÀºêÁ§Æ®µéÀ» ³ª¿­ÇÏ´Â ¹æ¹ý(unmarshalling)À» ¼Ò°³ÇÑ´Ù.

ÀÌ ÆÁ¿¡¼­ ¼Ò°³ÇÏ´Â ´ë·Î ¿¹Á¦¸¦ ±¸µ¿Çϱâ Àü¿¡ Java Web Services Developer PackÀ» ´Ù¿î·Îµå ¹Þ¾Æ¾ßÇÑ´Ù. ±× ÈÄ jaxb/lib¿Í jwsdp-shared/lib µð·ºÅ丮¸¦ ¸ðµÎ º¸°í °¢°¢ÀÇ JAR ÆÄÀϵéÀÌ »ç¿ëÀÚÀÇ Java Ŭ·¡½º°æ·Î¿¡ Á¤È®È÷ Æ÷ÇԵǾîÀÖ´ÂÁö È®ÀÎÇÏÀÚ.

¶Ç´Â, À̹ø ÆÁ¿¡ ¼ö¹ÝµÈ WAR ÆÄÀÏ¿¡¼­ Á¦°øÇÏ´Â À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» ±¸µ¿ÇÒ ¼öµµ ÀÖ´Ù. À̹ø ÆÁ¿¡¼­ º¸¿©ÁÖ´Â ¼Ò½º ÄÚµå´Â WAR ÆÄÀÏ¿¡ Æ÷ÇԵǾî ÀÖÀ¸³ª ÀÌ ¼Ò½º ÄÚµå´Â servletÀ» »ç¿ëÇϱâ À§ÇØ ¾à°£ ¼öÁ¤µÈ °ÍÀÌ´Ù. WAR ÆÄÀÏÀ» »ç¿ëÇÏ·Á¸é, Sun Java System Application Server¸¦ ´Ù¿î·Îµå¹Þ°í, ±× ¾È¿¡ Java Web Services Developer PackÀ» ´Ù¿î·Îµå, ¼³Ä¡Çϱ⠹ٶõ´Ù. ±×·¯¸é °¢°¢ÀÇ ÇÊ¿ä ¶óÀ̺귯¸®°¡ J2EE ȯ°æ¿¡ ³ªÅ¸³¯ °ÍÀÌ´Ù. Ant ÆÄÀÏÀÌ Æ÷ÇԵǾî ÄÄÆÄÀϰú ÆÐŰ¡¿¡ µµ¿òÀ» ÁÙ °ÍÀÌ´Ù.

¹ÙÀεù ÄÄÆÄÀÏ·¯

JAXB¿¡ ´ëÇØ¼­ °¡Àå ¸ÕÀú ¹è¿ö¾ßÇÒ °ÍÀº XML ½ºÅ°¸¶¸¦ Java Ŭ·¡½º¿¡ ¹ÙÀεùÇÏ´Â ¹ýÀÌ´Ù. ¹ÙÀεù ÀÛ¾÷Àº XML ½ºÅ°¸¶¸¦ °¡Áö°í, ±× ½ºÅ°¸¶¿¡ ÀÇÇØ Á¤ÀÇµÈ µ¥ÀÌÅÍ ¸ðµ¨À» Ç¥ÇöÇÒ ¼ö ÀÖ´Â Java ÀÎÅÍÆäÀ̽ºµéÀ» »ý¼ºÇÑ´Ù. ÀÌ ÀÛ¾÷À» À§ÇÑ ÅøÀ» ¹ÙÀεù ÄÄÆÄÀÏ·¯¶ó°í ºÎ¸¥´Ù. ¹ÙÀεù ÄÄÆÄÀÏ·¯´Â W3C XML ½ºÅ°¸¶¸¦ Çã¿ëÇÏ°í ±×·ÎºÎÅÍ ÀûÀýÇÑ ÀÎÅÍÆäÀ̽º¿Í Ŭ·¡½ºµéÀ» ²ø¾î¿Â´Ù.

´ÙÀ½Àº JAXB Ŭ·¡½º¸¦ »ý¼ºÇÏ´Â °£´ÜÇÑ ½ºÅ°¸¶ÀÌ´Ù.

   <?xml version="1.0" encoding="UTF-8"?>

   <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  
       <xs:import namespace="http://www.w3.org/XML/1998/namespace"
        schemaLocation="http://www.w3.org/2001/xml.xsd" />

       <xs:element name="birthdate">
         <xs:complexType>
           <xs:sequence>
             <xs:element name="month" type="xs:string" />
             <xs:element name="day" type="xs:int" />
             <xs:element name="year" type="xs:int" />
           </xs:sequence>  
         </xs:complexType>
       </xs:element>

     </xs:schema>

À̹ø ÆÁ¿¡ ¼ö¹ÝµÇ´Â ¼Ò½º Äڵ忡¼­ Birthdate.xsd ½ºÅ°¸¶¸¦ ãÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ ½ºÅ°¸¶´Â Birthdate¶ó´Â À̸§ÀÇ °£´ÜÇÑ ¿ä¼Ò¸¦ Á¤ÀÇÇÑ´Ù. Birthdate ¿ä¼Ò´Â ¼¼°¡Áö ¼Ó¼º [month (String), day (integer)¿Í year(¶Ç´Ù¸¥ integer)]À» Á¤ÀÇÇÏ´Â À͸íÀÇ complexTypeÀ» °®°íÀÖ´Ù.

À̸¦ Java ÀÎÅÍÆäÀ̽º¿¡ ¹ÙÀεùÇϱâ À§ÇØ XML ¹ÙÀεù ÄÄÆÄÀÏ·¯¸¦ È£ÃâÇÏÀÚ. À̸¦ À§Çؼ­´Â xjc ÄÚ¸àµå¸¦ ±¸µ¿ÇؾßÇϸç, ÀÌ ÄÚ¸àµå´Â Java Web Services Developer Pack installation ÀÇ jaxb/bin µð·ºÅ丮¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. (xjc.bat ÆÄÀÏÀ» À©µµ¿ì ȯ°æ¿¡¼­ ºÒ·¯¿À°Å³ª, xjc.sh ÆÄÀÏÀ» Solaris Operating System ¶Ç´Â ´Ù¸¥ À¯´Ð½º ȯ°æ¿¡¼­ ºÒ·¯¿Â´Ù) ´ÙÀ½ÀÇ ÄÚ¸àµå ¶óÀÎ ±¸¹®À» »ç¿ëÇÏÀÚ.

   xjc -p <target_package> -d <dir> schema.xsd

<target_package>ÀÌ »ý¼ºµÈ ÆÄÀϵéÀ» À§ÇÑ ÆÐŰÁöÀÇ À̸§À̰í, <dir>´Â ±× ÆÄÀϵéÀÌ À§Ä¡ÇÑ µð·ºÅ丮À̸ç, schema.xsdÀº ÀÔ·Â XML ½ºÅ°¸¶ÀÌ´Ù. µû¶ó¼­ ¿¹¸¦ µé¾î Birthdate.xsdÀ» Æ÷ÇÔÇÏ´Â µð·ºÅ丮¿¡¼­ ´ÙÀ½ÀÇ ÄÚ¸àµå¸¦ ±¸µ¿Çϸé,

   xjc -p com.nexes.jaxb.test -d . Birthdate.xsd

±×¿¡ ´ëÇÑ ¹ÝÀÀÀ¸·Î ¹ÙÀεù ÄÄÆÄÀÏ·¯´Â Java ¼Ò½º Ŭ·¡½ºµéÀ» »ý¼ºÇϸç, ÀÌ ¸ðµç Ŭ·¡½ºµéÀº javac·Î ÄÄÆÄÀϵǾßÇÑ´Ù. À̹ø ÆÁ¿¡ ¼ö¹ÝµÇ´Â »ùÇà Äڵ忡´Â ¼Ò½º Ŭ·¡½ºµéÀÌ Æ÷ÇԵǾî ÀÖ´Ù. ±× ¿¹·Î, ´ÙÀ½Àº BirthdateType ÀÎÅÍÆäÀ̽ºÀÌ´Ù.(ÄÚ¸àÆ®´Â »ý·«ÇÔ)

   package com.nexes.jaxb.test;

   public interface BirthdateType {

       int getDay();
       void setDay(int value);

       int getYear();
       void setYear(int value);

       java.lang.String getMonth();
       void setMonth(java.lang.String value);

   }

±×·¯³ª ½ºÅ°¸¶ ÄÄÆÄÀÏ·¯´Â ÀÌ º¸´Ù ´õ ¸¹Àº °ÍÀ» »ý¼ºÇÑ´Ù. »ý¼ºµÈ Ŭ·¡½ºµéÀ» ¼¼ °³ÀÇ Ä«Å×°í¸®·Î ºÐ¸®ÇÒ ¼ö ÀÖ´Ù.

  • ½ºÅ°¸¶·Î Á¤ÀÇµÈ µ¥ÀÌÅÍ ¸ðµ¨À» ³ªÅ¸³»´Â Æ÷Åͺí JavaBean ½ºÅ¸ÀÏÀÇ getter/setter ÀÎÅÍÆäÀ̽ºµé

  • ÀÌ ÀÎÅÍÆäÀ̽ºµéÀÇ ±¸Ã¼ÀûÀΠƯÁ¤ º¥´õ ±¸Çö

  • ±âŸ Áö¿ø ·±Å¸ÀÓ Å¬·¡½ºµé

ÀÌ·¯ÇÑ Å¬·¡½ºµéÀº °¢°¢ Birthdate ¿ÀºêÁ§Æ®¿¡ ´ëÇÑ ÀνºÅϽº µ¥ÀÌÅ͸¦ ³ª¿­ÇÏ´Â XML Ç¥ÇöÀ» µ½´Â´Ù. ´ÙÀ½Àº Birthdate ¿ÀºêÁ§Æ®¿¡ ´ëÇØ ³ª¿­µÈ XML »ùÇà ¸®½ºÆ®°¡ ¾î¶»°Ô »ý°å´ÂÁö¸¦ º¸¿©ÁØ´Ù.

   <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
   <birthdate>
       <month>January</month>
       <day>1</day>
       <year>1900</year>
   </birthdate>

ÀϹÝÀûÀ¸·Î XML ¹®¼­´Â Á÷Á¢ÀûÀ¸·Î ÄÁÅÙÃ÷ Æ®¸®·Î ¾Ë·ÁÁø Ŭ·¡½º Å©¸®¿¡ ³ª¿­(¶Ç´Â Á¤·Ä)ÇÑ´Ù. XMLÀÇ °¢°¢ÀÇ ¿ä¼Ò°¡ ±× ÀÚ½ÅÀÌ ¶Ç´Ù½Ã ¿ÀºêÁ§Æ®°¡ µÇ¾î Çϳª ¶Ç´Â ±× ÀÌ»óÀÇ ¿ä¼Ò¸¦ º¸À¯Çϰí Àֱ⠶§¹®¿¡ Æ®¸®±¸Á¶·Î ³ªÅ¸³­´Ù. ÀÌ ¿¹Á¦¿¡¼­ <birthdate> ¿ä¼Ò´Â Ŭ·¡½ºÀ̸ç, <month>¿ä¼Ò(String )µµ ¸¶Âù°¡ÁöÀÌ´Ù. StringÀº Java ±¸Ãà ŸÀÔÀ̱⠶§¹®¿¡ JAXB´Â ÀÌ¿¡ ´ëÇÑ Å¬·¡½º¸¦ »ý¼ºÇÒ Çʿ䰡 ¾ø´Ù. ±×·¯³ª Á» ´õ º¹ÀâÇÑ ¿ÀºêÁ§Æ®¿¡ ´ëÇØ¼­´Â ¸¹Àº Ŭ·¡½ºµéÀÌ »ý¼ºµÉ ¼ö ÀÖ´Ù. XML ÀνºÅϽº ¹®¼­°¡ Ŭ·¡½º ÀνºÅϽº·Î º¯°æµÈ ÈÄ¿¡´Â Java ¾ÖÇø®ÄÉÀ̼ÇÀº »ý¼ºµÇ¾î °ªÀ» Çã¿ëÇÏ´Â ¾Æ¹« ¿ÀºêÁ§Æ®¸¦ ã¾Æ ¹Ýº¹ÀûÀ¸·Î ÄÁÅÙÃ÷ Æ®¸®ÀÇ ¾Æ·¡ÂÊÀ¸·Î ¿òÁ÷ÀÌ°Ô µÈ´Ù.

¹ÙÀεù ÄÄÆÄÀÏ·¯·Î Çʼö Ŭ·¡½º¸¦ »ý¼ºÇÑ ÈÄ¿¡´Â javacÀ¸·Î »ý¼ºµÈ Ŭ·¡½º¸¦ ÄÄÆÄÀÏÇÑ´Ù. ±× ÈÄ JAXB ³ª¿­ ÀÛ¾÷À» ½ÃÀÛÇÒ ¼ö ÀÖ´Ù. ¾Õ¼­ ¾ð±ÞÇßµíÀÌ Java ¿ÀºêÁ§Æ®¸¦ XML Ç¥ÇöÀ¸·Î º¯È¯ÇÏ´Â °ÍÀ» 'marshalling'À̶ó°í ÇÑ´Ù. ¹Ý´ëÀÇ ÀÛ¾÷, Áï XML Ç¥ÇöÀ» Java ¿ÀºêÁ§Æ®·Î º¯È¯ÇÏ´Â °ÍÀº unmarshallingÀ̶ó°í ÇÑ´Ù. ¸ÕÀú unmarshalling¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ

Unmarshalling

´ÙÀ½Àº XML ÆÄÀÏÀ» JAXB »ý¼º ÀνºÅϽº·Î unmarshallingÇÏ´Â ¿¹Á¦ÀÌ´Ù.

   import javax.xml.bind.*;

   JAXBContext jc = JAXBContext.newInstance(
           "com.nexes.jaxb.test");
   Unmarshaller unmarshaller = jc.createUnmarshaller();
   unmarshaller.setValidating(true);
   Birthdate instance = (Birthdate)unmarshaller.unmarshal(
           new File("birthdateInstance.xml"));
           
   System.out.println("Month is: " + instance.getMonth());
   System.out.println("Day is: " + instance.getDay());
   System.out.println("Year is: " + instance.getYear());

ÀÌ ÄÚµå´Â com.nexes.jaxb.test ÆÐŰÁö¸¦ »ç¿ëÇÏ¿© JAXBContext ÀνºÅϽº¸¦ »ý¼ºÇÑ´Ù.

   JAXBContext jc = JAXBContext.newInstance(
              "com.nexes.jaxb.test");

ÀÌ ÆÐŰÁö¿¡´Â ÀÌÀüÀÇ ¿¹Á¦¿¡¼­ Birthdate.xsd ½ºÅ°¸¶ÀÇ ¹ÙÀεù ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ »ý¼ºµÈ ÀÎÅÍÆäÀ̽º¿Í Ŭ·¡½ºµéÀÌ Æ÷ÇԵǾîÀÖ´Ù. ±× ÈÄ ÄÁÅØ½ºÆ® ¿ÀºêÁ§Æ®°¡ Unmarshaller ¿ÀºêÁ§Æ®¸¦ »ý¼ºÇϱâ À§ÇØ »ç¿ëµÈ´Ù.

   Unmarshaller unmarshaller = jc.createUnmarshaller();

Unmarshaller ¿ÀºêÁ§Æ®´Â XMLÀ» Java ÄÁÅÙÃ÷ Æ®¸®·Î º¯È¯ÇÏ´Â °Í°ú °ü·ÃµÈ ´ëºÎºÐÀÇ Å½ºÅ©¸¦ ¼öÇàÇÑ´Ù. ÀÌ ÄÚµå´Â Unmarshaller ¿ÀºêÁ§Æ®ÀÇ unmarshal()¸Þ¼Òµå¸¦ È£ÃâÇϸç, ÀνºÅÏÆ® µ¥ÀÌÅ͸¦ Æ÷ÇÔÇÏ´Â XML ÆÄÀÏÀÇ À̸§À» Àü´ÞÇÑ´Ù. ÆÄÀÏ ´ë½Å µ¥ÀÌÅÍ ¼Ò½º¿Í sink¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ½À» ±â¾ïÇÏ±æ ¹Ù¶õ´Ù. À̹ø ÆÁ¿¡ ¼ö¹Ý µÇ¾îÀÖ´Â ¿¹Á¦¿¡¼­´Â StringÀÇ °á°ú¸¦ ÀúÀåÇϰí servletÀÇ °á°ú¸¦ º¸¿©ÁØ´Ù.

   Birthdate instance = (Birthdate)unmarshaller.unmarshal(
              new File("birthdateInstance.xml"));

unmarshal() ¸Þ¼Òµå´Â ½ºÅ°¸¶ ÄÄÆÄÀÏ·¯·Î »ý¼ºÇÑ Å¬·¡½ºÀÇ ÀνºÅÏÆ®ÀÎ ¿ÀºêÁ§Æ®¸¦ ¸®ÅÏÇÑ´Ù.

unmarshaller ¿ÀºêÁ§Æ®¿¡ ´ëÇÑ setValidating() ¸Þ¼Òµå¸¦ ÁÖÀÇÇÏÀÚ.

   unmarshaller.setValidating(true);

setValidating()ÀÌ true·Î ¼³Á¤µÇ¾î ÀÖ´Ù¸é JAXB ·±Å¸ÀÓ API´Â ÀνºÅϽº µ¥ÀÌÅ͸¦ °¡Áø ±× XMLÀÌ JAXB ·±Å¸ÀÓ API´Â XML ½ºÅ°¸¶¿¡ ÀÇÇØ Á¤ÀÇµÈ Á¦¾à¿¡ ¸Â´ÂÁö °Ë»çÇÑ´Ù. XML ½ºÅ°¸¶´Â ¹ÙÀεù ÄÄÆÄÀÏ·¯¿¡ ³Ñ°ÜÁØ °ÍÀÌ´Ù. ¸¸¾à µ¥ÀÌÅͰ¡ »ç¿ëºÒ°¡¶ó¸é »ç¿ëÇã°¡´Â false°¡ µÇ°í ·±Å¸ÀÓ exceptionÀ» ¶³¾î¶ß¸°´Ù. JAXB Á¦°øÀÚ´Â »ç¿ëÇã°¡¿¡ ¿À·ù°¡ ¹ß»ýÇÏ´õ¶óµµ ÁøÇà°úÁ¤À» ²À ¸ØÃç¾ßÇÒ ÇÊ¿ä´Â ¾ø´Ù. ±×·¯³ª ¹Ýµå½Ã ·±Å¸ÀÓ exceptionÀ» È£ÃâÀÚ¿¡°Ô ³Ñ°Ü¾ßÇÑ´Ù.

Marshalling

UnmarshallingÀÇ ¹Ý´ë ÀÛ¾÷ÀÌ marshallingÀÌ´Ù. ´ÙÀ½Àº Java ÄÁÅÙÃ÷ Æ®¸®¸¦ xml ÆÄÀÏ·Î Á¤·ÄÇÏ´Â ¿¹Á¦ ÄÚµåÀÌ´Ù.

   import javax.xml.bind.*;

   ObjectFactory objFactory = new ObjectFactory();
   Birthdate birthdate = objFactory.createBirthdate();
        
   birthdate.setMonth("January");
   birthdate.setDay(1);
   birthdate.setYear(1900);
        
   JAXBContext jaxbContext = JAXBContext.newInstance(
       "com.nexes.jaxb.test");
   Marshaller marshaller = jaxbContext.createMarshaller();
   marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
       new Boolean(true));
   marshaller.marshal(birthdate, new FileOutputStream(
       "birthdateInstance.xml"));

ÀÌ ¿¹Á¦ÀÇ ÄÚµå´Â unmarshalling ¿¹Á¦¿¡¼­ÀÇ ¼Ò½º ÄÚµå¿Í ¸Å¿ì Èí»çÇÏ´Ù. ¸ÕÀú, ÄÚµå´Â JAXBContext ¿ÀºêÁ§Æ®¸¦ »ý¼ºÇÏ¿©, ¹ÙÀεù ÄÄÆÄÀÏ·¯·Î »ý¼ºÇÑ ÆÄÀÏÀ» °®°íÀÖ´Â ÆÐŰÁö¿¡ À̸§À» Àü´ÞÇÑ´Ù.

   JAXBContext jaxbContext = JAXBContext.newInstance(
          "com.nexes.jaxb.test");

±× ´ÙÀ½À¸·Î createMarshaller() ¸Þ¼Òµå¿¡ ÀÇÇØ Marshaller ¿ÀºêÁ§Æ®°¡ »ý¼ºµÈ´Ù.

   Marshaller marshaller = jaxbContext.createMarshaller();

±× ÈÄ ÄÚµå´Â JAXB_FORMATTED_OUTPUTÀÌ °á°ú ÆÄÀÏ¿¡ ÀÛ¼ºµÇµµ·Ï ¼Ó¼ºÀ» ¼³Á¤ÇÑ´Ù.

   marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
          new Boolean(true));

¸¶Áö¸·À¸·Î, marshaller´Â ÇöÀç Ȱ¼ºÈ­µÈ Ŭ·¡½º ÀνºÅϽº¸¦ äÅÃÇÏ¿© À̸¦ FileOutputStream¿¡ ¾´´Ù. FileOuputStreamÀº birthdateInstance.xml ÆÄÀÏ¿¡ ¸ÅÇεȴÙ.

marshaller.marshal(birthdate, new FileOutputStream( "birthdateInstance.xml"));

¶Ç´Â JAXB·Î »ý¼ºµÈ ÄÁÅÙÃ÷ Æ®¸®¸¦ ¼ø¿­È­ÇÑ ¿ÀºêÁ§Æ®¸¦ Ȱ¼ºÈ­Çصµ µÈ´Ù. À̸¦ À§Çؼ­´Â ´ÙÀ½°ú °°ÀÌ Validator¸¦ »ç¿ëÇØº¸ÀÚ.

   Validator validator = jaxbContext.createValidator();
   Validator.validate(birthdate);

JAXB specification¿¡¼­´Â Ŭ·¡½º ÀνºÅϽº°¡ XML Ç¥Çö¿¡ marshallµÇ±â Àü¿¡ »ç¿ë°¡´ÉÇØ¾ßÇÒ ÇÊ¿ä´Â ¾ø´Ù.

JAXB Å×½ºÆ® servletÀ» ±¸µ¿½ÃÄÑ marshalling°ú unmarshalling¸¦ ½ÃÇèÇØº¼ ¼ö ÀÖ´Ù. Á» ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â ¿¹Á¦ ÄÚµå ½ÇÇà¶õÀ» ÂüÁ¶Çϱ⠹ٶõ´Ù.

JAXB¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â Java Architecture for XML Binding (JAXB)¿¡¼­ º¼ ¼ö ÀÖÀ¸¸ç ¼¼ºÎ »çÇ×°ú ¾ÆÆ¼Å¬À» Æ÷ÇÔÇÑ´Ù. ¶ÇÇÑ XML ¹ÙÀεù¿¡ ´ëÇÑ ¿ÏÀüÇÑ ½ºÅ°¸¶¿¡ ´ëÇØ¼­´Â Java Architecture for XML Binding (JAXB) Bindings Schema for JAXB¸¦ ÂüÁ¶Çϰí, java.net¿¡ ³ª¿ÍÀÖ´Â jaxb ÇÁ·ÎÁ§Æ®¿¡ ´ëÇØ¼­µµ ¹æ¹®Çغ¸±â ¹Ù¶õ´Ù.

.
.

¿£ÅÍÇÁ¶óÀÌÁî ºóÀ» ÀÌ¿ëÇÑ Å¸ÀÌ¸Ó »ç¿ë

J2EE ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ Á¤±âÀûÀ¸·Î ¿¹Á¤µÈ ¹é¿£µå ŽºÅ©¸¦ ½ÇÇàÇÒ Çʿ䰡 Á¾Á¾ »ý±ä´Ù. ÀÌ´Â ÀÚ¿¬ÀûÀ¸·Î ŸÀ̸Ӹ¦ È£ÃâÇÏ°Ô µÈ´Ù. J2EE 1.4 ÀÌÀü¿¡´Â, ¿£ÅÍÇÁ¶óÀÌÁî ºó¿¡ ´ëÇÑ Å¸À̸Ӹ¦ »ý¼ºÇÏ´Â °ÍÀº ÀϹÝÀûÀ¸·Î »ç¿ëÀÚ ¼Ö·ç¼ÇÀ» »ý¼ºÇϰųª, J2SE ŸÀÌ¸Ó ±â´ÉÀ» Àç»ç¿ëÇϰųª ½áµå ÆÄƼ Á¦Ç°À» ÀÌ¿ëÇÏ´Â °ÍÀ» ÀǹÌÇß´Ù. ±×·¯³ª J2EE 1.4¿¡¼­´Â ÄÁÅ×À̳ʰ¡ °ü¸®Çϴ ŸÀÌ¸Ó ¼­ºñ½º¸¦ Á¦°øÇÑ´Ù. ÀÌ ¼­ºñ½º·Î °¢°¢ÀÇ µî·ÏµÈ ŸÀ̸Ӱ¡ À¯ÁöµÇ¸ç, ŸÀ̸Ӱ¡ »ç¿ë Á¾·áµÇ¾úÀ» ¶§ ¿£ÅÍÇÁ¶óÀÌÁî ºó¿¡ ¾Ë·ÁÁÖ°Ô µÈ´Ù. ÄÁÅ×À̳ʰ¡ °©Àڱ⠸ØÃß°Ô µÇ¾ú´Ù¸é, Àç½ÃÀÛÇÒ ¶§ ŸÀ̸ӵµ Àç»ý¼ºµÈ´Ù. ¾î¶² ŸÀ̸ÓÀÌ´ø »ç¿ë Á¾·áµÇ¸é ÀÌ¿¡ ÀÛ¿ëµÇ´Â ¿£ÅÍÇÁ¶óÀÌÁî ºó¿¡ ¾Ë·ÁÁÖ°Ô µÈ´Ù.

¿£ÅÍÇÁ¶óÀÌÁî ºóÀÇ Å¸ÀÌ¸Ó ÀÎÅÍÆäÀ̽º »ç¿ëÇϱâ¶ó´Â Á¦¸ñÀÇ 2004³â 6¿ù 18ÀÏÀÚ Å×Å©ÆÁ¿¡¼­´Â ŸÀ̸Ӱ¡ Á¾·áµÇ¾úÀ» ¶§ ·Î±×¸¦ Áö¿öÁÖ´Â °£´ÜÇÑ Å¸ÀÌ¸Ó ºóÀ» ¼Ò°³Çϰí ÀÖ´Ù. ¿©±â¼­ "»ç¿ë Á¾·á"¶ó´Â Àǹ̴ ŸÀ̸Ӱ¡ 0±îÁö ¼ýÀÚ ¼¼±â¸¦ ³¡³»°í ¿£ÅÍÇÁ¶óÀÌÁî ºóÀÌ ¾î¶² ÀÛ¾÷À» ¼öÇàÇØ¾ßÇÔÀ» Å뺸ÇÏ¿´À½À» ¶æÇÑ´Ù. ´õ ÀÌ»ó »ç¿ë°¡´ÉÇÏÁö ¾ÊÀ¸¹Ç·Î ŸÀÌ¸Ó ¼­ºñ½º·ÎºÎÅÍ Æó±âÇØ¾ßÇÑ´Ù´Â Àǹ̰¡ ¾Æ´Ï´Ù(À̰ÍÀº 'ŸÀÌ¸Ó »èÁ¦'ÀÓ)

À̹ø¿¡ ¼Ò°³ÇÏ´Â Å×Å©ÆÁ¿¡¼­´Â ¼¼¼Ç ºó¿¡¼­ °£´ÜÇÑ Å¸À̸Ӹ¦ ±¸ÇöÇÏ´Â µ¥ ÇÊ¿äÇÑ ¼Ò½º Äڵ忡 ´ëÇØ¼­ ´Ù½Ã Çѹø »ìÆìº¸·Á°í ÇÑ´Ù. À̹ø ÆÁÀº ±âÁ¸ ÆÁÀ» Åä´ë·Î ÇÏ¿© ŸÀ̸ӷΠÀÛ¾÷ÇÒ ¶§ ÇÊ¿äÇÑ ¸î °¡Áö °í·Á»çÇ׿¡ ´ëÇØ ³íÀÇÇϸç, »ç¿ëÀÚ°¡ ¹èÄ¡¿Í ·ÎÄà ºó ¸Þ¼Òµå¸¦ Æ÷ÇÔÇÏ´Â EJB ¾ÆÅ°ÅØÃ³¿¡ ´ëÇØ Àͼ÷ÇÏ´Ù°í °¡Á¤ÇÑ´Ù.

ŸÀÌ¸Ó ¾ÆÅ°ÅØÃ³ ´Ù½Ãº¸±â

±âÃÊÀûÀÎ °ÍºÎÅÍ µÇ»õ°Üº¸ÀÚ. ¿£ÅÍÇÁ¶óÀÌÁî ºóÀº ¾î¶² ½Ã°£ÀÇ Å¸À̸ÓÀÌ´øÁö »ý¼ºÇÒ ¼ö ÀÖÀ¸¸ç, ºóÀÌ ¹èÄ¡µÇ´Â EJB ȯ°æÀÌ À̸¦ Çã¿ëÇÑ´Ù. ¿£ÅÍÆ¼ ºó¿¡ ÀÇÇØ »ý¼ºµÈ ŸÀ̸Ӵ ºóÀÇ ÁÖ¿ä Ű ±¸ºÐÀÚ(primary key identity)¿¡ ÁöÁ¤µÈ´Ù. °á°úÀûÀ¸·Î °¢°¢ÀÇ ¿£ÅÍÆ¼ ºóÀÇ ÀνºÅϽº¿¡ ´ëÇÑ Å¸À̸Ӵ ÇÑ °³»ÓÀÌ´Ù. ºñ»óÅ À¯Áö ¼¼¼Ç ºó(stateless session beans)°ú ¸Þ½ÃÁö µå¸®ºì ºó(message-driven beans)¿¡ ÀÇÇØ »ý¼ºµÈ ŸÀ̸Ӵ ÄÁÅ×ÀÌ³Ê Ç®ÀÇ ÀνºÅϽº »çÀÌ¿¡¼­ °øÀ¯µÈ´Ù,.

´ÙÀ½Àº EJB 2.1 ¾ÆÅ°ÅØÃ³¿¡¼­ ŸÀ̸Ӹ¦ »ý¼ºÇÏ´Â ³× °³ÀÇ ÁÖ¿äÇÑ Å¬·¡½º¿Í ÀÎÅÍÆäÀ̽ºÀÌ´Ù.

  • javax.ejb.TimedObject : ÀÌ ÀÎÅÍÆäÀ̽º´Â ¿£ÅÍÇÁ¶óÀÌÁî ºó ¼³°è½Ã ¹Ýµå½Ã ±¸ÇöµÇ¾ßÇÏ´Â ejbTimeout() ¸Þ¼Òµå¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ Å¸ÀÌ¸Ó ¼­ºñ½º´Â °¢°¢ÀÇ Å¸À̸Ӱ¡ Á¾·á½Ã ejbTimeout() ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù.

  • javax.ejb.TimerService : ÀÌ Å¬·¡½º´Â ÄÁÅ×ÀÌÅÍÀÇ Å¸ÀÌ¸Ó ¼­ºñ½º ¿ÀºêÁ§Æ®ÀÌ´Ù. TimerService´Â SessionContextÀÇ getTimerService() ¸Þ¼Òµå¸¦ ÅëÇØ ¾ò¾îÁø´Ù.

  • javax.ejb.Timer : »ç¿ëÀÚ·Î ÇÏ¿©±Ý ÇöÀçÀÇ ¿£ÅÍÇÁ¶óÀÌÁî ºó¿¡ ¼ÓÇϴ ŸÀ̸Ӹ¦ »ý¼º/»èÁ¦ÇÒ ¼ö ÀÖ°Ô Çϴ Ŭ·¡½ºÀÌ´Ù. Timer ´Â TimerService ¿ÀºêÁ§Æ®ÀÇ createTimer() ¸Þ¼Òµå¸¦ ÅëÇØ »ý¼ºµÈ´Ù.

  • javax.ejb.TimerHandle : ÀÌ ¿ÀºêÁ§Æ®´Â TimerÀÇ ³ª¿­µÈ º¹»çº»À» Á¦°øÇÑ´Ù. ÀÌ º¹»çº»Àº Áö¼ÓÀûÀΠŸÀ̸Ӹ¦ ÀúÀåÇÏ°í °Ë»öÇÏ´Â µ¥ »ç¿ëÇÒ ¼ö ÀÖ´Ù. TimerHandleÀº Timer ¿ÀºêÁ§Æ®ÀÇ getHandle() ¸Þ¼Òµå¿¡ ÀÇÇØ ¸®ÅϵȴÙ.

EJB ŸÀ̸Ӹ¦ »ý¼ºÇÏ´Â °ÍÀº °£´ÜÇϸç, ´ÜÁö µÎ °¡Áö ´Ü°è¸¸ ÇÊ¿ä·Î ÇÑ´Ù.

  1. javax.ejb.TimedObject ÀÎÅÍÆäÀ̽º¸¦ È®ÀåÇÏ´Â ¿£ÅÍÇÁ¶óÀÌÁî ºó(¿£ÅÍÆ¼ ºó, ºñ»óÅ À¯Áö ¼¼¼Ç ºó ¶Ç´Â ¸Þ½ÃÁö µå¸®ºì ºó)À» »ý¼ºÇÑ´Ù. ÀÌ ÀÎÅÍÆäÀ̽º¿¡¼­´Â ŸÀ̸Ӱ¡ Á¾·áµÇ¾úÀ» ¶§, ejbTimeout()·Î ºÒ¸®´Â ¸Þ¼Òµå°¡ ŸÀÌ¸Ó ¼­ºñ½º¿¡ ÀÇÇØ È£ÃâµÇ¾ß ÇÑ´Ù.

  2. TimerService ¿ÀºêÁ§Æ®¸¦ »ç¿ëÇÏ¿© ŸÀ̸Ӹ¦ »ý¼ºÇÑ´Ù. TimerService ¿ÀºêÁ§Æ®ÀÇ ÀνºÅϽº¸¦ °®°ÔµÇ¸é ³× °³ÀÇ createTimer() ¸Þ¼Òµå Áß Çϳª¸¦ »ç¿ëÇÏ¿© ŸÀ̸Ӹ¦ ¼­ºñ½º¿¡ ³Ö¾î¾ß ÇÑ´Ù. ÀÌ ¸Þ¼Òµå´Â EJB ÄÁÅ×ÀÌ³Ê ¾ÈÀÇ Å¸À̸Ӹ¦ ÀνºÅϽºÈ­ÇÑ´Ù

ÀÌ ¶§ ³× °³ÀÇ createTimer() ¸Þ¼Òµå´Â ´ÙÀ½°ú °°´Ù.

  • createTimer(long timeoutDuration, Serializable info): ´ÜÀÏ ÀÛ¾÷ ŸÀ̸Ӹ¦ »ý¼ºÇÑ´Ù. timeoutDuration ¸Å°³ º¯¼ö´Â ½Ã°£ÀÇ Å©±â¸¦ ¹Ð¸®¼¼ÄÁµå ´ÜÀ§·Î ÁöÁ¤Çϸç, ÀÌ º¯¼ö´Â ŸÀ̸Ӱ¡ Á¾·áµÇ¾î TimedObjectÀÇ ejbTimeout() ÄÝ¹é ¸Þ¼Òµå°¡ Ȱ¼ºÈ­µÇ±â Àü¿¡ Àü´ÞÇÏ´Â °ÍÀÌ Çã¿ëµÈ´Ù.

  • createTimer(Date firstDate, Serializable info): À§ÀÇ ¸Þ¼Òµå¿Í ºñ½ÁÇÑ ¹æ½ÄÀ¸·Î ÀÛ¿ëÇÏÁö¸¸ »ç¿ëÀÚ°¡ Á¾·á½Ã°£À» ¼³Á¤ÇÏ´Â ´ë½Å ŸÀ̸Ӱ¡ ¾ðÁ¦ »ç¿ëµÇ´ÂÁö ÁöÁ¤ÇÏ´Â Date °´Ã¼¸¦ Á¦°øÇؾßÇÑ´Ù.

  • createTimer(Date firstDate, long timeoutInterval, Serializable info): ŸÀ̸Ӱ¡ »ç¿ëµÇ¾î¾ß Çϴ óÀ½ ³¯Â¥¸¦ ÁöÁ¤ÇÑ´Ù. ¶ÇÇÑ ¹Ýº¹µÇ´Â °¢°¢ÀÇ Å¸À̸Ӹ¦ »ç¿ëÇÏ´Â °£°Ý °£ÀÇ ½Ã°£µµ ÁöÁ¤ÇÑ´Ù.

  • createTimer(long timeoutDuration, long timeoutInterval, Serializableinfo): ÀÌ ¸Þ¼Òµå´Â À§ÀÇ °£°Ý ¸Þ¼Òµå¿Í ºñ½ÁÇÏ´Ù. ±×·¯³ª ÇöÀç ½Ã½ºÅÛ ½Ã°£À¸·ÎºÎÅÍ ¹Ð¸®¼¼ÄÁµå ´ÜÀ§·Î ÁöÁ¤µÈ ½Ã°£ °£°Ý¿¡ ±â¹ÝÇÏ¿© óÀ½ »ç¿ëÀÌ ÀÌ·ç¾î Áø´Ù´Â °ÍÀÌ ´Ù¸£´Ù.

createTimer() ¸Þ¼ÒµåÀÇ ½Ã°£ °£°Ý ŸÀÌ¸Ó ¹öÀüÀº ÀÏÁ¤ÇÑ °£°ÝÀ¸·Î ¹Ýº¹ÀûÀ¸·Î ÀϾ´Â ÀÛ¾÷¿¡, ´ÜÀÏ ÀÛ¾÷ ¹öÀüÀº Çѹø ÀÌ¿ëµÇ°í Æó±âµÇ´Â ŸÀ̸ӿ¡ »ç¿ëÇϱ⠹ٶõ´Ù. °¢°¢ÀÇ createTimer() ¸Þ¼Òµå¿¡´Â info¶ó°í ºÒ¸®´Â Serializable ¸Å°³ º¯¼ö°¡ Æ÷ÇԵǾî ÀÖÀ½À» ÁÖ¸ñÇÏÀÚ. ÀÌ ¸Å°³º¯¼ö´Â ŸÀ̸ӿ¡ ´ëÇÑ ½Äº° ű×(ÀϹÝÀûÀ¸·Î String)À» Àü´ÞÇÏ´Â µ¥ »ç¿ëµÇ¸ç ÀÌ ½Äº° ű״ ÇÊ¿ä½Ã ŸÀÌ¸Ó ÀνºÅϽº¸¦ ³ªÁß ÁöÁ¡¿¡ À§Ä¡´Â µ¥ »ç¿ëµÈ´Ù. Serializable ¸Å°³º¯¼ö´Â ¶ÇÇÑ Å¸ÀÌ¸Ó ÄݹéÀÌ ÁøÇàµÇ´Â µ¿¾È ÇÊ¿äÇÒÁö ¸ð¸£´Â ¿ÀºêÁ§Æ®¿¡ ·¹ÆÛ·±½º¸¦ Àü´ÞÇØÁÖ´Â µ¥¿¡µµ »ç¿ëµÈ´Ù. ÀÌ ¸Å°³º¯¼ö°¡ ÇÊ¿äÇÏÁö ¾ÊÀ» °æ¿ì¿¡´Â null·Î ¼³Á¤ÇÏ¸é µÈ´Ù.

ŸÀ̸Ӹ¦ »èÁ¦Çϱâ À§Çؼ­´Â ÁöÁ¤ Timer ¿ÀºêÁ§Æ®¿¡ cancel() ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¸é µÈ´Ù. ÀÌ ¸Þ¼Òµå´Â ÇöÀçÀÇ Å¸À̸Ӹ¦ »èÁ¦ÇÑ´Ù.

´ÙÀ½Àº ŸÀ̸Ӹ¦ »ý¼ºÇϰí Á¦°ÅÇÏ´Â ¸Þ¼Òµå¸¦ Æ÷ÇÔÇÏ´Â ºñ»óÅ À¯Áö ¼¼¼Ç ºó¿¡ ´ëÇÑ ¿¹Á¦ÀÌ´Ù.

   public class TimerBean implements SessionBean, TimedObject
   {

       //  EJB Framework Code Omitted
    
       public void createTimer(
          long startTime, long timeout, String id)
       throws javax.ejb.EJBException, java.rmi.RemoteException
       {
        
           TimerService timerService = 
              sessionContext.getTimerService();
           Timer timer = 
              timerService.createTimer(startTime, timeout, id);
       }
    
       public void killTimer(String id)
       throws javax.ejb.EJBException, java.rmi.RemoteException
       {
        
           TimerService timerService = 
              sessionContext.getTimerService();
           Collection timers = timerService.getTimers();
           Iterator iterator = timers.iterator();
        
           //  Search through the collection, and find the timer
           //  that matches the given ID. For each instance
           //  that is found, call the cancel() method on it.

           while (iterator.hasNext()){
               Timer t = (Timer)iterator.next();
               if (t.getInfo().equals(id))
                   t.cancel();
           }
        
       }

   }

ŸÀÌ¸Ó ÀÛ¾÷ ½Ã °í·Á»çÇ×

ŸÀ̸Ӹ¦ »ç¿ëÇÏ´Â ¿£ÅÍÇÁ¶óÀÌÁî ºóÀ» ¼³°èÇÒ ¶§ °í·ÁÇØ¾ß ÇÒ ¸î °¡Áö Áß¿äÇÑ »çÇ׿¡ ´ëÇØ¼­ ¼³¸íÇϰڴÙ.

  • ¿£ÅÍÆ¼ ºó°ú ºñ»óÅ À¯Áö ¼¼¼Ç ºó, ¸Þ½ÃÁö µå¸®ºì ºóÀº °¢°¢ÀÇ Å¸ÀÌ¸Ó ¼­ºñ½º¸¦ º¸À¯Çϰí ÀÖÀ¸³ª »óÅ À¯Áö ¼¼¼ÇºóÀº º¸À¯Çϰí ÀÖÁö ¾Ê´Ù.(»óÅ À¯Áö ¼¼¼ÇºóÀÌ EJB ŸÀ̸ӿ¡ Àü´ÞµÇ¸é javax.ejb.Timer ÀÛ¿ëÀ» Ȱ¼ºÈ­½Ãų ¼ö´Â ÀÖ´Ù.)

  • ¿£ÅÍÆ¼ ºó¿¡¼­´Â ejbPostCreate() ¸Þ¼­µå·Î ŸÀ̸Ӹ¦ »ý¼ºÇÑ´Ù. ÀÌ ¹æ¹ýÀ¸·Î ŸÀ̸Ӵ ƯÁ¤ ºó ÀνºÅϽº¿¡ ¼ö¹ÝµÉ ¼ö ÀÖ°Ô µÈ´Ù. ºñ»óÅ À¯Áö ¼¼¼Ç ºó¿¡¼­´Â ºóÀÇ BM(business method)·Î ŸÀ̸Ӹ¦ »ý¼ºÇϰí, ¸Þ½ÃÁö µå¸®ºì ºó¿¡¼­´Â ¸Þ½ÃÁö°¡ ¼ö½ÅµÉ ¶§¸¶´Ù ŸÀ̸Ӱ¡ »ý¼ºµÇ¾î¾ß ÇÑ´Ù.

  • °¢°¢ÀÇ createTimer() ¸Þ¼ÒµåÀÇ ³ª¿­°¡´ÉÇÑ Á¤º¸ ¸Å°³º¯¼ö¸¦ ±â¾ïÇÑ´Ù. ÀÌ ¸Å°³º¯¼ö´Â ÇÑ ºó¿¡¼­ Çϳª ÀÌ»óÀÇ Å¸À̸Ӹ¦ »ý¼ºÇϰíÀÚ ÇÒ ¶§ À¯¿ëÇÏ´Ù.

  • ³ªÁß¿¡ ÀÌ¿ëÇÒ TimerHandle ÀνºÅϽº¸¦ ³ª¿­ÇÏ°í º¹±¸Çϱâ À§ÇØ Timer ¿ÀºêÁ§Æ®ÀÇ getHandle() ¸Þ¼Òµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. TimerHandle¸¦ deserializeÇÑ ÈÄ¿¡´Â ŸÀ̸ÓÀÇ ÀνºÅϽº¸¦ ´Ù½Ã ¾ò±â À§ÇØ getTimer() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇØ¾ßÇÑ´Ù.

  • ŸÀ̸Ӹ¦ »èÁ¦ÇÏ´Â ¹ýÀ» ¾Æ´Â °Íµµ Á¾Á¾ À¯¿ëÇϳª ´ÜÀÏ ÀÛ¾÷ ŸÀ̸Ӵ ÀÛ¾÷À» ¼º°øÀûÀ¸·Î ¼öÇà ÈÄ Á¾·áµÇ¸é ÀÚµ¿ÀûÀ¸·Î Á¦°ÅµÈ´Ù´Â »ç½Ç¿¡ ´ëÇØ¼­µµ ±â¾ïÇØµÎ±æ ¹Ù¶õ´Ù. ¸¹Àº ¾ÖÇø®ÄÉÀ̼ǿ¡¼­´Â Áö¼ÓÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â ÁÖ±âÀû ŸÀ̸Ӱ¡ »ç¿ëµÇ°í ÀÖ´Ù. ¿£ÅÍÆ¼ ºó¿¡ Æ÷ÇԵǾîÀÖ´Â EJB ŸÀ̸Ӵ ¿£ÅÍÆ¼ ºó(ÁÖ¿ä Ű)ÀÌ Á¦°ÅµÇ¸é ÀÚµ¿ÀûÀ¸·Î »èÁ¦µÈ´Ù. µ¡ºÙ¿© ¾ÖÇø®ÄÉÀ̼ÇÀ» Á¾·áÇÏ¸é ¸ðµç EJB ŸÀ̸Ӵ »èÁ¦µÈ´Ù.

  • ¿£ÅÍÆ¼ ºó¿¡´Â ÀϹÝÀûÀ¸·Î °¢°¢ÀÇ ÀνºÅϽº¿¡ ´ëÇÑ Å¸À̸Ӱ¡ ÀÖ´Ù. ¸Þ½ÃÁö µå¸®ºì ºó°ú ºñ»óÅ À¯Áö ¼¼¼Ç ºóÀº ƯÁ¤ ºóÀÇ ÀνºÅϽº°¡ ¾Æ´Ñ °¢ ŸÀÔÀÇ ºó°ú Á¶ÇյǾî ÀÖ´Ù. ¸Þ½ÃÁö µå¸®ºì ºó ¶Ç´Â ºñ»óÅ À¯Áö ¼¼¼Ç ºóÀÇ Å¸À̸Ӱ¡ Á¾·áµÇ¸é ÄÁÅ×À̳ʴ ÀνºÅÏÆ® Ç®¿¡ ÀÖ´Â ´ÜÀÏ TimedObject ºó ÀνºÅϽºÀÇ ejbTimeout() ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù. ÄÁÅ×À̳ʴ ¾î¶² ÀνºÅϽºµçÁö ¼±ÅÃÇÒ ¼ö ÀÖ´Ù.

  • createTimer()¸¦ È£ÃâÇÒ ¶§¸¶´Ù ÄÁÅ×ÀÌ³Ê ³»ºÎ¿¡´Â ¸Å¹ø »õ·Î¿î ŸÀÌ¸Ó ¿ÀºêÁ§Æ®°¡ »ý¼ºµÈ´Ù. ÀÌ¹Ì ÁøÇàµÈ ŸÀ̸Ӹ¦ Àç»ç¿ëÇÒ ¼ö ÀÖ´Ù¸é ¾ÖÇø®ÄÉÀÌ¼Ç ¼­¹ö¿¡ ŸÀ̸Ӱ¡ ³Ê¹« ¸¹¾ÆÁöÁö ¾Êµµ·Ï ÁÖÀÇÇϱ⠹ٶõ´Ù. ±âÁ¸ÀÇ Å¸À̸Ӹ¦ üũÇÏ¿© ±× À¯ÀϼºÀ» º¸ÀåÇÏ°í ½Í´Ù¸é ŸÀÌ¸Ó ¼­ºñ½ºÀÇ getTimers() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇϱ⠹ٶõ´Ù. ÀÌ ¸Þ¼Òµå´Â À§ÀÇ ¿¹Á¦¿¡¼­ÀÇ killTimer() ¸Þ¼Òµå¿¡¼­ º¸¿©ÁÖ°í ÀÖ´Ù.

  • Æ®·£Á§¼Ç¿¡ ŸÀ̸Ӹ¦ ÀÌ¿ëÇϰí ÀÖ´Ù¸é ¹Ýµå½Ã ejbTimeout() ¸Þ¼Òµå¿¡ RequiresNewÀÇ Æ®·£Àè¼Ç Ư¡À» ºÎ¿©ÇØ¾ß ÇÑ´Ù. ŸÀ̸ÓÀÇ »ý¼º/»èÁ¦´Â ÇöÀç ºóÀÇ ÄÁÅØ½ºÆ®¿¡¼­ ÀÌ·ïÁ®¾ßÇÑ´Ù. ÀÌ °æ¿ì Æ®·¢Àè¼ÇÀÌ º¹±¸µÇ¾ßÇÑ´Ù¸é, ŸÀ̸ÓÀÇ »ý¼º/»èÁ¦ ¶ÇÇÑ º¹±¸µÈ´Ù.

  • ÇöÀç ¸¹Àº º¥´õµéÀÌ EJB ŸÀ̸Ӹ¦ °ü¸®Çϱâ À§ÇØ JMX MbeansÀ» Á¦°øÇϰí ÀÖ´Ù.

EJB ŸÀÌ¸Ó º£½ºÆ® ÇÁ·¢Æ¼½º¿¡ ´ëÇÑ Á» ´õ ¸¹Àº Á¤º¸´Â Java BluePrints Solutions CatalogÀÇ Using the J2EE 1.4 Timer Service for Scheduling Actions ¼½¼ÇÀ» ÂüÁ¶Çϱ⠹ٶõ´Ù. ŸÀÌ¸Ó ¼³°è¿¡ ´ëÇÑ ÈǸ¢ÇÑ ¸®¼Ò½º°¡ µÉ °ÍÀÌ´Ù.

ŸÀ̸Ӹ¦ ½ÇÇàÇØº¸°í ½Í´Ù¸é 2004³âµµ 6¿ù 18ÀÏÀÚ J2EE Å×Å©ÆÁ ¿£ÅÍÇÁ¶óÀÌÁî ºóÀÇ Å¸ÀÌ¸Ó ÀÎÅÍÆäÀ̽º »ç¿ëÇϱâÀÇ »ùÇà ¾ÆÄ«À̺긦 ´Ù¿î¹Þ±â ¹Ù¶õ´Ù.

¶ÇÇÑ EJB 2.1 specification¸¦ ÂüÁ¶ÇÏÀÚ.

¿¹Á¦ ÄÚµå ½ÇÇà

¿¹Á¦ ÆÄÀϵéÀ» ´Ù¿î·Îµå ¹ÞÀ¸¼¼¿ä. ÀÌ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ·çÆ®´Â ttdec2004-jaxbÀ̸ç, ´Ù¿î·ÎµåµÈ war ÆÄÀÏ¿¡´Â ¿¹Á¦ÀÇ ¸ðµç ¼Ò½º Äڵ尡 Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.

¾ÖÇø®ÄÉÀÌ¼Ç ÆÄÀϵé(ttdec2004-jaxb)À» J2EE 1.4 ¾ÖÇø®ÄÉÀÌ¼Ç ¼­¹ö¿¡ ¼³Ä¡ÇÏ·Á¸é deploytool ÇÁ·Î±×·¥ ȤÀº °ü¸®ÀÚ ÄܼÖÀ» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ȤÀº ¾Æ·¡¿Í °°ÀÌ asadmin ¸í·É¾î¸¦ ÀÔ·ÂÇÏ¿© ¼³Ä¡¸¦ ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

   asadmin deploy install_dir/ttdec2004-jaxb.war

install_dirÀ» war ÆÄÀÏÀ» ¼³Ä¡ÇÑ µð·ºÅ丮·Î ´ëüÇϽʽÿÀ.

¾ÖÇø®ÄÉÀ̼ÇÀº http://localhost:8080/ttdec2004-jaxb¸¦ ÅëÇØ¼­ Á¢¼ÓÇÒ ¼ö ÀÖ½À´Ï´Ù.

J2EE 1.4 ¾ÖÇø®ÄÉÀÌ¼Ç ¼­¹ö ÀÌ¿ÜÀÇ J2EE 1.4 ȣȯ ¼³Ä¡¸¦ À§Çؼ­´Â J2EE Á¦Ç°ÀÇ ¼³Ä¡ ÅøÀ» »ç¿ëÇÏ¿© ¿øÇÏ´Â Ç÷§Æû¿¡ ¾ÖÇø®ÄÉÀ̼ÇÀ» ¼³Ä¡ÇϽñ⠹ٶø´Ï´Ù.

¾ÖÇø®ÄÉÀ̼ÇÀ» ½ÃÀÛÇÏ¸é ¾Æ·¡¿Í °°Àº ÆäÀÌÁö°¡ ³ªÅ¸³³´Ï´Ù. (ÆäÀÌÁö Àüü°¡ ³ªÅ¸³ª ÀÖÁö´Â ¾Ê½À´Ï´Ù.)

"Click here to see the example servlet."¶ó°í ¾º¿©ÀÖ´Â ¸µÅ©¸¦ Ŭ¸¯Çϼ¼¿ä. JAXB Å×½ºÆ® servletÀÌ ±¸µ¿µÇ¾î ´ÙÀ½°ú °°Àº Ç¥½Ã°¡ ³ªÅ¸³³´Ï´Ù.

.
.
.

Reader Feedback

  ¸Å¿ì ÁÁ´Ù    ÁÁ´Ù    ±×Àú ±×·¸´Ù 

 

ÀÚ¹Ù ÇÁ·Î±×·¡¹ÖÀÌ ±Ã±ÝÇϼ¼¿ä? Java Online SupportÀ» Âü°íÇϼ¼¿ä.

.
.

º» ¸ÞÀÏÀº ¼ö½ÅÀ» µ¿ÀÇÇÑ È¸¿ø´Ô¿¡°Ô¸¸ ¹ß¼ÛµË´Ï´Ù. °ü·Ã¹®ÀÇ : SunKorea@sun.com
º» ¸ÞÀÏÀÇ ¼ö½ÅÀ» °ÅºÎÇϽ÷Á¸é ¼ö½Å°ÅºÎ¸¦ Ŭ¸¯ÇØ ÁÖ¼¼¿ä.

Copyright 2003-2005 Sun Korea, Inc. All rights reserved.

Sun Microsystems, Inc.
.
.