Site Search :
Standard Enterprise XML Methodology Pattern Setting Tunning Other
Article Contributors
GuestBook
Javapattern Maven
XSourceGen Dev
JetSpeed Test
JLook Image
jLook Family Site


WebLogic WLSPool Sizeº¯°æ application
 
À¥·ÎÁ÷ 8.1ÀÇ °æ¿ì config xmlÆÄÀÏÀÇ ¼öÁ¤ÀÌ ºÒ°¡´ÉÇϱ⠶§¹®¿¡ ÇØ´ç jarÆÄÀÏÀÇ ¼³Á¤°ªÁß ejb pooling size¸¦ º¯°æÇÒ ¼ö ÀÖ´Â utilityŬ·¡½º¸¦ ¼Ò°³Çϵµ·Ï ÇÑ´Ù. ( 2003/12/10 ) 105
Written by specular - ÀüÈ«¼º,ÃÖÁö¿õ
1 of 1
 

¿©·¯ºÐµé ³¯¾¾°¡ ¸¹ÀÌ Ãß¿öÁ³ÁÒ? ³¯¾¾°¡ Ãß¿ö¼­ÀÎÁö °è¼Ó ÀḸ¿À°í..¾Æ¹«·¡µµ Á¦°¡ °Ü¿ïÀáÀ» ÁغñÇÏ´Â
°Í °°½À´Ï´Ù. ½ºÅ°Àåµµ Á» ´Ù´Ï°í ÇØ¾ß Çϴµ¥ ÁÖ¸»¿¡ ¿ø ½Ã°£ÀÌ ÀÖ¾î¾ß µ¹¾Æ´Ù´ÏµçÁö ÇÏÁÒ.. ^^
¾ÖÀÎÀÌ ¾ø¾î¼­ ±×·±Áö ¿·±¸¸®µµ ÇãÀüÇÏ°í ±×·¸´Ù°í ½Ã°£ÀÌ ³ª´Â°Íµµ ¾Æ´Ï°í ¸»ÀÌÁÒ..
À̹ø ¾ÆƼŬ¼Ò½º´Â ÂË´ÔÀÌ ÀÛ¼ºÀ» ÇÏ¼Ì°í ±ÛÀº Á¦°¡ ¾²°í ÀÖ½À´Ï´Ù.. ¿äÁò ¸¹ÀÌ ÇÒÀÏÀÌ ¾øÀ¸½Å°¡ º¾´Ï´Ù.
´Ù½Ã ¾öû³­ °øºÎ·Î ³»°øÀ» Å°¿ì½Ã´Â°É º¸¸é ¸»ÀÌÁÒ.^^

µý¼Ò¸®Áö¸¸ ¾Æ·¡ÂÊ¿¡ ÀÖ´Â jNetServer¸¦ ¼Ò½º¿ÀÇ½à ºÐ¼®ÇÏ¿© ÀÀ¿ëÇÏ°Ô µÇ¸é ¿©·¯ºÐµéµµ ¾ÆÁÖ °£´ÜÇÑ 
EJB ContainerÁ¤µµ´Â ¶Òµü ¸¸µå½ÃÁö ¾ÊÀ»±î »ý°¢ÇÕ´Ï´Ù. ¾Æ´Ñ°¡¿ä? ¤¾¤¾

ÀÚ. ¾ÆƼŬ µé¾î°©´Ï´Ù.

¢º ÀÛ¼ºµ¿±â

