.
.
Core Java
Technologies Technical Tips
.
 
2005³â 5¿ù 10ÀÏ  


Core Java Technologies Tech Tips¿¡ ¿À½Å ¿©·¯ºÐÀ» ȯ¿µÇÕ´Ï´Ù. Java 2 Platform, Standard Edition (J2SE)¿¡ ±â¹ÝÇÑ core Java technologies ¿Í APIsÀÇ »ç¿ë¿¡ °üÇÑ ÃֽŠÁ¤º¸¸¦ ¾ò¾î °¡½Ã±â ¹Ù¶ø´Ï´Ù. ÀÌ ±Û¿¡¼­´Â Java 2 Platform Standard Edition Development Kit 5.0(JDK 5.0)À» »ç¿ëÇÕ´Ï´Ù.
Download JDK 5.0

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

-Á¦³×¸¯(GENERIC)
-JMX, JCONSOLE°ú »ç¿ë¹ý

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

ÀúÀÚ John Zukowski

.

Á¦³×¸¯(GENERIC)

J2SE 5.0 ¹öÀüÀº Java Ç÷§Æû¿¡ ´ëÇØ Áß¿ä ¾ð¾î ¼öÁØÀÇ º¯°æÀ» ´Ù¼Ò Æ÷ÇÔÇϰí ÀÖ´Ù. ¶ÇÇÑ J2SE 5.0Àº ·çÇÁ¿Í ¸Å°³º¯¼öÀÇ °­È­¿Í °°Àº »õ·Î¿î ÀÛ¾÷À» Ãß°¡ÇÏ¿© JSR-14: Add Generic Types To The Java Programming Language¿Í ÀÏÄ¡ÇÏ´Â Á¦³×¸¯(generic)À» ÅëÇØ Java Collections ÇÁ·¹ÀÓ¿öÅ©¿ÍÀÇ ÄÄÆÄÀÏ Å¸ÀÓ Å¸ÀÔ ¾ÈÁ¤¼ºÀ» Á¦°øÇÑ´Ù.

Á¦³×¸¯ÀÇ ±âº»ÀûÀÎ »ç¿ë¹ý Áß Çϳª´Â Ä÷º¼Ç(collection)°ú ÇÔ²² »ç¿ëÇÒ ¶§ µ¥ÀÌÅ͸¦ Ãß»óÈ­ÇÏ´Â °ÍÀÌ´Ù. JDK 5.0 ÀÌÀü ¹öÀü¿¡¼­´Â Collection »ý¼º½Ã, Ä÷º¼Ç ³»ºÎ¿¡ ÀÓÀÇÀÇ °ªÀ» ÁÙ ¼ö ÀÖ¾ú´Ù. ¿¹¸¦ µé¸é, ´ÙÀ½°ú °°´Ù.

   List myList = new ArrayList(10);
   myList.add(new Integer(10));
   myList.add("Hello, World");

»ç¿ëÀÚÀÇ CollectionÀ» ƯÁ¤ ŸÀÔÀ¸·Î Á¦ÇÑÇÏ´Â °ÍÀº ¾î·Á¿î ÀÏÀ̸ç, Ä÷º¼ÇÀ¸·ÎºÎÅÍ ÇϳªÀÇ ¾ÆÀÌÅÛÀ» »Ì¾Æ³»±â À§Çؼ­´Â ij½ºÆÃ ¿¬»êÀÌ ÇÊ¿äÇÏ´Ù.

   Integer myInt = (Integer)myList.iterator().next();

¸¸¾à À߸øµÈ ŸÀÔÀ¸·Î ij½ºÆÃÀ» ÇÑ °æ¿ì¿¡´Â ÄÄÆÄÀϸ¸ ¼º°øÇϰí, ·±Å¸Àӽà ¿¹¿Ü°¡ ¹ß»ýÇÏ°Ô µÈ´Ù. Ưº°È÷ Collection ³»ÀÇ ¸ðµç ¾ÆÀÌÅÛÀ» Object·Î ó¸®ÇÏÁö ¾Ê´Â´Ù¸é, ij½ºÆÃÀº º¸Åë ¹¬½ÃÀûÀ¸·Î ¹ß»ýÇϰųª ij½ºÆÃµÈ ¿¬»êÀ» È£ÃâÇϱâ Àü¿¡ instanceof¸¦ ¼öÇàÇÏ¿© ¹ß»ýÇÑ´Ù.

  Iterator listItor = myList.iterator();
  Object myObject = listItor.next();
  Integer myInt = null;
  if (myObject instanceof Integer) {
    myInt = (Integer)myObject;
  }

