![]() | ||||||
| ||||||
3¿ùÀÇ Technology Day! Java User Group ¼¼¹Ì³ª
*Âü°¡½ÅûÀº À̸§, ¼Ò¼Ó, ¿¬¶ôó¸¦ Àû¾î ¸ÞÀÏ·Î º¸³»Áֽñ⠹ٶø´Ï´Ù. |
|
| À̹ø È£¿¡¼´Â, » JAXB 2.0¿¡ »õ·Î Ãß°¡µÈ ±â´É » À¥ ¼ºñ½º ¸ð´ÏÅ͸µ ¿¡ ´ëÇØ ´Ù·ì´Ï´Ù. ÀÌ ÆÁµéÀº Java EE 5ÀÇ ¿ÀǼҽº ±¸Çö(GlassFish)À» ÀÌ¿ëÇÏ¿© °³¹ßµÇ¾úÀ¸¸ç, GlassFish ÇÁ·ÎÁ§Æ® ÆäÀÌÁö¿¡¼ GlassFish¸¦ ´Ù¿î·Îµå ¹ÞÀ¸½Ç ¼ö ÀÖ½À´Ï´Ù. -»ùÇà ¾ÆÄ«ÀÌºê ´Ù¿î·Îµå ¹Þ±â- JAXB |
||
| JAXB 2.0¿¡ »õ·Î Ãß°¡µÈ ±â´É | ||
ÀúÀÚ Kim LiChong JAXB(Java Architecture for XML Binding)´Â ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾î ¾ÖÇø®ÄÉÀ̼ǿ¡¼ XML ÄÁÅÙÃ÷ÀÇ »ç¿ëÀ» °£¼ÒÈÇØÁÖ´Â ±â¼ú·Î¼, XML ¹®¼ÀÇ XSD ½ºÅ°¸¶¸¦ ¹ÙÅÁÀ¸·Î ÇÏ¿© XML ¹®¼¿Í JavaBeans ±â¼ú ÄÄÆ÷³ÍÆ® °£ÀÇ ¹ÙÀεùÀ» ÁöÁ¤ÇÔÀ¸·Î½á ÀÛ¾÷À» ¼öÇàÇÑ´Ù. Áö³ J2EE Å×Å©ÆÁ¿¡¼´Â JAXB¸¦ ÀÌ¿ëÇÑ XML Á÷·ÄÈ¿Í JAXB¿¡¼ RelaxNG ÀÌ¿ëÇϱ⸦ ´Ù·é ¹Ù ÀÖÀ¸¸ç, µÎ ÆÁ ¸ðµÎ Java WSDP(Java Web Services Developer Pack) 1.6 ÆÐŰÁö¿¡ Æ÷ÇԵǾî ÀÖ´Â JAXB 1.0ÀÌ »ç¿ëµÇ¾ú´Ù. JAXB 2.0, JSR 222¿¡´Â JAXB 1.0¿¡¼ °³¼±µÈ Áß¿äÇÑ Ç׸ñÀÌ ´Ù¼ö Æ÷ÇԵǾî Àִµ¥, ±×Áß ÀϺθ¦ ¼Ò°³ÇÏ¸é ´ÙÀ½°ú °°´Ù.
º» ÆÁ¿¡¼´Â ÀÌ·¯ÇÑ °³¼±»çÇ× Áß ´ÙÀ½ÀÇ µÎ °¡Áö¸¦ ¿¹½ÃÇÑ´Ù - JAXP °ËÁõ API¸¦ ÀÌ¿ëÇÑ °ËÁõ(¸¶¼£¸µ/¾ð¸¶¼£¸µÀÇ ÀϺημ)°ú Java-to-Schema ¹ÙÀεù. º» ÆÁ°ú °ü·ÃÇÑ ÄÚµå´Â ´Ù¿î·Îµå ¾ÆÄ«À̺꿡¼ ãÀ» ¼ö ÀÖÀ¸¸ç, ¿¹Á¦¸¦ ½ÇÇàÇÏ·Á¸é JAXB 2.0 ÂüÁ¶ ±¸ÇöÀÇ ÃֽŠ¾ó¸® ¾×¼¼½º 3 ¹öÀüÀÌ ÇÊ¿äÇÏ´Ù. JAXB 2.0 ÂüÁ¶ ±¸ÇöÀÇ ¾ó¸® ¾×¼¼½º 3 ¹öÀüÀº Java WSDP 2.0 ÆÐŰÁö¿¡µµ Æ÷ÇԵǾî ÀÖ´Ù. JAXP 1.3 °ËÁõ ½ºÅ°¸¶¸¦ ÀÌ¿ëÇÑ ¾ð¸¶¼£¸µ/¸¶¼£¸µ JAXB 2.0¿¡¼ °³¼±µÈ »çÇ× Áß Çϳª°¡ ¹Ù·Î JAXP 1.3 °ËÁõ API¸¦ ÀÌ¿ëÇÑ Ãß°¡ °ËÁõ ±â´ÉÀÌ´Ù. ±×·³, ¸ÕÀú JAXP 1.3 °ËÁõ ½ºÅ°¸¶¸¦ ÀÌ¿ëÇÑ JAXB 2.0 ¾ð¸¶¼£¸µ/¸Ï¼£¸µ ±â´ÉÀ» »ìÆìº¸·Ï ÇÑ´Ù. ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ÇÀº JAXB¸¦ ÀÌ¿ëÇÏ¿© XML ÀνºÅϽº ¹®¼¸¦ ÀÚ¹Ù ÄÁÅÙÆ® °´Ã¼·Î ¾ð¸¶¼£¸µ ÇÒ ¼ö ÀÖÀ¸¸ç, ¿É¼ÇÀ¸·Î ÀÚ¹Ù ÄÁÅÙÃ÷ °´Ã¼¸¦ »ý¼ºÇϱâ Àü¿¡ ¼Ò½º XML ¹®¼¸¦ °ËÁõÇÒ ¼ö ÀÖ´Ù. ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ÇÀº ¶ÇÇÑ JAXB¸¦ ÀÌ¿ëÇÏ¿© ÀÚ¹Ù ÄÁÅÙÃ÷ °´Ã¼¸¦ XML ÀνºÅϽº ¹®¼·Î ¸¶¼£¸µ ÇÒ ¼ö ÀÖ´Ù. XML ¹®¼¸¦ ¾ð¸¶¼£¸µ ÇÏ·Á¸é ¸ÕÀú XML ¹®¼ÀÇ ½ºÅ°¸¶¸¦ ÇØ´ç ½ºÅ°¸¶¸¦ ³ªÅ¸³»´Â ÀÏ·ÃÀÇ ÀÚ¹Ù ÀÎÅÍÆäÀ̽º ¹× Ŭ·¡½º·Î ¹ÙÀεåÇØ¾ß Çϰí, ±×·± ´ÙÀ½ ÀÎÅÍÆäÀ̽º¿Í Ŭ·¡½º¸¦ ÄÄÆÄÀÏÇÑ´Ù. º» ÆÁÀÇ ¿¹Á¦¿¡¼´Â ±¸ÀÔ ÁÖ¹®¼ ½ºÅ°¸¶ <xsd:element name="quantity">
<xsd:simpleType>
<xsd:restriction base="xsd:positiveInteger">
<xsd:maxExclusive value="100"/>
</xsd:restriction>
<xsd:attribute name="partNum" type="SKU"
use="required"/>
¼ö·®Àº 100À» ÃʰúÇÒ ¼ö ¾øÀ¸¸ç ºÎǰ¹øÈ£¿¡´Â ¹Ýµå½Ã JAXB 2.0ÀÇ ½ºÅ°¸¶µµ JAXB 1.0ÀÇ °æ¿ì¿Í ¸¶Âù°¡Áö·Î XML ¹ÙÀεù ÄÄÆÄÀÏ·¯( ¹ÙÀεù ¹× ÄÄÆÄÀÏÀ» ¿Ï·áÇÑ ÈÄ¿¡´Â XML ¹®¼¸¦ ¾ð¸¶¼£¸µ ÇÒ ¼ö ÀÖ´Ù. º» ÆÁ¿¡¼ »ç¿ëÇÏ´Â XML ¹®¼ <item partNum="002" >
<productName>Reliving the Ordeal</productName>
<quantity>150</quantity>
<USPrice>11.99</USPrice>
</item>
JAXB 2.0ÀÇ ¾ð¸¶¼£¸µÀº JAXB 1.0ÀÇ ¾ð¸¶¼£¸µ°ú °ÅÀÇ µ¿ÀÏÇÏ´Ù. ¸ÕÀú JAXB API¿¡ ´ëÇÑ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ Á¦°øÇÏ´Â JAXBContext jc = JAXBContext.newInstance( "techtip" ); Umarshaller u = jc.createUnmarshaller(); ¾ð¸¶¼£¸µ ÇÁ·Î¼¼½º¿¡¼ JAXB 2.0ÀÌ JAXB 1.0°ú ´Ù¸¥ Á¡ÀÌ ¹Ù·Î °ËÁõ ºÎºÐÀε¥, JAXB 1.0¿¡¼´Â ´ÙÀ½À» ÁöÁ¤ÇÔÀ¸·Î½á ¾ð¸¶¼£¸µ ÇÁ·Î¼¼½ºÀÇ ÀϺημ ¼Ò½º µ¥ÀÌÅ͸¦ °ü·Ã ½ºÅ°¸¶¿Í ´ëÁ¶ÇÏ¿© °ËÁõÇÒ ¼ö ÀÖ´Ù. unmarshaller.setValidating(true); JAXB 2.0¿¡¼´Â JAXP 1.3 ½ºÅ°¸¶ °ËÁõ ÇÁ·¹ÀÓ¿öÅ©¸¦ ÀÌ¿ëÇÏ¿© °ËÁõ ±â´ÉÀ» º¸´Ù Çâ»ó½ÃÄ×´Ù. ÀÌó·³ °ÈµÈ ·¹º§ÀÇ °ËÁõÀ» ÀÌ¿ëÇÏ·Á¸é ¸ÕÀú W3C XML Schema 1.0 ¾ð¾î¸¦ À§ÇÑ SchemaFactory sf = SchemaFactory.newInstance(
javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File("po.xsd"));
±×·± ´ÙÀ½ u.setSchema(schema); ¾ÖÇø®ÄÉÀ̼ÇÀº ±âº»°ª À̺¥Æ® Çڵ鷯¸¦ ¿À¹ö¶óÀ̵åÇÏ¿© °ËÁõ ¿À·ù 󸮸¦ Ä¿½ºÅ͸¶ÀÌÁîÇÒ ¼ö ÀÖ´Â ¿É¼ÇÀ» °¡Áö´Âµ¥, ÀÌ °æ¿ì¿¡´Â ¸Þ¼Òµå ÄÝ JAXB 1.0À¸·Î ¾ð¸¶¼£¸µÀ» ÇÏ´Â ÀÌÀüÀÇ Á¢±Ù¹ý(¼ÒÀ§ '±¸Á¶Àû ¾ð¸¶¼£¸µ')Àº À¯È¿ÇÏÁö ¾ÊÀº XML ÄÁÅÙÃ÷¿¡ ´ëÇØ ´õ ¾ö°ÝÇÑ ÆíÀÌ´Ù. JAXB 1.0Àº º¹±¸ ºÒ°¡´ÉÇÑ ±¸Á¶Àû ºÒÀÏÄ¡°¡ ŽÁöµÇ¸é ¾ð¸¶¼£¸µ ÇÁ·Î¼¼½º¸¦ Ãë¼ÒÇϰí ÀÌ¿Í ´Þ¸® JAXB 2.0Àº º¸´Ù À¯¿¬ÇÑ ¾ð¸¶¼£¸µÀ» Çã¿ëÇϴµ¥, ÀÌ´Â ºÎÀûÀýÇÑ XML ÄÁÅÙÃ÷ÀÇ ¾ð¸¶¼£¸µ °úÁ¤¿¡¼ÀÇ ¿¹Ãø °¡´É¼ºÀ» ´õ¿í ³ô¿©ÁØ´Ù. JAXB 2.0ÀÇ °æ¿ì, ÄÁÅÙÃ÷ ¸ðµ¨ ³»ÀÇ ¿¤¸®¸ÕÆ® À§Ä¡¸¦ ±âÁØÀ¸·Î ÇÏ¿© ¾ö°ÝÇÏ°Ô Àû¿ë½ÃŰ±â º¸´Ù´Â ¿¤¸®¸ÕÆ® À̸§ º°·Î xmlÀ» ¾ð¸¶¼£¸µÇÑ´Ù. °¢ÀÚÀÇ Ä¿½ºÅÒ À̺¥Æ® Çڵ鷯¸¦ ÁöÁ¤ÇÏ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù. u.setEventHandler(new DefaultValidationEventHandler()); Ä¿½ºÅÒ °ËÁõ À̺¥Æ® Çڵ鷯´Â ¹Ýµå½Ã public class MyValidationEventHandler implements
ValidationEventHandler{
public boolean handleEvent(ValidationEvent ve) {
if (ve.getSeverity()==ve.FATAL_ERROR ||
ve .getSeverity()==ve.ERROR){
ValidationEventLocator locator = ve.getLocator();
//print message from valdation event
System.out.println("Message is " + ve.getMessage());
//output line and column number
System.out.println("Column is " +
locator.getColumnNumber() +
" at line number " + locator.getLineNumber());
}
return true;
}
}
JAXB ½ºÆåÀº ¿À·ù ¹ß»ý ½Ã ¸ðµç ÇÁ·Î¹ÙÀÌ´õ ±¸ÇöÀÌ °ËÁõ ¿À·ù¸¦ º¸°íÇÒ °ÍÀ» ¿ä±¸Çϰí ÀÖÁö¸¸, ±¸ÇöÀÌ µ¥ÀÌÅÍ ÇÁ·Î¼¼½ÌÀ» Áß´ÜÇÒ ÇÊ¿ä±îÁö´Â ¾ø´Ù. ÇÑÆí, XML ¹®¼°¡ À¯È¿ÇÏÁö ¾Ê´õ¶óµµ JAXB ±¸ÇöÀº XML ¹®¼¸¦ ¼º°øÀûÀ¸·Î ¾ð¸¶¼£¸µ ÇÒ ¼ö ÀÖ´Ù.
JAXBElement<?> poElement =
JAXBElement<?>)u.unmarshal(
new FileInputStream( "po.xml" ) );
PurchaseOrderType po = (
PurchaseOrderType)poElement.getValue();
USAddress address = po.getShipTo();
ÄÁÅÙÃ÷¸¦ ´Ù½Ã XML ÆÄÀÏ·Î ¸¶¼£¸µÇÏ·Á¸é JAXB 1.0°ú µ¿ÀÏÇÑ ´Ü°è¸¦ °ÅÄ¡µµ·Ï ÇÑ´Ù. (¾Õ¼ ¾ð¸¶¼£¸µ °úÁ¤¿¡¼ º» °Íó·³) Marshaller m = jc.createMarshaller();
m.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE );
OutputStream os = new FileOutputStream(
"incorrectpo.xml" );
m.marshal(po, os);
º» ÆÁÀÇ ¿¹Á¦ Äڵ忡´Â Ç¥½ÃµÇ¾î ÀÖÁö ¾ÊÁö¸¸, JAXB 2.0Àº ¸¶¼£¸µ ½Ã¿¡(¾ð¸¶¼£¸µ ½Ã¿¡µµ) °ËÁõÀ» Áö¿øÇÑ´Ù. ÇÑÆí, JAXB 1.0ÀÇ °æ¿ì¿¡´Â ¾ð¸¶¼£¸µ ½Ã¿¡¸¸ °ËÁõÀ» ±ÔÁ¤Çϰí, JAXB ÄÁÅÙÃ÷ Æ®¸®ÀÇ ¿Âµð¸Çµå °ËÁõÀ» Áö¿øÇϴµ¥, ¸¶¼£¸µ ½ÃÀÇ °ËÁõÀº À¥ ¼ºñ½º ¶§¹®¿¡ Ãß°¡µÈ °ÍÀÌ´Ù. À¥ ¼ºñ½º ÇÁ·Î¼¼½Ì ¸ðµ¨Àº µ¥ÀÌÅ͸¦ ÀоîµéÀÏ ¶§´Â ¾î´À Á¤µµ ´À½¼ÇÏ°í ¹Ý´ë·Î µ¥ÀÌÅ͸¦ ±â·ÏÇÒ ¶§´Â ¾ö°ÝÇØ¾ß ÇÑ´Ù. ÀÌ ¸ðµ¨¿¡ ºÎÇÕÇϵµ·Ï, JAXB 2.0Àº »ç¿ëÀÚ°¡ xml ¹®¼¸¦ JAXB ¾ç½ÄÀ¸·Î ¼öÁ¤ÇÒ °æ¿ì ¹®¼°¡ ¹«È¿ÈµÇÁö ¾Êµµ·Ï Çϱâ À§ÇØ ¸¶¼£¸µ ½ÃÀÇ °ËÁõÀ» Ãß°¡ÇÏ¿´´Ù. Java-to-Schema ¹ÙÀεùÀ» ÀÌ¿ëÇÏ¿© Àڹ٠Ŭ·¡½º¿¡¼ XML »ý¼ºÇϱ⠾ռ ¾ê±âÇÑ °Íó·³, JAXB 1.0ÀÇ °æ¿ì XML Schema-to-Java ¸ÅÇÎÀº ÁöÁ¤µÇ¾úÁö¸¸ Java-to-XML SchemaÀÇ ¸ÅÇÎÀº ÁöÁ¤µÇÁö ¾Ê¾Ò´Ù. ÇÑÆí, JAXB 2.0Àº Java-to-XML SchemaÀÇ ¸ÅÇÎÀ» ÁöÁ¤ÇÔÀ¸·Î½á ÀÌ ÀÛ¾÷À» ¿Ï¼öÇÔ°ú µ¿½Ã¿¡ "A Metadata Facility for the Java Programming Language", JSR 175¿¡ ¸í½ÃµÈ ÁÖ¼®À» ÀÌ¿ëÇÏ¿© ÀÌ ¹ÙÀεùÀ» Á¦¾îÇÑ´Ù. º» ÆÁ¿¡¼´Â JAXB 2.0À» ÀÌ¿ëÇÏ¿© ±âÁ¸ÀÇ Àڹ٠Ŭ·¡½º·ÎºÎÅÍ XML ÆÄÀÏÀ» »ý¼ºÇÑ ´ÙÀ½ »ý¼ºµÈ XML ÆÄÀÏÀÇ ³»¿ëÀ» ÄַܼΠÇÁ¸°Æ®ÇÏ´Â ¹æ¹ýÀ» ¿¹½ÃÇØº¸µµ·Ï ÇÑ´Ù. »ç¿ëµÇ´Â µÎ °¡Áö Ŭ·¡½º´Â Ŭ·¡½º´Â XML Schema ÄÄÇ÷º½º ŸÀÔ ¶Ç´Â XML Schema ½ÉÇà ŸÀÔÀ¸·Î ¸ÅÇεǴµ¥, XML Schema ŸÀÔÀº Ŭ·¡½º¿¡ Æ÷ÇÔµÈ JavaBean ¼Ó¼º ¹× ÇʵåÀÇ ¸ÅÇÎÀ» ±âÃÊ·Î ÇÏ¿© ÆÄ»ýµÈ´Ù. JAXB 2.0¿¡¼ ÁÖ¼®Àº Java-to-Schema ¹ÙÀεù ÇÁ·¹ÀÓ¿öÅ©¿¡ ´ëÇØ Àڹ٠Ŭ·¡½º¸¦ Ãë±ÞÇÏ´Â ¹æ¹ýÀ» Áö½ÃÇϱâ À§ÇØ »ç¿ëµÈ´Ù. Åé ·¹º§ °ª Ŭ·¡½º¿¡ ´ëÇØ¼´Â ÁÖ¼® @XmlType
public class Person {
private String name;
private int age;
.....
Åé ·¹º§ Ŭ·¡½º¿¡ @XmlRootElement
public class Scientist {
private Person person;
private String researchInstitute;
private Collection publications;
...
ÀÌ ÁÖ¼®µéÀº ÁÖ¼®°ú ±âº»°ª ¸ÅÇÎÀº ±âÁ¸ Äڵ带 ÃÖ¼ÒÇÑÀ¸·Î º¯°æÇÏ¿© Ŭ·¡½º¸¦ ½ºÅ°¸¶¿¡ ¸ÅÇÎÇÒ ¼ö ÀÖµµ·Ï ¼³°èµÇ¾úÀ¸¸ç, ±âº»°ª ¸ÅÇÎÀº ÁÖ¼®ÀÌ ÁöÁ¤µÇÁö ¾Ê´õ¶óµµ ÇÁ·Î±×·¥ ¿¤¸®¸ÕÆ®¿¡ Àû¿ëµÇ´Â °ÍÀ¸·Î °£ÁֵǴ ±âº»°ª ÁÖ¼®À» ±âÃÊ·Î ÇÏ¿© ÁöÁ¤µÈ´Ù. ÀÌ¿Í °ü·ÃÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀ» º¸·Á¸é ÃÖÁ¾º» JAXB 2.0 ½ºÆåÀÇ ¼½¼Ç 8.12¸¦ ÂüÁ¶ÇÒ °Í. º» ÆÁÀÇ ÄÚµå ¿¹Á¦ÀÇ °æ¿ì, Java-to-XML Schema ¸ÅÇÎÀÌ °®Ãß¾îÁø »óÅ¿¡¼´Â JAXBContext context =
JAXBContext.newInstance(Scientist.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
ÇØ´ç ¼Ó¼ºÀ» ÀÌ¿ëÇÏ¿© ÇÊ¿äÇÑ Scientist scientist = js.getScientist(); m.marshal(scientist, System.out); JAXB 2.0¿¡ °üÇÑ ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº JAXB 2.0 ÇÁ·ÎÁ§Æ® ÆäÀÌÁö¸¦ ÂüÁ¶ÇÒ °Í. ¿¹Á¦ ÄÚµå ½ÇÇàÇϱ⠿¹Á¦ ÆÐÁöŰ¿¡´Â ÆÁ¿¡¼ ´Ù·é ±â¹ýÀ» ¿¹½ÃÇÏ´Â º» ÆÁÀÌ Æ÷ÇԵǾî ÀÖ´Ù. ¿¹Á¦¸¦ ¼³Ä¡ÇÏ°í ½ÇÇàÇÏ·Á¸é ´ÙÀ½ÀÇ ÀÛ¾÷ ÀýÂ÷¸¦ µû¸£µµ·Ï ÇÑ´Ù.
ÇÊÀÚ ¼Ò°³ Kim LiChongÀº ½ã ¸¶ÀÌÅ©·Î½Ã½ºÅÛÁî Java Web Services Performance Engineering Group ±â¼úÁøÀÇ ¸â¹ö·Î¼, XML ÆÄ½Ì ¼º´É¿¡ ´ëÇØ ƯÈ÷ Áö´ëÇÑ °ü½ÉÀ» °¡Áö°í ÀÖÀ¸¸ç, StAX 1.0 White Paper: Streaming APIs for XML ParsersÀÇ °øµ¿ ÀúÀÚ Áß ÇÑ »ç¶÷À̱⵵ ÇÏ´Ù. ±×´Â ¶ÇÇÑ XML ÆÄ½Ì ¼º´É ÃøÁ¤¿¡ »ç¿ëµÇ´Â ¸¶ÀÌÅ©·Îº¥Ä¡¸¶Å©ÀÎ xmltestÀÇ °øµ¿ ¼ÒÀ¯ÀÚÀÌ´Ù. xmltest¿¡ °üÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀ» º¸·Á¸é xmltest ÇÁ·ÎÁ§Æ® ÆäÀÌÁö¸¦ ÂüÁ¶ÇÒ °Í. ¸ÇÀ§·Î | ||
| À¥ ¼ºñ½º ¸ð´ÏÅ͸µ | ||
|
J2EE 1.4¿¡¼ »õ·Î ¼Ò°³µÈ ±â¼ú Áß Çϳª°¡ ¹Ù·Î J2EE Management, JSR 77À̾ú´Ù. J2EE Mnagement´Â J2EE ÄÄÆ÷³ÍÆ®¸¦ À§ÇÑ °ü¸® Á¤º¸, ¿ÀÆÛ·¹À̼Ç, ¼Ó¼º °ø°³ ¹× ¾×¼¼½º¸¦ À§ÇÑ Ç¥ÁØ °ü¸® ¸ðµ¨À» Á¦°øÇÒ »Ó ¾Æ´Ï¶ó JMX(Java Management Extensions)¿Í °°Àº ±â¼ú°ú ´õºÒ¾î °³¹ßÀڵ鿡°Ô J2EE ¼¹ö »ó¿¡¼ÀÇ ¸®¼Ò½º °ü¸® ¹× ¸ð´ÏÅ͸µÀ» À§ÇÑ º¥´õ Á߸³Àû ¹æ½ÄÀ» Á¦°øÇÑ´Ù. (JMX¿¡ °üÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀ» º¸·Á¸é Å×Å©ÆÁ JMX ±â¼ú ÀÌÇØÇϱ⸦ ÂüÁ¶ÇÒ °Í.) ÀÌ·± ±â¼úµéÀ» ÅëÇØ °ü¸®ÇÏ°í ¸ð´ÏÅÍÇÒ ¼ö ÀÖ´Â ¸®¼Ò½ºÀÇ Çϳª°¡ ¹Ù·Î À¥ ¼ºñ½ºÀÌ´Ù. ÇÏÁö¸¸, ±×µ¿¾È À¥ ¼ºñ½ºÀÇ °ü¸®¿Í ¸ð´ÏÅ͸µÀÇ ¿ëÀ̼ºÀ» ³ôÀ̱â À§ÇØ ÀÌ·± ±â¼úµéÀ» Ȱ¿ëÇÏ´Â ÅøÀ» ã¾Æº¸±â¶õ °ÅÀÇ ºÒ°¡´ÉÇß´Ù. ÃÖ±ÙÀÇ ¿¹¿Ü Áß Çϳª°¡ ¹Ù·Î Java EE 5ÀÇ ¿ÀǼҽº ¾ÖÇø®ÄÉÀÌ¼Ç ¼¹ö ±¸ÇöÀÎ GlassFishÀε¥, GlassFish¿¡¼ À¥ ¼ºñ½º´Â ¸ð´ÏÅÍ ¹× °ü¸®°¡ ¿ëÀÌÇÑ 1Â÷ Ŭ·¡½º °´Ã¼ÀÌ´Ù. ÀÌÁ¦ ¿©·¯ºÐÀº º» ÆÁ¿¡¼ ÀÌ GlassFish ±â´ÉÀ» ÀÌ¿ëÇÏ¿© À¥ ¼ºñ½º¸¦ ¸ð´ÏÅÍÇÒ ¼ö ÀÖ´Â ±âȸ¸¦ °®°Ô µÉ °ÍÀÌ´Ù. ½ÃÀÛÇϱ⠸ÕÀú Ãʱ⠼³Á¤ ÀÛ¾÷ºÎÅÍ ½ÃÀÛÇØº¸µµ·Ï ÇÏÀÚ. GlassFish¸¦ ¾ÆÁ÷ ±¸ÇÏÁö ¸øÇß´Ù¸é GlassFish ´Ù¿î·Îµå ÆäÀÌÁö¿¡¼ ´Ù¿î·ÎµåÇÑ ´ÙÀ½, ¾Æ·¡¿Í °°ÀÌ È¯°æ º¯¼ö¸¦ ¼³Á¤ÇÑ´Ù.
¾Æ¿ï·¯, ant À§Ä¡¸¦ °¢ÀÚÀÇ º» ÆÁÀº Å×Å©ÆÁ JAX-WS¸¦ ÀÌ¿ëÇÏ¿© À¥ ¼ºñ½º °³¹ßÇϱ⿡¼ ¼³¸íÇÑ 1Â÷ Ŭ·¡½º °´Ã¼·Î¼ÀÇ À¥ ¼ºñ½º ´ëºÎºÐÀÇ J2EE Áؼö ¾ÖÇø®ÄÉÀÌ¼Ç ¼¹ö´Â ¹èÄ¡µÈ ¾ÆÄ«À̺ê, Áï ear, war, jar, rar ÆÄÀÏÀ» ¸®½ºÆ®ÇÏÁö¸¸, ¹èÄ¡µÈ À¥ ¼ºñ½º´Â ¸®½ºÆ®ÇÏÁö ¾Ê´Â °ÍÀÌ ÀϹÝÀûÀÌ´Ù -- Àû¾îµµ, µµ¸ÞÀÎ ³»¿¡ ¹èÄ¡µÈ ¸ðµç À¥ ¼ºñ½º ¿£µåÆ÷ÀÎÆ®¸¦ ½±°Ô ãÀ» ¼ö ÀÖ´Â ¹æ½ÄÀ¸·Î ¸®½ºÆ®ÇÏÁö´Â ¾Ê´Â´Ù. ÀÌ·¯ÇÑ À¯ÇüÀÇ ¾ÖÇø®ÄÉÀÌ¼Ç ¼¹ö¿¡¼ À¥ ¼ºñ½º¸¦ °ü¸®Çϱâ À§Çؼ´Â ÇØ´ç À¥ ¼ºñ½º¿¡ ´ëÇÑ ¹èÄ¡ ¼¼úÀÚ¸¦ °ËÅäÇØ¾ß ÇÑ´Ù. ÇÑÆí, À̿ʹ ´ëÁ¶ÀûÀ¸·Î GlassFish¿¡¼´Â ¸ðµç À¥ ¼ºñ½º ¿£µåÆ÷ÀÎÆ®°¡ ¸íÈ®ÇÏ°Ô Ç¥½ÃµÈ´Ù. ¸ðµç À¥ ¼ºñ½º´Â EJB(Enterprise JavaBeans) ÄÄÆ÷³ÍÆ® ¹× ¼ºí¸´°ú °°Àº ´Ù¸¥ ¿£ÅÍÇÁ¶óÀÌÁî ¸®¼Ò½º¿Í ´õºÒ¾î GlassFish °ü¸® Äֿܼ¡ ¸®½ºÆ®µÇ´Âµ¥, ÀÌ´Â À¥ ¼ºñ½º¸¦ ½±°Ô °ü¸®ÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. ¿¹½Ã¸¦ À§ÇØ ´ÙÀ½ ¸í·É¾î¸¦ ÀÔ·ÂÇÏ¿© GlassFish ¾ÖÇø®ÄÉÀÌ¼Ç ¼¹ö¸¦ ½ÃÀÛÇÑ´Ù. <GLASSFISH_HOME>\bin\asadmin start-domain domain1 ÀÌ ¶§, <GLASSFISH_HOME>Àº GlassFish°¡ ¼³Ä¡µÈ µð·ºÅ丮¸¦ ³ªÅ¸³½´Ù. ´ÙÀ½°ú °°Àº ³»¿ëÀÌ Ç¥½ÃµÇ¾î¾ß ÇÑ´Ù. Starting Domain domain1, please wait. Log redirected to <GLASSFISH_HOME>/domains/domain1/logs/server.log. Domain domain1 started. GlassFish°¡ ½ÃÀÛµÈ ÈÄ °¢ÀÚÀÇ ºê¶ó¿ìÀú¸¦
À¥ ¼ºñ½º ¸ð´ÏÅ͸µÇϱâ GlassFish´Â ÃÊ´ç ¿äû ¼ö, Æò±Õ ÀÀ´ä ½Ã°£, ¾²·çDz µî°ú °°Àº À¥ ¼ºñ½ºÀÇ ¿î¿µ Åë°è¸¦ ÃßÀûÇÏ°í ±×·¡ÇÈ Çü½ÄÀ¸·Î Ç¥½ÃÇØÁÖ´Â ±â´ÉÀ» °®Ãß°í ÀÖÀ¸¸ç, »ç¿ëÀÚ´Â ¾ÖÇø®ÄÉÀÌ¼Ç ³»ÀÇ °³º° À¥ ¼ºñ½º¿¡ ´ëÇÑ ¸ð´ÏÅ͸µÀ» Àο¡À̺í("»ç¿ëÇÔ")½Ãų ¼ö ÀÖ´Ù. ¸ð´ÏÅ͸µÀº ´ÙÀ½°ú °°Àº ¼¼ °¡Áö ·¹º§À» Áö¿øÇÑ´Ù.
(LOW ¶Ç´Â HIGH¸¦ ÁöÁ¤ÇÏ¿©) À¥ ¼ºñ½º¿¡ ´ëÇÑ ¸ð´ÏÅ͸µ ±â´ÉÀ» ÀÛµ¿½Ã۸é, ÇØ´ç À¥ ¼ºñ½º¿¡ ÀÇÇØ ¼öÇàµÇ´Â ¸ðµç ¿¬»ê¿¡ ´ëÇØ ¸ð´ÏÅ͸µÀÌ Àο¡À̺íµÈ´Ù. ¸ð´ÏÅ͸µ Á¤º¸¸¦ µð½ºÇ÷¹ÀÌÇÏ·Á¸é À¥ ¼ºñ½º¿¡ °üÇÑ »ó¼¼ Á¤º¸°¡ Ç¥½ÃµÇ´Â â¿¡¼ Monitor ÅÇÀ» Ŭ¸¯ÇÑ´Ù. ¸ð´ÏÅ͸µ ±â´ÉÀº OFF·Î ±âº» ¼³Á¤µÇ¾î ÀÖÀ¸¹Ç·Î óÀ½¿¡´Â "No Statistic is available for this web service"¶ó´Â ¸Þ½ÃÁö°¡ Ç¥½ÃµÈ´Ù. ÀÌ ¶§, âÀÇ Configuration ÅÇÀ» Ŭ¸¯ÇÏ¸é ¸ð´ÏÅ͸µÀÌ ÀÛµ¿µÈ´Ù. Åë°è¿Í ¸Þ½ÃÁöÀÇ ¼öÁýÀ» ½ÃÀÛÇÏ·Á¸é ¸ð´ÏÅ͸µ ·¹º§À» HIGH·Î ¼³Á¤Çϰí Save¸¦ Ŭ¸¯ÇÑ´Ù.
ÀÌÁ¦ "JAX-WS¸¦ ÀÌ¿ëÇÏ¿© À¥ ¼ºñ½º °³¹ßÇϱâ" Å×Å©ÆÁÀÇ "Ŭ¶óÀÌ¾ðÆ® ½ÇÇà(Run the Client)" ¼½¼ÇÀÇ Áö½Ã»çÇ׿¡ µû¶ó Calculator À¥ ¼ºñ½º¿¡ SOAP ¿äûÀ» Àü¼ÛÇÑ´Ù. ´ÙÀ½°ú À¯»çÇÑ Ãâ·ÂÀÌ Ç¥½ÃµÇ¾î¾ß ÇÑ´Ù. runtest-jaxws:
[echo] Executing appclient with client class as
client.JAXWSClient
[exec] Retrieving port from the service
com.techtip.jaxws.sample.CalculatorService@162522b
[exec] Invoking add operation on the calculator port
[exec] Adding : 0 + 10 = 10
[exec] Adding : 1 + 10 = 11
[exec] Adding : 2 + 10 = 12
[exec] Adding : 3 + 10 = 13
[exec] Adding : 4 + 10 = 14
[exec] Adding : 5 + 10 = 15
[exec] Adding : 6 + 10 = 16
[exec] Adding : 7 + 10 = 17
[exec] Adding : 8 + 10 = 18
[exec] Adding : 9 + 10 = 19
all:
BUILD SUCCESSFUL
Total time: 6 seconds
Monitor âÀÇ Statistics ÅÇÀ» Ŭ¸¯Çϸé Calculator À¥ ¼ºñ½º¿Í °ü·ÃÇÏ¿© ¼öÁýµÈ ´ÙÀ½ÀÇ Åë°è°¡ Ç¥½ÃµÇ¾î¾ß ÇÑ´Ù.
´ÙÀ½ÀÇ CLI ¸í·É¾î¸¦ ÀÌ¿ëÇØµµ µ¿ÀÏÇÑ °á°ú¸¦ ¾òÀ» ¼ö ÀÖ´Ù(¸í·É¾î´Â ÇÑ Çà¿¡ ÀÔ·ÂÇØ¾ß ÇÔ). <GLASSFISH_HOME>\bin\asadmin get -m --port 4848 "server.applications.jaxws-webservice-web.Calculator. webservice-endpoint.*" ´ÙÀ½°ú À¯»çÇÑ Ãâ·ÂÀÌ Ç¥½ÃµÇ¾î¾ß ÇÑ´Ù. server.applications.jaxws-webservice-web.Calculator. webservice-endpoint.averageresponsetime-count = 9 server.applications.jaxws-webservice-web.Calculator. webservice-endpoint.averageresponsetime-description = Average response time measured in milliseconds server.applications.jaxws-webservice-web.Calculator. webservice-endpoint.averageresponsetime-lastsampletime = 1136835037801 server.applications.jaxws-webservice-web.Calculator. webservice-endpoint.averageresponsetime-name = AverageResponseTime ... °á°ú¹°¿¡´Â Administration Äֿܼ¡ Ç¥½ÃµÈ °Íº¸´Ù ´õ ¸¹Àº Á¤º¸°¡ Æ÷ÇԵȴٴ Á¡¿¡ À¯ÀÇÇÒ °Í. ¿¹¸¦ µé¾î, CLI °á°ú¿¡´Â °¢ Åë°è¿Í ±× ÃøÁ¤ ´ÜÀ§¿¡ ´ëÇÑ ¼³¸íÀÌ ¸ðµÎ Æ÷ÇԵǾî ÀÖ´Ù. Message Trace »ç¿ëÇϱ⠸ð´ÏÅ͸µ ·¹º§ÀÌ HIGHÀÎ °æ¿ì¿¡´Â À¥ ¼ºñ½º ¿£µåÆ÷ÀÎÆ®¿¡ ´ëÇÑ ¸¶Áö¸· n°³ÀÇ ¸Þ½ÃÁö¸¦ µð½ºÇ÷¹ÀÌÇÒ ¼ö ÀÖ´Ù(±âº»°ªÀº 25). ¸Þ½ÃÁö´Â °¢ ¼¹ö ÀνºÅϽºÀÇ ÇØ´ç ¸Þ¸ð¸®¿¡ º¸°üµÈ´Ù. ¸Þ½ÃÁö´Â SOAP ¿äûÀÇ ¼¼ºÎ»çÇ×°ú ´õºÒ¾î ÀÀ´ä ¹× HTTP Çì´õ Á¤º¸¸¦ Ç¥½ÃÇϴµ¥, ¸Þ½ÃÁö¸¦ µð½ºÇ÷¹ÀÌÇÏ·Á¸é Monitor âÀÇ Messages ÅÇÀ» Ŭ¸¯ÇÑ´Ù.
Messages â¿¡¼ ¸Þ½ÃÁö¸¦ Ŭ¸¯ÇÏ¸é ¸Þ½ÃÁö¿¡ ´ëÇÑ Ãß°¡ ¼¼ºÎ»çÇ×À» º¼ ¼ö ÀÖÀ¸¸ç, µð½ºÇ÷¹ÀÌµÈ ¼¼ºÎ»çÇ׿¡µµ XML Æ÷¸ËÀÇ ¼¼ºÎ»çÇ×À» ¿äûÇϴµ¥ »ç¿ëµÇ´Â ¹öưÀÌ Æ÷ÇԵǾî ÀÖ´Ù. ÇÊÀÚ ¼Ò°³ Satish ViswanathamÀº ½ã Application Server ÆÀ ¼Ò¼Ó ¿£Áö´Ï¾î·Î, ÃÊâ±âºÎÅÍ J2EE ±â¼ú¿¡ Âü¿©ÇØ ¿Ô´Ù. ±×´Â ÇöÀç J2EE ¾ÖÇø®ÄÉÀÌ¼Ç ¼¹ö¸¦ ¼ºñ½º ÁöÇâ ¾ÆÅ°ÅØÃ³(SOA) ¿£ÁøÀ¸·Î ¸¸µå´Â ÀÛ¾÷¿¡ Àû±ØÀûÀ¸·Î Âü¿©Çϰí ÀÖÀ¸¸ç, JDBC/EJB Æ®·£Àè¼Ç ¹× °ü¸® ±â¼ú ºÐ¾ß¿¡¼ dzºÎÇÑ °æ·ÂÀ» ½×Àº ¹Ù ÀÖ´Ù. ½ã¿¡ ÇÕ·ùÇϱâ Àü¿¡ Satish´Â Kiva ¾ÖÇø®ÄÉÀÌ¼Ç ¼¹ö¿Í Netscape À¥ ¼¹ö °°Àº pre-J2EE ¾ÖÇø®ÄÉÀÌ¼Ç ¼¹ö ÀÛ¾÷¿¡ Âü¿©ÇßÀ¸¸ç, ½ã¿¡ ÀçÁ÷ÇÏ´Â µ¿¾È 3°³ÀÇ Æ¯Ç㸦 Ãâ¿øÇϱ⵵ Çß´Ù. Nazrul IslamÀº Application ServerÀÇ Administration & Management ÆÀÀÇ °íÂü ¸â¹ö·Î¼ Áö³ 5³â µ¿¾È J2EE ±×·ì¿¡ ²ÙÁØÈ÷ Âü¿©ÇØ ¿Ô´Ù. ±×´Â Application Server Enterprise Edition ¼³°è¿Í ±¸Çö¿¡ Å©°Ô ±â¿©ÇßÀ¸¸ç, ½ã¿¡ ÀçÁ÷ÇÏ´Â µ¿¾È 8°³ÀÇ Æ¯Ç㸦 Ãâ¿øÇß´Ù. ¸ÇÀ§·Î | ||
º»
¸ÞÀÏÀº ¼ö½ÅÀ» µ¿ÀÇÇÑ È¸¿ø´Ô¿¡°Ô¸¸ ¹ß¼ÛµË´Ï´Ù.
º» ¸ÞÀÏÀÇ ¼ö½ÅÀ» °ÅºÎÇϰųª ¼ö½ÅÁÖ¼Ò¸¦ º¯°æÇÏ·Á¸é SKDN@Sun.comÀ¸·Î ¹®ÀÇ Áֽñ⠹ٶø´Ï´Ù. SKDN(Sun Korea Developers Network)¿¡¼ J2EE/J2SE Å×Å©ÆÁ µî ´Ù¾çÇÑ ¾ÆÆ¼Å¬µéÀ» Âü°íÇϼ¼¿ä. Copyright 2003-2006 Sun Korea, Ltd. All rights reserved. |