¾î´À³¯ ÂËÀÌ ¿­½ÉÈ÷ ÇÁ·ÎÁ§Æ®¸¦ ÇÏ¿© ¿ÀÇ 2´ÞÀü¿¡ ÀÌ¹Ì ¸ðµç ¿ä±¸»çÇ×À» ±¸ÇöÇÑ ÈÄ Å×½ºÆ®ÁßÀ̾ú½À´Ï´Ù.
±×·±µ¥ ÇÏ·ç´Â °è¼Ó ejb°¡ ÀÛµ¿¿¡·¯¸¦ ¹ß»ýÀ» ½ÃÅ°´õ¶ó ÀÌ°Ì´Ï´Ù. 
EAIÇÁ·ÎÁ§Æ®¿¡¼­ BEA WLI¸¦ ÀÌ¿ëÇÏ¿© work flow¸¦ ÀÛ¼ºÇÏ°í ÇØ´ç ¾÷¹«¸¦ ÀÚµ¿À¸·Î EJB·Î ¹Ù²ãÁִµ¥
¹®Á¦´Â WLI¿¡¼­ EJB¿¡ ´ëÇÑ pooling size°¡ ¾ÆÁÖ ÀûÀº ¼ö·Î ¼³Á¤ÀÌ µÇ¾îÁö´õ¶õ °ÍÀε¥ ¸¸¾à¿¡
ÇØ´ç ¾ÖÇø®ÄÉÀ̼ÇÀ» ¹Ù²Ù·Á¸é ear or jar¾ÐÃàÀ» ǬÈÄ METAÁ¤º¸¸¦ ¼öÁ¤À» ÇÏ°í ´Ù½Ã ¾ÐÃàÇÑ ÈÄ 
deploy¸¦ ÇØ¾ß ÇÑ´Ù´Â °ÍÀ̾ú´Âµ¥ EJB°¡ ¸¹¾ÆÁö¸é ¸¹ÀÌÁú¼ö·Ï ÇÏ°Ô µÇ´Â ³ë°¡´Ù´Â ÀÌ·ç ¸»ÇÒ¼ö
¾ø°ÚÁö¿ä.

¢º »ý°¢²¨¸®

ÀÚ~ ½ÇÁ¦ ÇØ°á¹æ¹ýÀ» º¸¿©ÁÖ±â Àü¿¡ Á¦°¡ Ç×»ó ¿©·¯ºÐµé¿¡°Ô Áú¹®À» ÇÏÁÒ? ¾î¶»°Ô Çϸé À§ÀÇ ¹®Á¦Á¡À»
ó¸®ÇÒ ¼ö ÀÖÀ» °ÍÀÎÁö ¸»ÀÌÁÒ..
³²ÀÇ °ÍÀ» ´þ¼®´þ¼® ¹Þ¾Æ¸ÔÀ» ¶§´Â ÀÌ¹Ì Áö³ª¾ß ÇÏÁö ¾Ê³ª¿ä? ¿©±âÀÇ ¾ÆƼŬµéÀ» º¸½Ã°í ÇÑ´Ù¸é
ÃÖ¼ÒÇÑ ±×Á¤µµÀÇ ¿¹ÀÇ(?)´Â °®Ãß¼Å¾ß ÇÏÁö ¾ÊÀ»±î¿ä? 
½º½º·Î ¹®Á¦¸¦ ã¾Æ ÇØ°áÇÏ·Á´Â ³ë·Â~ copy-paste¿¡ ÀÇÁ¸ÇÏÁö ¾Ê´Â ¹æ¹ýÀ» Å͵æÇؾßÁÒ. ¹ßÀüÇؾßÇϴϱî¿ä.

»ý°¢Çϼ̳ª¿ä? Èì~ À̸¦ ¾î¶»°Ô ÇÑ´Ù? jarÆÄÀÏÀÇ ³»¿ëÀ» ó¸®ÇØ¾ß Çϴµ¥.. ±×¸®°í xmlÀ» ó¸®ÇØ¾ß Çϰڴµ¥?
¹®Á¦´Â ejb-jar, weblogic-ejb-jar.xmlÀÇ ±¸¹®Á¶Â÷µµ ¸ð¸¥´Ù¸é ÀÌ ±ÛÀ» Àд °ÍÀ» Æ÷±âÇØ¾ß ÇÒÁöµµ ¸ô¶ó¿ä.¤Ñ.¤Ñ
ÀÚ¹ÙÀÇ ¸ÀÀÌ ÇÁ·Î±×·¥À» VisualÇÑ MS°è¿­ÀÇ ÅøÀÌ ¾Æ´Ñ text·Î ¸¸µé¾î³Â´Ù´Â°ÍÀ̾ú´Âµ¥ ¿äÁò °¢Á¾ IDEµéÀÌ 
±×·¯ÇÑ °Í(¾ÖÇø®ÄÉÀÌ¼Ç ÄÚµù)µéÀ» Ŭ¸¯Å¬¸¯À¸·Î ÇØÁÖ´Ï ÀÌÁ¦ ¹¹ ºñ½ÁÇÏ°Ô µÇ±ä Çß½À´Ï´Ù.
Áö±Ý ÇÃÁ§À» ÇÏ°í Àִµ¥ ÇÑ °³¹ßÀÚ°¡ ±âÁ¸¿¡ Çß´ø ÇÁ·ÎÁ§Æ®ÀÇ ÄÚµùÆÐÅÏÀ» Á¦°¡ º¸±âÀ§Çؼ­ EJBÄڵ带
¿­¾î Çϳª¸¸ ½ÇÇàÇغ¸¶ó°í Çߴµ¥ WSAD¸¦ ½ÇÇà½ÃÅ°´õ¶õ ¸»ÀÌÁÒ..
ÀÌ°Å ¿ø~ ÂÁ... ^^ Åøµµ ÁÁÁö¸¸ ±âº»ÀûÀÎ °ÍµéÀ» ¸ÕÀú º»ÈÄ¿¡ ÇÏ¸é ´õ ÁÁ°ÚÁÒ?