ÀÌ·¯ÇÑ »óȲÀº Á¦³×¸¯ÀÇ ¹ÌÇÐÀû °¡Ä¡¸¦ ¶³¾î¶ß¸°´Ù. Á¦³×¸¯À» ÀÌ¿ëÇϸé ÇϳªÀÇ Collection¿¡¼­ ÀúÀåÇϰíÀÚ ÇÏ´Â ¿ÀºêÁ§Æ®ÀÇ Å¸ÀÔÀ» ÄÄÆÄÀϽà ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ÀÌ·¸°Ô µÇ¸é ¸®½ºÆ®¿¡¼­ ¾ÆÀÌÅÛÀ» Ãß°¡Çϰųª °Ë»öÇÒ ¶§, ±× ¸®½ºÆ®°¡ ƯÁ¤ ŸÀÔÀÇ ¿ÀºêÁ§Æ®°¡ Ȱ¼ºÈ­ µÉ °ÍÀÎÁö¸¦ ÀÌ¹Ì ¾Ë ¼ö ÀÖ´Ù. µû¶ó¼­ ij½ºÆÃÀ» ÇÒ Çʿ䰡 ¾ø´Â °ÍÀÌ´Ù. "<>" ¹®ÀÚ´Â ¾î¶² ŸÀÔÀÌ ÀúÀåµÉ °ÍÀÎÁö¸¦ ÁöÁ¤Çϴµ¥ »ç¿ëÇÕ´Ï´Ù. ¸¸¾à À߸øµÈ ŸÀÔÀÇ µ¥ÀÌÅͰ¡ ÁÖ¾îÁø´Ù¸é, ÄÄÆÄÀϽà ¿¹¿Ü°¡ ¹ß»ýÇÑ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ Ŭ·¡½º¸¦ ÄÄÆÄÀÏÇÏ·Á Çϸé,

  import java.util.*;

  public class First {
    public static void main(String args[]) {
      List<Integer> myList = new ArrayList<Integer>(10);
      myList.add(10);
      myList.add("Hello, World");
    }
  }

´ÙÀ½ÀÇ ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.

   First.java:7: cannot find symbol
   symbol  : method add(java.lang.String)
   location: interface java.util.List<java.lang.Integer>
         myList.add("Hello, World");
                 ^
   1 error

Áï, ÀÌ ¸Þ½ÃÁö´Â ±âº»ÀûÀ¸·Î ÇØ´ç ÀÎÅÍÆäÀ̽º°¡ Integer ¿ÀºêÁ§Æ®ÀÇ List¿¡ ´ëÇÑ °ÍÀÏ ¶§ add(String) ¸Þ¼Òµå´Â »ç¿ëÇÒ ¼ö ¾ø´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. myList.add(10); ¸Þ¼Òµå´Â ¸®½ºÆ®¿¡ Integer ¿ÀºêÁ§Æ® 10À» add ÇÏ´Â ÀÛ¾÷À» ¼öÇàÇÏ¿´°í, AutoboxingÀº int ŸÀÔÀ» Integer·Î º¯È¯ÇÏ¿´´Ù. ¿©±â¼­ ½ÇÆÐÇÑ °ÍÀº StringÀ» IntegerÀÇ List¿¡ Ãß°¡ÇÏ´Â °Í »ÓÀÌ´Ù.

ÇϳªÀÇ Ä÷º¼ÇÀÇ ¿¤¸®¸ÕÆ®·Î ÀÛ¾÷À» Çϸ鼭 ±× Ä÷º¼Ç ³»ÀÇ ¿¤¸®¸ÕÆ®ÀÇ Å¸ÀÔÀ» ¸í½ÃÀûÀ¸·Î ¼±¾ðÇÏÁö ¾ÊÀº °æ¿ì¿¡µµ °æ°í¸¦ ¹Þ´Â´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ ÇÁ·Î±×·¥Àº List¸¦ »ý¼ºÇÏÁö¸¸, ±× List ³»¿¡ ¾î¶² ŸÀÔÀÌ ÀúÀåµÉ Áö¿¡ ´ëÇØ¼­´Â ÁöÁ¤ÇÏÁö ¾Ê´Â´Ù.

   import java.util.*;

   public class Second {
     public static void main(String args[]) {
       List list = new ArrayList();
       list.add(10);
     }
   }

ÀÌ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏ Çϸé, ´ÙÀ½°ú °°Àº °æ°í¸¦ ¹Þ°Ô µÈ´Ù.

   Note: Second.java uses unchecked or unsafe operations.
   Note: Recompile with -Xlint:unchecked for details.

±× ÈÄ Áö½Ã¿¡ µû¶ó -Xlint:unchecked¸¦ javac ¸í·É¹®¿¡ Ãß°¡Çϸé

  javac -Xlint:unchecked Second.java

´ÙÀ½°ú °°Àº Ãß°¡ Á¤º¸°¡ Ç¥½ÃµÈ´Ù.

  Second.java:6: warning: [unchecked] unchecked call to add(E) 
         as a member of the raw type java.util.List
    list.add(10);
             ^

ÀÌ ¸Þ½ÃÁö´Â "add(E)" ¡± È£Ãâ¿¡¼­ "E" ¶ó´Â List¿¡ Ãß°¡µÈ ¿¤¸®¸ÕÆ®ÀÇ Å¸ÀÔÀÌ ÁöÁ¤µÇÁö ¾Ê¾Ò´Ù´Â ¶æÀÌ´Ù. ±×·¯³ª ÀÌ ¸Þ½ÃÁö´Â °æ°íÀÏ »Ó, a.class ÆÄÀÏÀº »ý¼ºµÈ´Ù.