¢º ±¸Çö¹æ¹ý

ÀÌÁ¦ ±¸Çö¿¡ µé¾î°©´Ï´Ù. 
¿ì¼± ¿ì¸®°¡ deploy¸¦ ½ÃÄ×´ø ÆÄÀÏÀº jar³ª earÀÇ ÇüŸ¦ ÃëÇÏ°Ô µÉ°ÍÀ̱¸¿ä. 

1. ¿ì¼± ÇØ´ç ¾ÐÃàÆÄÀÏÀ» ã´Â´Ù
2. ¾ÐÃàµÈ ÆÄÀÏÁß ejb¿¡ °ü·ÃµÈ META-INFÀÇ Á¤º¸¸¦ ã¾Æ ÇØ´ç xmlÆÄÀÏÀ» ÆĽÌÇϵµ·Ï ÇÑ´Ù.
3. ÆÄ½ÌµÈ ¹®¼­ÀÇ pool size¸¦ ÀԷ¹ÞÀº ³»¿ëÀ¸·Î ġȯÇÑ ÈÄ ´Ù½Ã ÀúÀåÇÑ´Ù.
4. ´Ù½Ã ÇØ´ç ÆÄÀÏÀ» ¾ÐÃàÇÑ´Ù.

À§ÀÇ Á¤µµ·Î ±¸ÇöÀ» ÇÏ¸é µÇ°Ú³×¿ä.
±âº»ÀûÀÎ standard APIÀÇ »ç¿ëÀº ÇʼöÀÌ°Ú±¸¿ä.

JDK1.3 ÀÌÇÏÀÇ ¹öÁ¯À» ¾²½Ã´Â ºÐµéÀº XMLÆĽ̿¡ °ü·ÃµÈ Ŭ·¡½º¸¦ ´Ù¿î¹Þ¾Æ Ŭ·¡½º Æнº¿¡ Ãß°¡ÇϽŠÈÄ 
ÄÄÆÄÀÏ ¹× ½ÇÇàÇÏ¼Å¾ß ÇÕ´Ï´Ù.


¢º ±¸Çöü



package jlook.weblogic.util;

import java.io.*;
import java.util.*;
import java.util.jar.*;
import java.util.zip.*;

import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import org.xml.sax.helpers.*;

/**
 *	ƯÁ¤ µð·ºÅ丮 ¹ØÀÇ ¸ðµç EJB jar ÆÄÀÏÀ» °Ë»öÇÏ¿© jar ÆÄÀÏ ³» 
 *	WebLogic Deployment Descriptor[weblogic-ejb-jar.xml] ÆÄÀÏÀ» DOMÀ¸·Î ·ÎµùÇÏ¿© 
 *	initial-beans-in-free-pool, max-beans-in-free-poolÀÇ size¸¦ command lineÀ¸·Î
 *	ÀÔ·ÂÇÑ °ªÀ¸·Î º¯°æÀúÀåÇÏ´Â ApplicationÀÌ´Ù.
* usage : java WLSPoolModifier <target-directory> <min-size> <max-size>
* * @since 1.0 * @author Jeon HongSeong(hsjeon70@dreamwiz.com) */ public class WLSPoolModifier implements Runnable { /** Target Directory */ private static String PATH; /** inital size */ private static int minSize; /** maximum size */ private static int maxSize; /** WebLogic Deployment Descriptor file °æ·Î */ private static final String DD_ENTRY = "META-INF/weblogic-ejb-jar.xml"; /** root tag name */ private static final String WEBLOGIC_ENTERPRISE_BEAN = "weblogic-enterprise-bean"; /** stateless session descriptor tag name */ private static final String STATELESS_SESSION_DESCRIPTOR = "stateless-session-descriptor"; /** pool tag name */ private static final String POOL = "pool"; /** maximum size tag name */ private static final String MAX_BEANS_IN_FREE_POOL = "max-beans-in-free-pool"; /** initial size tag name */ private static final String INITIAL_BEANS_IN_FREE_POOL = "initial-beans-in-free-pool"; /** current time mill */ private static long systime = System.currentTimeMillis(); /** DOCTYPEÀÇ SYSTEM ID */ private static String SYSTEM_ID; /** DOCTYPEÀÇ PUBLIC ID */ private static String PUBLIC_ID; /** weblogic.doctype file loading ¿©ºÎ */ private static boolean load = false; /** * static initializer
* weblogic.doctype fileÀ» classpath¿¡¼­ ã¾Æ ·ÎµùÇÑ´Ù. */ static { try { ClassLoader loader = WLSPoolModifier.class.getClassLoader(); InputStream in = loader.getResourceAsStream("weblogic.doctype"); if(in!=null) { Properties p = new Properties(); p.load(in); p.list(System.out); SYSTEM_ID=p.getProperty("systemId"); PUBLIC_ID=p.getProperty("publicId"); load = true; } } catch(Exception e) { e.printStackTrace(); } } /** * application main method
* command line Àμö¸¦ validateÇÏ°í, thread¸¦ startÇÑ´Ù.
* * @param args path, min-size, max-size */ public static void main(String args[]) throws Exception { if(args.length!=3) { System.out.println("java WLSPoolModifier <path> <min-size> <max-size>"); return; } PATH = args[0]; try { minSize = Integer.parseInt(args[1]); } catch(Exception e) { minSize = 20; } try { maxSize = Integer.parseInt(args[2]); } catch(Exception e) { maxSize = 20; } System.out.println("@ target directory>> "+PATH); System.out.println("@ new minimum size>> "+minSize); System.out.println("@ new maximum size>> "+maxSize); Thread t = new Thread(new WLSPoolModifier()); t.start(); } /** * Target directory³» jarÆÄÀÏÀ» °Ë»öÇϱâ À§ÇØ searchJarFile() methodÀ» È£ÃâÇÑ´Ù.
* */ public void run() { File dir = new File(PATH); if(!dir.exists()) { System.out.println("The path does not exists. - "+PATH); return; } try { searchJarFile(dir); } catch(Exception e) { e.printStackTrace(); } } /** * dir ³» ¸ðµç jar ÆÄÀÏÀ» ã¾Æ jar ÆÄÀÏ¿¡ ´ëÇØ findEntry() ¸Þ¼­µå¸¦ ½ÇÇàÇÏ°í, * weblogic-jar-ejb.xml ÆÄÀÏÀÌ Á¸ÀçÇÒ °æ¿ì convert(), makeJar() ¸Þ¼­µå¸¦ ½ÇÇàÇÑ´Ù. * */ private void searchJarFile(File dir) throws Exception { File[] lists = dir.listFiles(); for(int i=0;i> "+lists[i]); Document root = findEntry(lists[i]); if(root!=null) { byte[] dd = convert(root); makeJar(lists[i], dd); } } } } } /** * ÆĶó¹ÌÅÍÀÇ Document object¸¦ XSLT¸¦ ÀÌ¿ëÇØ byte[] ·Î convertÇÑ´Ù. * * @param root weblogic-jar-ejb.xml¿¡ ´ëÇÑ Document object * @return Document¿¡ ´ëÇÑ byte[] */ private byte[] convert(Document root) { try { TransformerFactory factory = TransformerFactory.newInstance(); Transformer tf = factory.newTransformer(); DocumentType doctype = root.getDoctype(); String publicId=null; String systemId=null; if(doctype != null) { publicId = doctype.getPublicId(); systemId = doctype.getSystemId(); } else { if(load) { systemId = SYSTEM_ID; publicId = PUBLIC_ID; } else { systemId = "http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd"; publicId = "-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN"; } } System.out.println("\t- publicId>> "+publicId); System.out.println("\t- systemId>> "+systemId); tf.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, systemId); tf.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, publicId); DOMSource source = new DOMSource(root); ByteArrayOutputStream bos = new ByteArrayOutputStream(); StreamResult result = new StreamResult(bos); tf.transform(source,result); return bos.toByteArray(); } catch(Exception e) { e.printStackTrace(); return null; } } /** * ÇØ´ç jar ÆÄÀÏ¿¡ weblogic deployment descriptor¸¦ ġȯÇÏ´Â ¸Þ¼­µå
* orginal jar ÆÄÀÏÀº backupÀ» ³²±ä´Ù.[~.jar.org]
* * @param oldJar ejb jar file * @param dd weblogic-ejb-jar.xml¿¡ ´ëÇÑ byte array */ private void makeJar(File oldJar, byte[] dd) throws Exception { JarFile jarFile = null; File newJar = new File(oldJar.getParentFile(), "_"+oldJar.getName()); FileOutputStream fo = null; JarOutputStream jos = null; System.out.println("\t- make the "+newJar); try { jarFile = new JarFile(oldJar); fo = new FileOutputStream(newJar); jos = new JarOutputStream(fo); Enumeration en = jarFile.entries(); while(en.hasMoreElements()) { JarEntry entry = (JarEntry)en.nextElement(); InputStream in = jarFile.getInputStream(entry); byte[] buff = readData((int)entry.getSize(), in); in.close(); JarEntry newEntry = new JarEntry(entry.getName()); entry.setMethod(entry.DEFLATED); entry.setSize(buff.length); entry.setTime(systime); CRC32 crc322 = new CRC32(); if(entry.getName().equals(DD_ENTRY)) { crc322.update(dd); } else { crc322.update(buff); } entry.setCrc(crc322.getValue()); jos.putNextEntry(newEntry); if(entry.getName().equals(DD_ENTRY)) { jos.write(dd,0,dd.length); } else { jos.write(buff,0,buff.length); } jos.flush(); jos.closeEntry(); } } catch(Exception e) { e.printStackTrace(); throw e; } finally { try { if(jos!=null) jos.finish(); } catch(Exception e) {} try { if(jos!=null) jos.close(); } catch(Exception e) {} try { if(fo!=null) fo.close(); } catch(Exception e) {} try { if(jarFile!=null) jarFile.close(); } catch(Exception e) {} } if(jos!=null) { System.out.println("\t- rename the "+newJar+" to "+oldJar); File backup = new File(oldJar.getParentFile(), oldJar.getName()+".org"); if(!backup.exists()) { boolean result = oldJar.renameTo(backup); if(!result) { System.out.println("cannot rename to "+backup); } } else { if(!oldJar.delete()) System.out.println("cannot delete "+oldJar); } if(!newJar.renameTo(oldJar)) System.out.println("cannot rename to "+oldJar); } } /** * ejb jar ÆÄÀÏ¿¡¼­ weblogic deployment descriptor¸¦ ã¾Æ DOM Document object·Î * ¹ÝȯÇÏ´Â ¸Þ¼­µå
* * @param file ejb jar file * @return weblogic-ejb-jar.xml¿¡ ´ëÇÑ Document object */ private Document findEntry(File file) { JarFile jarFile = null; try { jarFile = new JarFile(file); Enumeration en = jarFile.entries(); while(en.hasMoreElements()) { JarEntry entry = (JarEntry)en.nextElement(); if(entry.getName().equals(DD_ENTRY)) { System.out.println("\t- find the entry - "+entry.getName()); InputStream in = jarFile.getInputStream(entry); Document root = loadDocument(in); in.close(); return root; } } } catch(Exception e) { System.out.println(">> "+e.toString()); e.printStackTrace(); } finally { try { if(jarFile!=null) jarFile.close(); } catch(Exception e) {} } return null; } /** * parameterÀÇ InputStreamÀ¸·Î ºÎÅÍ µé¾î¿À´Â xml data¸¦ DOM Document object¸¦ »ý¼ºÇÑ´Ù.
* * @param in weblogic-ejb-jar.xml¿¡ ÇØ´çÇÏ´Â stream * @return weblogic-ejb-jar.xml¿¡ ´ëÇÑ DOM Document object */ private Document loadDocument(InputStream in) throws Exception { System.out.println("\t- load the Document "); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setValidating(true); DocumentBuilder builder = factory.newDocumentBuilder(); builder.setErrorHandler(new DefaultHandler()); Document doc = builder.parse(in); doc.normalize(); Element root = doc.getDocumentElement(); Node node1 = findNode(root, WEBLOGIC_ENTERPRISE_BEAN); if(node1 == null) { System.out.println("cannot find the node. - "+WEBLOGIC_ENTERPRISE_BEAN); node1 = doc.createElement(WEBLOGIC_ENTERPRISE_BEAN); root.appendChild(node1); } Node node2 = findNode(node1, STATELESS_SESSION_DESCRIPTOR); if(node2 == null) { System.out.println("cannot find the node. - "+STATELESS_SESSION_DESCRIPTOR); node2 = doc.createElement(STATELESS_SESSION_DESCRIPTOR); node1.appendChild(node2); } Node node3 = findNode(node2, POOL); if(node3 == null) { System.out.println("cannot find the node. - "+POOL); node3 = doc.createElement(POOL); node2.appendChild(node3); } Node node4 = findNode(node3, MAX_BEANS_IN_FREE_POOL); if(node4 == null) { System.out.println("cannot find the node. - "+MAX_BEANS_IN_FREE_POOL); node4 = doc.createElement(MAX_BEANS_IN_FREE_POOL); Text txt = doc.createTextNode(""); node4.appendChild(txt); node3.appendChild(node4); } Node node5 = findNode(node3, INITIAL_BEANS_IN_FREE_POOL); if(node5 == null) { System.out.println("cannot find the node. - "+INITIAL_BEANS_IN_FREE_POOL); node5 = doc.createElement(INITIAL_BEANS_IN_FREE_POOL); Text txt = doc.createTextNode(""); node5.appendChild(txt); node3.appendChild(node5); } setNodeValue(node5, minSize); setNodeValue(node4, maxSize); System.out.println("\t- change min and max size ["+minSize+", "+maxSize+"]"); return doc; } /** * node¿¡ ´ëÇÑ child tag¸¦ ã¾Æ ¹ÝȯÇÏ´Â ¸Þ¼­µå
* * @param node °Ë»ö ±âÁØ node * @param childNodeName °Ë»öÇÒ child node name * @return child node */ private Node findNode(Node node, String childNodeName) { NodeList lst = node.getChildNodes(); for(int i=0;i * * @param node Node * @param value º¯È¯ÇÒ °ª */ private void setNodeValue(Node node, int value) { NodeList lst = node.getChildNodes(); Node tmp=null; for(int i=0;i> "+tmp.getNodeValue()); tmp.setNodeValue(value+""); } } /** * InputStreamÀ¸·Î ºÎÅÍ ÇØ´ç size ¸¸Å­ÀÇ byte¸¦ ÀÐ¾î ¹ÝȯÇÏ´Â ¸Þ¼­µå
* * @param size ÀÐÀ» µ¥ÀÌÅÍ size * @param in InputStream * @return ÀÐÀº °á°ú byte array data */ private byte[] readData(int size, InputStream in) { byte[] buff = new byte[size]; try { int totalSize=0; do { int len = in.read(buff,totalSize,size-totalSize); if(len==-1) { break; } totalSize+=len; } while(totalSize<size); return buff; } catch(Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); } } }
À§ÀÇ ÆÄÀϳ»¿ë¿¡ ´ëÇÑ Á¦¾à»çÇ×À» ¾Ë·Áµå¸³´Ï´Ù. OS : Platform independent App Server : WebLogic 6.1 or later JDK : Sun JDK1.4 or Other °£´ÜÇÏ°Ô ¾ÆƼŬÀ» ÀÛ¼ºÇß½À´Ï´Ù. XML¿¡ °ü·ÃÇؼ­³ª ¾ÐÃ࿣Ʈ¸®¿¡ °ü·ÃÇؼ­ »ç¿ëµÈ Äڵ嵵 À¯½ÉÈ÷ »ìÆ캸½Ã´Â °ÍÀÌ ÁÁÀ» °Í °°½À´Ï´Ù.
 
1
References
 
Copyright ¨Ï 2003 www.javapattern.info & www.jlook.com, an jLOOK co.,LTD