°æ°í¸¦ Á¦°ÅÇÏ°í ½ÍÀ¸¸é ´ÙÀ½°ú °°ÀÌ <Object>¸¦ List ¼±¾ð½Ã Ãß°¡ÇÏ¸é µÈ´Ù.

    List<Object> list = new ArrayList<Object>();

¿©±â¼­, Object´Â EÀ̰í, ±âº»ÀûÀ¸·Î ±× List¿¡´Â ¾î¶² ŸÀÔµµ ÀúÀå °¡´ÉÇÏ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.

±×·±µ¥ E´Â ¾îµð¼­ ¿Â °ÍÀϱî? java.util.List¿¡¼­ ÀÎÅÍÆäÀ̽º ¼±¾ðºÎ¸¦ º¸¸é, ´ÙÀ½ÀÇ ³»¿ëÀ» º¼ ¼ö ÀÖ´Ù.

   public interface List<E> extends Collection<E>

À̰ÍÀº ¹®¹ýÀûÀ¸·Î EÀÇ List¸¦ Çϳª ¼±¾ðÇÑ °ÍÀÌ´Ù.

³ªÁß¿¡ ÀÎÅÍÆäÀ̽º ¼±¾ð½Ã, ¸Å°³º¯¼ö³ª ¸®ÅÏ Å¸ÀÔÀÌ E·Î ±³Ã¼µÈ ¸Þ¼Òµå¸¦ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

   Iterator<E" iterator();
   ListIterator<E" listIterator();
   boolean add(E o);
   boolean addAll(Collection<? extends E" c);

E´Â ÄÄÆÄÀϽà ÁöÁ¤µÇ±â ¶§¹®¿¡ ŸÀÔ ºÒÀÏÄ¡¸¦ ã±â À§ÇØ ·±Å¸ÀÓ ¿¹¿Ü¿¡ ÀÇÁ¸ÇÒ Çʿ䰡 ¾ø´Ù. addAll ¶óÀÎÀÇ ?´Â ¾Ë·ÁÁöÁö ¾ÊÀº(unknown) Ä÷º¼ÇÀ¸·Î »ý°¢µÉ ¼ö ÀÖÁö¸¸, unknownÀº EÀÏ ¼öµµ ÀÖ°í, ¼­ºêŬ·¡½ºÀÏ ¼öµµ ÀÖ´Ù. ÀÌ·¯ÇÑ ±¸¼ºÀ¸·Î ÀÎÇØ Á¤È®ÇÑ Å¸ÀÔ ¸ÅΏ¸À» »ç¿ëÇÏÁö ¾Ê°íµµ, ¼­ºêŬ·¡½ºµéÀÇ Ä÷º¼ÇÀ¸·Î ÀÛ¾÷ÇÒ ¼ö ÀÖ´Ù.

ù ¹øÂ° ¿¹Á¦¸¦ ÅëÇØ¼­ ¿Ïº®ÇÏ°Ô ¾Ë ¼ö´Â ¾ø°ÚÁö¸¸, Á¦³×¸¯Àº ÀϹÝÀûÀ¸·Î ÀÌÅÍ·¹ÀÌÅÍ(iterator)¸¦ ÀÌ¿ëÇØ ·çÇÁ °­È­(enhanced for loop )¿Í ÇÔ²² »ç¿ëµÈ´Ù. Á¦³×¸¯ÀÌ ¾øÀ» °æ¿ì, String ¿ÀºêÁ§Æ®ÀÇ ÇϳªÀÇ List¸¦ ·çÇÎÇÏ·Á¸é °¢°¢ÀÇ ¿¤¸®¸ÕÆ®¸¦ List·ÎºÎÅÍ ÀûÀýÇÑ Å¸ÀÔÀ¸·Î º¯È¯ÇØ¾ß ÇÑ´Ù. ±×·¯³ª Á¦³×¸¯°ú ·çÇÁ °­È­¸¦ ÀÌ¿ëÇÏ¸é ¸ðµç °ÍÀÌ °£´ÜÇØÁø´Ù

´ÙÀ½Àº Á¦³Ê¸¯°ú ·çÇÁ °­È­ ¾øÀÌ String ¿ÀºêÁ§Æ®µéÀÇ List¸¦ ·çÇÎÇÏ´Â ±âÁ¸ ¹æ¹ýÀÌ´Ù.

   import java.util.*;

   public class Old {
     public static void main(String args[]) {
       List list = Arrays.asList(args);
       Iterator itor = list.iterator();
       while (itor.hasNext()) {
         String element = (String)itor.next();
         System.out.println(element + " / " + element.length());
       }
     }
   }   

À§ÀÇ Old Ŭ·¡½º¸¦ ÄÄÆÄÀÏ/½ÇÇàÇÏ°í ´ÙÀ½°ú °°ÀÌ ÇϳªÀÇ ¹®ÀÚ¿­À» ¸Å°³·Î ½ÇÇàÇϸé,

   java Old Hello
   
´ÙÀ½ °á°ú¸¦ ¾ò°Ô µÈ´Ù.

   Hello / 5

JDK 5.0À» ÀÌ¿ëÇϸé ÃÖ½ÅÀÇ ·çÇÁ ±¸Á¶ °­È­¿Í Á¦³×¸¯À» °áÇÕÇÏ¿© ÄÄÆÄÀϽà ŸÀÔ ¾ÈÁ¤¼ºÀÌ º¸ÀåµÇ´Â ÇÁ·Î±×·¥À» »ý¼ºÇÒ ¼ö ÀÖÀ¸¸ç, °¡µ¶¼º°ú °ü¸® ¿ëÀ̼ºÀÌ ´õ Çâ»óµÈ´Ù. ´ÙÀ½Àº Á¦³×¸¯°ú ·çÇÁ °­È­¸¦ »ç¿ëÇÒ °æ¿ì String¿ÀºêÁ§Æ®µéÀÇ List Àüü ·çÇÎÀÌ ¾î¶»°Ô µÇ´ÂÁö º¸¿©ÁÖ´Â ¿¹Á¦ÀÌ´Ù.

   import java.util.*;

   public class New {
     public static void main(String args[]) {
       List<String> list = Arrays.asList(args);
       for (String element : list) {
         System.out.println(element + " / " + element.length());
       }
     }
   }
   
   java New Hello
   Hello / 5

ÀÌ¿Í °°ÀÌ, Á¦³×¸¯°ú ·çÇÁ °­È­´Â ¼­·Î Àß µ¿ÀÛÇÑ´Ù.

Á¦³×¸¯¿¡ ´ëÇÑ Á» ´õ »ó¼¼ÇÑ Á¤º¸´Â ´ÙÀ½À» ÂüÁ¶ Çϱ⠹ٶõ´Ù.

.
.

JMX, JCONSOLE°ú »ç¿ë¹ý

JSR-160Àº JMX(Java Management Extensions) 1.2 ¹öÀü API¸¦ È®ÀåÇÏ´Â API¸¦ Á¤ÀÇÇÏ¿© JMX MBean ¼­¹ö¿¡ ¿ø°Ý ¾×¼¼½º¸¦ Á¦°øÇÑ´Ù. 2003³â 1¿ù 22ÀÏÀÚ Å×Å©ÆÁ Getting Started with the Java Management Extensions(¿µ¹®)¸¦ ´Ù½Ã »ìÆìº¸¸é, JMX API¸¦ ÀÌ¿ëÇØ ¸ð´ÏÅ͸µ ¹× °ü¸®¸¦ ÇÒ ¼ö ÀÖ´Â ÄÄÆ÷³ÍÆ®¸¦ ¾î·Æ»ç¸® Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ¸ð´ÏÅ͸µ ¹× °ü¸® ±â´ÉÀº ÀÌÁ¦ J2SE 5.0ÀÇ Ç¥ÁØÀÌ µÇ¾úÀ¸¸ç, JSR-60¿¡ ÀÇÇØ ¿ø°Ý Çڵ鸵ÀÌ Çâ»óµÇ¾ú´Ù. JMX ÀÔ¹®¿¡ °üÇÑ Ãß°¡ Á¤º¸´Â J2EEÀÇ Å×Å©ÆÁ JMX ÀÌÇØÇϱ⸦ ÂüÁ¶Çϱ⠹ٶõ´Ù.

À̹ø Å×Å©ÆÁ¿¡¼­´Â ÀÌ Àü Getting Started with JMX Å×Å©ÆÁÀÇ ¿¹Á¦ Äڵ带 ÀÌ¿ëÇÏ¿© J2SE 5.0¿ëÀ¸·Î ¾÷µ¥ÀÌÆ®ÇØ º¸ÀÚ. ¶ÇÇÑ ½ÇÇàÁßÀÎ ÇÁ·Î±×·¥¿¡ ´ëÇØ Åë°è¸¦ µð½ºÇ÷¹ÀÌ Çϱâ À§ÇÑ ÃֽŠjconsole ÅøÀÇ »ç¿ë¹ý¿¡ ´ëÇØ¼­µµ °øºÎÇØ º¸µµ·Ï ÇϰڴÙ.

"Getting Started with JMX" Å×Å©ÆÁ¿¡¼­´Â, JAR ÆÄÀÏ¿¡ ´ëÇÑ Å¬·¡½º °æ·Î¸¦ ¸í½ÃÀûÀ¸·Î Ãß°¡Çؾ߸¸ ¿¹Á¦ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏ ¹× ½ÇÇàÇÒ ¼ö ÀÖ¾ú´Ù. ±×·¯³ª J2SE 5.0¿¡¼­´Â ´õ ÀÌ»ó JAR ÆÄÀÏÀ» Ŭ·¡½º °æ·Î¿¡ ¸í½ÃÀûÀ¸·Î Ãß°¡ÇÒ Çʿ䰡 ¾ø´Ù. J2SE 5.0¿¡¼­´Â JMX°¡ Ç¥ÁØÀÌ µÇ¾ú±â ¶§¹®ÀÌ´Ù. ¿øº» ¼Ò½º¸¦ ¾à°£ º¯°æÇÏ´Â °ÍÀ¸·Î ÇÁ·Î±×·¥Àº Ç¥ÁØ ÀÚ¹Ù °³¹ß Ç÷§Æû¿¡¼­ ÄÄÆÄÀÏ/½ÇÇàµÉ °ÍÀÌ´Ù.

ÀÌÀü Å×Å©ÆÁ¿¡¼­ MBean Ŭ·¡½º(HelloMBean)¿¡´Â ÆÐŰÁö°¡ ¾ø¾ú´Ù. ±×·¯³ª »ç¿ëÀÚ°¡ ¸¸µç ÄÄÆ÷³ÍÆ®¸¦ ÆÐŰÁö¿¡ Æ÷ÇÔ½ÃŰ´Â °ÍÀº ¾ðÁ¦³ª °¡Àå ÁÁÀº ¹æ¹ýÀ̸ç, À̸¦ À§Çؼ­´Â »ç¿ëÀÚÀÇ ¼Ò½º¿¡ µð·ºÅ丮¸¦ ¸¸µé¾î¼­ ±× µð·ºÅ丮 ±¸Á¶¿¡ ´ëÇØ ÆÐŰÁö¿¡ ¼­¼úÀ» Ãß°¡ÇØ ÁÖ¸é µÈ´Ù.

   package bean;

   public interface HelloMBean {
     public String getMessage();
     public void setMessage(String message);
     public int getChangeCount();
     public void resetCounter();
   }

ÀÌ¿Í ºñ½ÁÇϰÔ, MBean ±¸Çö(Hello)¿¡¼­ º¯°æµÈ ºÎºÐÀº ÆÐŰÁö ¼­¼úÀ» Ãß°¡ÇÏ´Â °Í »ÓÀÌ´Ù.

   package bean;

   public class Hello implements HelloMBean {
     private String message;
     private int changeCount;
  
     public String getMessage() {
       return message;
     }
  
     public void setMessage(String message){
       this.message = message;
       changeCount++;
     }
  
     public int getChangeCount() {
       return changeCount;
     }
  
     public void resetCounter() {
       changeCount = 0;
     }
   }

´õ Áß¿äÇÑ ¼öÁ¤ »çÇ×Àº ÄÄÆ÷³ÍÆ®¸¦ »ý¼ºÇϰí MBean ¼­¹ö¿¡ µî·ÏÇÏ´Â ¿¡ÀÌÀüÆ®(HelloAgent)ÀÌ´Ù. ¿©±â¿¡µµ ÆÐŰÁö ±â¼úÀ» ÇØ ÁÖ¾î¾ß Çϸç, MBeanServer¸¦ ±¸ÇÏ´Â ¹æ¹ýÀ» ¾à°£ ¹Ù²Ù¾î ÁÖ¾î¾ß ÇÑ´Ù. J2SE 5.0¿¡´Â Ç÷§Æû MBean »Ó ¾Æ´Ï¶ó ¾ÖÇø®ÄÉÀÌ¼Ç MBean ±îÁöµµ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¼³°èµÈ MBeanServerÀÌ µµÀԵǾúÀ¸¸ç, ¿¬¼â »ý¼ºÀÇ ÇÑ ±âÁ¡ÀÇ ¿ªÇÒÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀº ÀÚ½ÅÀÇ ¼­¹öº¸´Ù´Â Ç÷§Æû MBeanServer¸¦ »ç¿ëÇϱ⵵·Ï ±ÇÀåµÈ´Ù. MBeanServer¸¦ ¾ò±â À§ÇÑ ÀÌÀüÀÇ ¹æ¹ýÀº javax.management ÆÐŰÁö¸¦ ÀÓÆ÷Æ®Çϰí MBeanServerFactoryÀÇ createMBeanServer ¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© ¼­¹ö¸¦ »ý¼ºÇؾßÇß´Ù.

     MBeanServer server = 
       MBeanServerFactory.createMBeanServer();

»õ·Î¿î ¹æ¹ýÀº ±âº»ÀûÀ¸·Î´Â ÀÌÀü°ú µ¿ÀÏÇÏÁö¸¸, °ü¸® ÀÚ¿øÀ» ´ÙÁß ¿¡ÀÌÀüÆ® ´ë½Å ´ÜÀÏ ¿¡ÀÌÀüÆ®(Ç÷§Æû MBeanServer)¿¡ µî·ÏÇÒ ¼ö ÀÖ´Ù. Ç÷§Æû MBeanServer¸¦ ¾ò±â À§Çؼ­´Â ManagementFactory.getPlatformMBeanServer¸¦ È£ÃâÇØ¾ß Çϸç, ManagementFactory Ŭ·¡½º´Â java.lang.management ÆÐŰÁö¿¡ ÀÖ´Ù.

     MBeanServer server = 
       ManagementFactory.getPlatformMBeanServer();

´ÙÀ½Àº HelloAgentÀÇ ¾÷µ¥ÀÌÆ® ¹öÀüÀÌ´Ù.

   package bean;

   import java.lang.management.*;
   import javax.management.*;

   public class HelloAgent {
     public static void main(String args[]) {
       MBeanServer server = 
         ManagementFactory.getPlatformMBeanServer();
       HelloMBean hello1 = new Hello();
       HelloMBean hello2 = new Hello();
       try {
         ObjectName helloObjectName1 = new ObjectName(
           "bean:type=Hello,name=hello1");
         server.registerMBean(hello1, helloObjectName1);
         ObjectName helloObjectName2 = new ObjectName(
           "bean:type=Hello,name=hello2");
         server.registerMBean(hello2, helloObjectName2);
         System.out.println("Waiting...");
         Thread.sleep(Long.MAX_VALUE);
       } catch (InterruptedException e) {
         System.out.println("Sleep stopped");
         e.printStackTrace();
       } catch (MalformedObjectNameException e) {
         System.out.println("Bad object name");
         e.printStackTrace();
       } catch (InstanceAlreadyExistsException e) {
         System.out.println("Already exists");
         e.printStackTrace();
       } catch (MBeanRegistrationException e) {
         System.out.println("Registration problems");
         e.printStackTrace();
       } catch (NotCompliantMBeanException e) {
         System.out.println("Registration problems");
         e.printStackTrace();
       }
     }
   }

ÀÌÁ¦, jconsole ÅøÀ» »ìÆìº¸ÀÚ. JDK 5.0¿¡´Â ½ÇÇàÁßÀÎ ÀÚ¹Ù¿¡ ÷ºÎµÈ jconsoleÀ̶ó°í ÇÏ´Â ÃֽŠSwing ±â¹ÝÀÇ ÅøÀÌ Æ÷ÇԵǾî ÀÖÀ¸¸ç, MBean ¼Ó¼º ¹× µ¿ÀÛ »Ó ¾Æ´Ï¶ó ÇÁ·Î±×·¥ÀÇ ¼º´É, ¸Þ¸ð¸® »ç¿ë·®, ½º·¹µå ½ºÅà ÃßÀû¿¡ ´ëÇÑ Åë°è¸¦ º¸¿©ÁØ´Ù. ¶Ç Çϳª ÁÖ¸ñÇÒ °ÍÀº jconsoleÀ» ÀÌ¿ëÇϸé HtmlAdaptorServer¸¦ »ý¼ºÇÒ Çʿ䰡 ¾ø´Ù´Â °ÍÀÌ´Ù.

jconsole°ú ¾÷µ¥ÀÌÆ®µÈ ¿¹Á¦ ÇÁ·Î±×·¥À» °°ÀÌ »ç¿ëÇϱâ À§Çؼ­´Â 3°¡Áö Ŭ·¡½º(HelloMBean, Hello, HelloAgent)¸¦ ÄÄÆÄÀÏÇϰí ÀûÀýÇÑ ¸í·É¹®À» ÀÌ¿ëÇÏ¿© À̸¦ ½ÇÇàÇØ¾ß ÇÑ´Ù. ÀÌ 3°³ÀÇ Å¬·¡½º¸¦ ÄÄÆÄÀÏÇÒ ¶§, ÀÌ Å¬·¡½ºµéÀº ´ÜÀÏ ÆÐŰÁö ¾È¿¡ ÀÖ´Ù´Â Á¡À» ±â¾ïÇϱ⠹ٶõ´Ù.

ÀÌ Å¬·¡½ºµéÀ» ÄÄÆÄÀÏ ÇÒ ¶§ Windows ȯ°æ¿¡¼­´Â ¾Æ·¡ÀÇ ¸í·É¹®À» »ç¿ëÇÏ¸é µÈ´Ù. ÀÌ ¸í·É¹®À» »ý¼ºµÈ Ŭ·¡½º À§Ä¡ÀÇ »óÀ§ µð·ºÅ丮¿¡¼­ ½ÇÇàÇϰí, "bean" ´ë½Å ÆÄÀÏÀ» »ý¼ºÇÑ À§Ä¡ÀÇ ½ÇÁ¦ À̸§À¸·Î ±³Ã¼ÇÏÀÚ.

   javac bean\*.java

ÀÌ ¸í·É¹®Àº ¼Ò½º ÆÄÀÏÀÌ ÀÖ´Â µð·ºÅ丮¿¡ .class ÆÄÀÏÀ» »ý¼ºÇÕ´Ï´Ù. ´Ù¸¥ µð·ºÅ͸®¿¡ »ý¼ºÇϰíÀÚ ÇÑ´Ù¸é, -d ¿É¼ÇÀ» »ç¿ëÇϱ⠹ٶõ´Ù.(´Ü, »õ·Î¿î À§Ä¡°¡ Ŭ·¡½º °æ·Î·Î ÀâÇô ÀÖ´ÂÁö È®ÀÎÇØ¾ß ÇÑ´Ù).

Solaris ¿î¿µÃ¼Á¦³ª Linux³ª Mac ȯ°æ¿¡¼­´Â ½½·¡½Ã ¹æÇ⸸ ¹Ù²ãÁÖ¸é µÈ´Ù.

   javac bean/*.java

¸ð´ÏÅ͸µ ±â´ÉÀÌ °¡´ÉÇϵµ·Ï JMX Ȱ¼º ÇÁ·Î±×·¥À» ½ÇÇàÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ com.sun.management.jmxremote ¸í·É¹® ¼Ó¼ºÀ» ¼³Á¤ÇØ¾ß ÇÑ´Ù.

   java -Dcom.sun.management.jmxremote HelloAgent
main() ¸Þ¼Òµå ³¡¿¡¼­ Thread.sleep()À» È£ÃâÇϹǷΠÀÌ ¸Þ¼Òµå´Â Áï½Ã ¸®ÅÏÇÏÁö ¾ÊÀ» °ÍÀ̸ç, ÀÌ ½ÃÁ¡¿¡¼­ JMX ¿¡ÀÌÀüÆ®°¡ ½ÇÇàµÇ´Â µ¿ÀÏ È£½ºÆ®¿¡¼­ jconsoleÀ» ½ÃÀÛÇØ¾ß ÇÑ´Ù. À̸¦ ½ÃÀÛÇϱ⿡ ¾Õ¼­ HelloAgent ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ°í ÀÖ´ÂÁö È®ÀÎÇϱ⠹ٶõ´Ù. jconsoleÀ» ½ÃÀÛÇÏ´Â µ¥¿¡´Â 2°³ÀÇ ¿É¼ÇÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. Áï, »õ·Î¿î jps ¸í·É¹® ÅøÀ» °¡Áø ¿¡ÀÌÀüÆ® ÇÁ·Î±×·¥ÀÇ ÇÁ·Î¼¼½º ¾ÆÀ̵ð(PID)¸¦ ã¾Æ¼­ ¸í·É¹® ¿É¼Ç¿¡ Áְųª, ¾Æ¹«·± ¿É¼Ç ¾øÀÌ ½ÃÀÛÇÏ¿© ÇÁ·Î±×·¥¿¡¼­ ãÀ» ¼öµµ ÀÖ´Ù. PID¸¦ ÁöÁ¤ÇÏÁö ¾Ê°í jconsoleÀ» ½ÃÀÛÇÏ·Á¸é ´ÙÀ½ ¸í·É¹®À» ½ÇÇàÇϱ⠹ٶõ´Ù.

   jconsole

PID ¾øÀÌ ½ÃÀÛÇϸé Ãʱ⿡ "JConsole: Connect to Agent" âÀÌ Ç¥½ÃµÈ´Ù. ÇÑÆí, HelloAgent°¡ ½ÇÇà ÁßÀÌ¸é ¸®½ºÆ®¿¡¼­ PID¸¦ ãÀ» ¼ö ÀÖ´Ù.

JConsole: Connect to Agent

ÇØ´ç ¿¡ÀÌÀüÆ®¸¦ ¼±ÅÃÇϰí Connect ¹öưÀ» ´©¸¥´Ù. ±×·¯¸é Ãʱâ Summary È­¸éÀÌ ³ªÅ¸³­´Ù.

JConsole: Summary screen

Memory, Threads, Classes ÅÇÀº Ãʱâ È­¸éÀÇ ¿ä¾à Á¤º¸¸¦ Æ÷ÇÔÇϰí ÀÖÀ¸¸ç, ÀÌ ÅǵéÀ» ¼±ÅÃÇϸé Ãß°¡ Á¤º¸¸¦ º¼ ¼ö ÀÖ´Ù.

Memory ÅÇÀº Èü ¸Þ¸ð¸® »ç¿ë·®°ú °¢ ¸Þ¸ð¸® Ç®ÀÇ »ç¿ë·®À» Â÷Æ®·Î º¸¿©ÁØ´Ù. °¡ºñÁö(garbage) Ä÷º¼Ç ÄÝÀ» ¿äûÇÏ¸é °¡ºñÁö Ä÷º¼Ç ·±Å¸ÀÓµµ º¼ ¼öµµ ÀÖ´Ù.

JConsole: Memory tab

Threads ÅÇÀº ½ÇÇàÁßÀÎ ½º·¹µåÀÇ ¼ö¸¦ Ç¥½ÃÇÑ´Ù. ¸®½ºÆ®¿¡¼­ ƯÁ¤ÇÑ ½º·¹µå¸¦ ¼±ÅÃÇϸé ÇØ´ç ½ºÅÃÀ» ÃßÀûÇÒ ¼ö ÀÖ´Ù.

JConsole: Threads tab

Classes ÅÇÀº ÇÑ ¹ø¿¡ ¸î °³ÀÇ Å¬·¡½º°¡ ·ÎµùµÇ¾î ÀÖ´ÂÁö¸¦ º¼ ¼ö ÀÖ´Ù. Verbose Output üũ¹Ú½º¸¦ üũÇϸé Ŭ·¡½º°¡ Ãß°¡·Î ·ÎµùµÉ ¶§¸¶´Ù Äֿܼ¡ Ç¥½ÃµÇ¸ç, ÀÌ Å¬·¡½º´Â ½Ã½ºÅÛÀÌ »ý¼ºÇÑ Å¬·¡½ºÀÏ °æ¿ì°¡ ÀÖÀ¸¹Ç·Î ¹Ýµå½Ã ÀνÄÇØ¾ß ÇÒ ÇÊ¿ä´Â ¾ø´Ù.

JConsole: Classes tab

MBeans ÅÇÀº ±âº»ÀûÀ¸·Î ÀÌÀüÀÇ ºê¶ó¿ìÀú ±â¹Ý ¿¡ÀÌÀüÆ® ºä¸¦ ´ë½ÅÇÑ °ÍÀÌ´Ù. ¿©±â¼­´Â beanÀ» ã¾Æ¼­ ±× ¼Ó¼ºÀ» ¼öÁ¤ÇÏ°í ½ÇÇàÇÒ ¼ö ÀÖ´Ù.

JConsole: MBeans tab

VM À̸§ÀÇ ·¹À̺íÀÌ ºÙÀº ¸¶Áö¸· ÅÇÀº °¡»ó ¸Ó½ÅÀÌ´Ù. ¿î¿µÃ¼Á¦ Á¤º¸¿Í ·±Å¸ÀÓ Ç÷§Æû¿¡ ´ëÇÑ »ó¼¼Á¤º¸¸¦ º¸¿©ÁØ´Ù.

JConsole: VM tab

ÇÑ °¡Áö ¾Ë¾ÆµÎ¾î¾ß ÇÒ °ÍÀº jconsoleÀ» ÀÌ¿ëÇϱâ À§Çؼ­ ¹Ýµå½Ã MBeanÀ» »ç¿ëÇÒ ÇÊ¿ä´Â ¾ø´Ù´Â Á¡À̸ç, jconsoleÀ» ½ÃÀÛÇϱâ Àü¿¡ -Dcom.sun.management.jmxremote ¿É¼ÇÀ¸·Î ÇÁ·Î±×·¥À» ½ÃÀÛÇß´ÂÁö¿¡ ´ëÇØ¼­¸¸ È®ÀÎÇÏ¸é µÈ´Ù.

JMX¿¡ °üÇÑ Á» ´õ ¸¹Àº ³»¿ëÀº ´ÙÀ½ ¹®¼­µéÀ» ÂüÁ¶Çϱ⠹ٶõ´Ù.

.
.
.

Reader Feedback

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

 

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

.
.

º» ¸ÞÀÏÀº ¼ö½ÅÀ» µ¿ÀÇÇÑ È¸¿ø´Ô¿¡°Ô¸¸ ¹ß¼ÛµË´Ï´Ù.
º» ¸ÞÀÏÀÇ ¼ö½ÅÀ» °ÅºÎÇϰųª ¼ö½ÅÁÖ¼Ò¸¦ º¯°æÇÏ·Á¸é SKDN@Sun.comÀ¸·Î ¹®ÀÇ Áֽñ⠹ٶø´Ï´Ù.

SKDN(Sun Korea Developers Network)¿¡¼­ J2EE/J2SE Å×Å©ÆÁ µî ´Ù¾çÇÑ ¾ÆÆ¼Å¬µéÀ» Âü°íÇϼ¼¿ä.

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


Sun Microsystems, Inc.
.

 


I Love Solaris 10 ÄÁÅ×½ºÆ®°¡ °³Ãֵ˴ϴÙ.
1) Why I Love Solaris
2) Solaris ÃÖ°í¼ö¸¦ ã¾Æ¶ó
À§ÀÇ µÎ°¡Áö Ä·ÆäÀο¡ Âü°¡ÇϽðí ǪÁüÇÑ »óǰÀ» ¹Þ¾Æ°¡¼¼¿ä.
->ÄÁÅ×½ºÆ® ¹Ù·Î°¡±â

¾Æ¿ï·¯, SKDN¿¡¼­´Â ¸Å¿ù 1ȸ Solaris °³¹ßÀÚ ´º½º·¹Å͸¦ ¹ß¼ÛÇÒ ¿¹Á¤ÀÔ´Ï´Ù. Ãֽе¿Çâ°ú ±â¼úÀ» ÀüÇØµå¸³´Ï´Ù.
Áö±Ý ¹Ù·Î ½ÅûÇϼ¼¿ä.
->ÀÚ¼¼È÷ º¸±â


.