<?xml version="1.0" encoding="UTF-8"?>
<page xmlns="http://api.springnote.com">
  <identifier type="integer">738847</identifier>
  <title>MBeanRegistration &#51064;&#53552;&#54168;&#51060;&#49828;&#47484; &#49324;&#50857;&#54620; MBean &#51032;&#46972;&#51060;&#54532; &#49324;&#51060;&#53364; &#44288;&#47532;</title>
  <relation_is_part_of type="integer">738842</relation_is_part_of>
  <date_modified type="datetime">2008-01-24T04:53:53Z</date_modified>
  <uri>http://kyeseon.springnote.com/pages/738847</uri>
  <date_created type="datetime">2008-01-24T04:36:45Z</date_created>
  <source>&lt;p&gt;Rack&#44284; &#44536; &#50504;&#51032; Card&#51032; &#50696;&#47484;&amp;nbsp;&#53685;&#54644;&amp;nbsp;MBean&#51032; &#46972;&#51060;&#54532; &#49324;&#51060;&#53364;&#51012;&amp;nbsp;&#51060;&#54644;&#54616;&#44592; &#49789;&#46020;&#47197; &#54620;&amp;nbsp;&#51339;&#51008; &#50696;&#51228;&#46972;&#44256; &#49373;&#44033;&#54620;&#45796;.&#46608;&#54620; &#51648;&#44552; &#44396;&#49345;&#54616;&#44256; &#51080;&#45716; &#49556;&#47448;&#49496;&#50640; MBean&#51012; &#50612;&#46523;&#44172; &#44396;&#49457;&#54616;&#44256; MBean&#51032; &#46972;&#51060;&#54532; &#49324;&#51060;&#53364;&#51012; &#50612;&#46523;&#44172; &#44288;&#47532;&#54624; &#44163;&#51064;&#44032;&#47484; &#44256;&#48124;&#54616;&#44256; &#51080;&#50632;&#45716;&#45936; &#51339;&#51008; &#50500;&#51060;&#46356;&#50612;&#50752; &#51221;&#48372;&#47484; &#51228;&#44277;&#54644;&#51456; &#44544;&#51060;&#46972;&#44256; &#49373;&#44033;&#46108;&#45796;. &#49892; &#49464;&#44228;&#51032; Rack&#44284; Card&#47484;&amp;nbsp;Modeling&#51012; &#53685;&#54644; &#50612;&#46523;&#44172; &#52628;&#49345;&#54868;&#54616;&#45716;&#51648;&#50640; &#45824;&#54644;&#49436;&#46020; &#49332;&#51677; &#50687;&#48380; &#49688; &#51080;&#50632;&#45796;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;URL:&amp;nbsp;&lt;a href="http://sdnkorea.com/blog/484"&gt;http://sdnkorea.com/blog/484&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;a href="http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/"&gt;&lt;span style="COLOR: #810081"&gt;JMX(Java Management Extensions)&lt;/span&gt;&lt;/a&gt;&#45716; J2SE 5.0 &#51060;&#54980;&#47196; &#44228;&#49549; JDK&#50640; &#54252;&#54632;&#46104;&#50632;&#49845;&#45768;&#45796;. JDK 6&#50640;&#49436; &#50028;&#51008; &#49352;&#47213;&#44256; &#51652;&#48372;&#46108; JMX &#49368;&#54540;&#51012; JDK &lt;code&gt;sample&lt;/code&gt; &#46356;&#47113;&#53664;&#47532;&#50640; &#52628;&#44032;&#54664;&#49845;&#45768;&#45796;. &#49352;&#47196;&#50868; &#49368;&#54540;(&lt;code&gt;$JDK_HOME/sample/jmx/jmx-scandir&lt;/code&gt;)&#51008; &lt;a href="http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/best-practices.jsp"&gt;&lt;span style="COLOR: #0000ff"&gt;JMX best practices&lt;/span&gt;&lt;/a&gt;&#47484; &#48148;&#53461;&#51004;&#47196; &#54616;&#47728;, JMX&#47484; &#51060;&#50857;&#54616;&#50668; &#44288;&#47532; &#51064;&#53552;&#54168;&#51060;&#49828;&#47484; &#49444;&#44228;&#54624; &#46412;&#51032; &#47751; &#44032;&#51648; &#48372;&#54200;&#51201;&#51064; JMX &#54056;&#53556;&#44284; &#54588;&#54644;&#50556; &#54624; &#47751; &#44032;&#51648; &#54632;&#51221;&#50640; &#45824;&#54644;&#49436;&#46020; &#44160;&#53664;&#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#53945;&#55176; &lt;code&gt;jmx-scandir&lt;/code&gt; &#49368;&#54540;&#51008; &lt;code&gt;&lt;a href="http://java.sun.com/javase/6/docs/api/javax/management/MBeanRegistration.html"&gt;&lt;span style="COLOR: #0000ff"&gt;MBeanRegistration&lt;/span&gt;&lt;/a&gt;&lt;/code&gt; &#51064;&#53552;&#54168;&#51060;&#49828;&#47484; &#44396;&#54788;&#54632;&#51004;&#47196;&#50024; &#54644;&#44208;&#46112; &#49688; &#51080;&#45716; &#50668;&#47084; &#44032;&#51648; &#50857;&#47168;&#47484; &#48372;&#50668;&#51469;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#48376; &#53580;&#53356;&#54017;&#51008; &#44536;&#47084;&#54620; &#50857;&#47168;&#50640; &#52488;&#51216;&#51012; &#46168; &#44163;&#51077;&#45768;&#45796; : &lt;code&gt;MBeanRegistration&lt;/code&gt; &#51064;&#53552;&#54168;&#51060;&#49828;&#47484; &#49324;&#50857;&#54620; MBean(Management Bean) &#46972;&#51060;&#54532; &#49324;&#51060;&#53364; &#44288;&#47532;. JMX&#50752; MBean&#51032; &#44060;&#45392;&#50640; &#51061;&#49689;&#54616;&#51648; &#50506;&#51008; &#46021;&#51088;&#45716; &#45908; &#45208;&#50500;&#44032;&#44592; &#51204;&#50640; &lt;a href="http://java.sun.com/docs/books/tutorial/"&gt;&lt;span style="COLOR: #0000ff"&gt;&#51088;&#48148; &#53916;&#53664;&#47532;&#50620;&lt;/span&gt;&lt;/a&gt;&#50640;&#49436; &lt;a href="http://java.sun.com/docs/books/tutorial/jmx/index.html"&gt;&lt;span style="COLOR: #0000ff"&gt;JMX trail&lt;/span&gt;&lt;/a&gt;&#51012; &#49332;&#54196;&#48372;&#49901;&#49884;&#50724;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MBeanRegistration &#51064;&#53552;&#54168;&#51060;&#49828;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;a href="http://java.sun.com/javase/6/docs/api/javax/management/MBeanRegistration.html"&gt;&lt;span style="COLOR: #0000ff"&gt;MBeanRegistration&lt;/span&gt;&lt;/a&gt;&lt;/code&gt; &#51064;&#53552;&#54168;&#51060;&#49828;&#45716; &#53084;&#48177; &#51064;&#53552;&#54168;&#51060;&#49828;&#51077;&#45768;&#45796;. &#44536;&#44163;&#51008; MBean&#51004;&#47196; &#44396;&#54788;&#46112; &#49688; &#51080;&#51004;&#47728;, &#51060; &#46412; &lt;a href="http://java.sun.com/javase/6/docs/api/javax/management/MBeanServer.html"&gt;&lt;code&gt;&lt;span style="COLOR: #0000ff"&gt;MBeanServer&lt;/span&gt;&lt;/code&gt;&lt;/a&gt;&#47196; &#46321;&#47197; &#46608;&#45716; &#46321;&#47197; &#54644;&#51228;&#54624; &#46412; &#53945;&#51221;&#54620; &#50529;&#49496;&#51012; &#49688;&#54665;&#54644;&#50556; &#54624; &#54596;&#50836;&#44032; &#51080;&#49845;&#45768;&#45796;. MBean&#51060; &lt;code&gt;MBeanRegistration&lt;/code&gt;&#51012; &#44396;&#54788;&#54624; &#46412;, &#44536; &#51064;&#53552;&#54168;&#51060;&#49828;&#50640; &#51221;&#51032;&#46108; &#47700;&#49548;&#46300;&#45716; MBean&#51060; &lt;code&gt;MBeanServer&lt;/code&gt;&#47196;&#48512;&#53552; &#46321;&#47197; &#48143; &#46321;&#47197; &#54644;&#51228;&#54616;&#44592; &#51204;&#44284; &#54980;&#50640; &lt;code&gt;MBeanServer&lt;/code&gt;&#50640; &#51032;&#54644; &#54840;&#52636;&#46121;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;MBeanRegistration&lt;/code&gt; &#51064;&#53552;&#54168;&#51060;&#49828;&#47484; &#44396;&#54788;&#54616;&#45716; MBean&#51008; &#51088;&#49888;&#51060; &#46321;&#47197;&#46112; &lt;code&gt;MBeanServer&lt;/code&gt;&#47196;&#51032; &#47112;&#54140;&#47088;&#49828;&#47484; &#54925;&#46301;&#54616;&#47728;, &#46321;&#47197;&#46104;&#44592; &#51204;&#50640; &#51088;&#49888;&#51032; &lt;code&gt;&lt;a href="http://java.sun.com/javase/6/docs/api/javax/management/ObjectName.html"&gt;&lt;span style="COLOR: #0000ff"&gt;ObjectName&lt;/span&gt;&lt;/a&gt;&lt;/code&gt;&#51012; &#54925;&#46301;&#54624;-&#44536;&#47532;&#44256; &#50500;&#47560;&#46020; &#48320;&#44221;&#54624;- &#49688; &#51080;&#44172; &#46104;&#47728;, &#51088;&#44592; &#51088;&#49888;&#51032; &#46321;&#47197; &#46608;&#45716; &#46321;&#47197; &#54644;&#51228;&#47484; &#49688;&#46973; &#46608;&#45716; &#44144;&#48512;&#54624; &#49688;&#46020; &#51080;&#51012; &#44163;&#51077;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#45796;&#51020; &#53076;&#46300;&#50640;&#49436;&#45716; &lt;code&gt;Rack&lt;/code&gt; MBean&#51060; &lt;code&gt;MBeanRegistration&lt;/code&gt; &#51064;&#53552;&#54168;&#51060;&#49828;&#47484; &#44396;&#54788;&#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;pre&gt;
------------------------------------------------------------------
package jmxtechtip;

public interface RackMBean {
   /... defines methods exposed for management .../
}
------------------------------------------------------------------
package jmxtechtip;

public class Rack implements RackMBean, MBeanRegistration {
    /... implements RackMBean methods .../
    /... implements MBeanRegistration methods .../
}
------------------------------------------------------------------
&lt;/pre&gt;
&lt;p&gt;MBean &#51064;&#53552;&#54168;&#51060;&#49828;&#45716; &lt;code&gt;MBeanRegistration&lt;/code&gt;&#51012; &#54869;&#51109;(extend)&#54616;&#51648; &#50506;&#49845;&#45768;&#45796;. &#50724;&#51649; &#49892;&#51228;&#51032; MBean &#53364;&#47000;&#49828;&#44032; &#44536;&#44163;&#51012; &#44396;&#54788;(implement)&#54633;&#45768;&#45796;. &#49892;&#51228;&#47196;, &lt;code&gt;MBeanRegistration&lt;/code&gt; &#47700;&#49548;&#46300;&#45716; &#46321;&#47197; &#49884;&#50640; &#50724;&#51649; &lt;code&gt;MBeanServer&lt;/code&gt; &#50640; &#51032;&#54644;&#49436;&#47564; &#54840;&#52636;&#46104;&#45716; &#44163;&#51004;&#47196; &#49444;&#44228;&#46104;&#50632;&#51004;&#48064;&#47196; &#44288;&#47532; &#51064;&#53552;&#54168;&#51060;&#49828;&#47484; &#53685;&#54644; &lt;code&gt;MBeanRegistration&lt;/code&gt;&#50640; &#51221;&#51032;&#46108; &#47700;&#49548;&#46300;&#47484; &#45432;&#52636;&#54616;&#45716; &#44163;&#51008; &#50948;&#48152;&#50640; &#54644;&#45817;&#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#51060; &#53580;&#53356;&#54017;&#50640;&#49436;&#45716; &#51333;&#49549; MBean&#46308;&#51012; &#46321;&#47197; &#48143; &#46321;&#47197; &#54644;&#51228;&#54616;&#44592; &#50948;&#54620; &lt;code&gt;MBeanRegistration&lt;/code&gt;&#51032; &#47700;&#49548;&#46300;&#47484; &#44396;&#54788;&#54616;&#45716; &#48169;&#48277;&#51012; &#51228;&#49884;&#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&#47001;&#44284; &#52852;&#46300;&#51032; &#50857;&#47168;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&#54616;&#46300;&#50920;&#50612;&#51032; &#51068;&#48512;&#47484; &#45432;&#52636;&#54624; JMX &#50528;&#54540;&#47532;&#52992;&#51060;&#49496;&#51012; &#49444;&#44228;&#54616;&#44256; &#51080;&#45796;&#44256; &#44032;&#51221;&#54644; &#48389;&#49884;&#45796;. &#51109;&#48708;&#50640;&#45716; &#47001;&#51060; &#54616;&#45208; &#51080;&#49845;&#45768;&#45796;. -- &lt;code&gt;RackMBean&lt;/code&gt;&#51004;&#47196; &#45208;&#53440;&#45253;&#45768;&#45796;. &#47001; &#51088;&#52404;&#45716; &#52852;&#46300;&#47484; &#44866;&#51012; &#49688; &#51080;&#45716; &#45796;&#49688;&#51032; &#49836;&#47215;&#51012; &#44032;&#51648;&#44256; &#51080;&#49845;&#45768;&#45796;. &#44033; &#52852;&#46300;&#44032; &#44866;&#55176;&#44172; &#46104;&#47732; &lt;code&gt;CardMBean&lt;/code&gt; &#46608;&#45716; &lt;code&gt;CardMBean&lt;/code&gt;&#51032; &#49436;&#48652;&#53364;&#47000;&#49828;&#47196; &#54364;&#49884;&#46121;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#51060; &#50696;&#50640;&#49436; &lt;code&gt;RackMBean&lt;/code&gt;&#51060; &lt;code&gt;CardMBean&lt;/code&gt; &#51064;&#49828;&#53556;&#49828;&#47484; &#49373;&#49457;&#54616;&#44256; &#46321;&#47197;&#54616;&#45716; &#44163;&#50640; &#45824;&#54644; &#50756;&#51204;&#55176; &#52293;&#51076;&#51060; &#51080;&#45796;&#44256; &#44032;&#51221;&#54633;&#45768;&#45796;. &#53364;&#47000;&#49828; &lt;code&gt;Card&lt;/code&gt;&#45716; &lt;code&gt;Card&lt;/code&gt;&#50640; &#53945;&#51221;&#54620; &#44396;&#54788;&#51012; &#51228;&#44277;&#54616;&#46020;&#47197; &#54869;&#51109;&#46112; &#49688; &#51080;&#49845;&#45768;&#45796;. &#53364;&#47000;&#49828; &lt;code&gt;Rack&lt;/code&gt;&#51008; &#51088;&#49888;&#51032; &lt;code&gt;createCard(...)&lt;/code&gt; &#47700;&#49548;&#46300;&#47484; override&#54616;&#44592; &#50948;&#54644; &#54869;&#51109;(extend)&#46112; &#49688; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#45796;&#51020;&#51008; &#49324;&#50857;&#51088;&#44032; &#51060;&#47336;&#44256;&#51088; &#54616;&#45716; &#47785;&#54364;&#51077;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;* &lt;code&gt;Rack&lt;/code&gt; &#53364;&#47000;&#49828;&#50640;&#49436; &lt;code&gt;RackMBean&lt;/code&gt;&#51060; &#46321;&#47197;&#46112; &#46412;, &#50612;&#46500; &#49836;&#47215;&#51060; &#51060;&#48120; &#52852;&#46300;&#47484; &#44054;&#44256; &#51080;&#45716;&#51648;&#47484; &#50508;&#50500;&#45236;&#44256;, &#44536;&#46308; &#44033;&#44033;&#50640; &#45824;&#54644; &lt;code&gt;CardMBean&lt;/code&gt;&#51012; &#49373;&#49457; &#48143; &#46321;&#47197;&#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;* &lt;code&gt;Rack&lt;/code&gt; &#53364;&#47000;&#49828;&#50640;&#49436; &lt;code&gt;RackMBean&lt;/code&gt;&#51060; &#46321;&#47197; &#54644;&#51228;&#46112; &#46412;, &#47784;&#46304; &#44536;&#50640; &#45824;&#51025;&#54616;&#45716; &lt;code&gt;Card&lt;/code&gt; &#51064;&#49828;&#53556;&#49828;&#46308;&#46020; &#46321;&#47197; &#54644;&#51228;&#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;* &lt;code&gt;Card&lt;/code&gt; &#53364;&#47000;&#49828;&#50640;&#49436; &lt;code&gt;CardMBean&lt;/code&gt;&#51008; &#50724;&#51649; &lt;code&gt;Rack&lt;/code&gt;&#50640; &#51032;&#54644;&#49436;&#47564; &#46321;&#47197;&#46112; &#49688; &#51080;&#51020;&#51012; &#54869;&#49892;&#55176; &#54616;&#44256;, &lt;code&gt;CardMBean&lt;/code&gt;&#51008; &#50696;&#47484; &#46308;&#50612; &lt;code&gt;CardMBean&lt;/code&gt;&#50640; &#45824;&#54644; &#51649;&#51217;&#51201;&#51004;&#47196; &lt;code&gt;MBeanServer.unregisterMBean(...)&lt;/code&gt;&#51012; &#54840;&#52636;&#54616;&#45716; &#53364;&#46972;&#51060;&#50616;&#53944; JMX &#50528;&#54540;&#47532;&#52992;&#51060;&#49496;&#50640; &#51032;&#54644;&#49436;&#44032; &#50500;&#45768;&#46972; &#50724;&#51649; &lt;code&gt;Rack&lt;/code&gt;&#50640; &#51032;&#54644;&#49436;&#47564; &#46321;&#47197; &#54644;&#51228;&#46112; &#49688; &#51080;&#51020;&#51012; &#48516;&#47749;&#55176; &#54616;&#49901;&#49884;&#50724;.&lt;/p&gt;
&lt;p&gt;&#52280;&#44256;: &#50668;&#44592;&#49436;&#51032; &#51032;&#46020;&#45716; &#47001; &#46608;&#45716; &#52852;&#46300;&#47484; &#47784;&#45944;&#47553;&#54616;&#45716; &#48169;&#48277;&#51012; &#48372;&#50668;&#51452;&#45716; &#44163;&#51060; &#50500;&#45785;&#45768;&#45796;. &#51200;&#51088;&#45716; &#50724;&#51649; &#50696;&#47484; &#46308;&#44592; &#50948;&#54644;&#49436; &#47001;&#44284; &#52852;&#46300;&#47484; &#49440;&#53469;&#54664;&#49845;&#45768;&#45796;. &#50780;&#45264;&#54616;&#47732; &#44536;&#46308;&#51032; &#44288;&#44228;&#44032; &#51060;&#54644;&#54616;&#44592; &#49789;&#44592; &#46412;&#47928;&#51077;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;MBeanRegistration&lt;/code&gt; &#51064;&#53552;&#54168;&#51060;&#49828; &#44396;&#54788;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&#45796;&#51020; &#53076;&#46300;&#45716; &lt;code&gt;Rack&lt;/code&gt; MBean&#51060; &lt;code&gt;MBeanRegistration&lt;/code&gt; &#51064;&#53552;&#54168;&#51060;&#49828;&#47484; &#44396;&#54788;&#54616;&#45716; &#48169;&#48277;&#51012; &#48372;&#50668;&#51469;&#45768;&#45796;.&lt;/p&gt;
&lt;pre&gt;
/**
  * A Rack contains Cards.
  */
 public class Rack implements RackMBean, MBeanRegistration {

     // MBeans must be multi-thread safe.
     // 'rackName' and 'server' will be set at registration time, so you
     // must therefore take care of synchronization issues.
     // Use 'volatile' to make sure that you always use an accurate value.
     //
     // Name of this rack, extracted from the ObjectName.
     private volatile String rackName;
         // The MBeanServer in which this MBean is registered
     private volatile MBeanServer server;
         // An array of slots that may be occupied (and contain a card) or may be
     // unoccupied. slots[i]==null means that slot 'i' is unoccupied.
     private final Card[] slots;
         /**      * Creates a new rack.
      * @param slotCount Total number of slots.      **/
     public Rack(int slotCount) {
         if (slotCount &amp;lt; 0)
             throw new IllegalArgumentException(Integer.toString(slotCount));
         this.slots = new Card[slotCount];
         ...
     }

     // --------------------------------------------------------------------
     // *Implementation of the MBeanRegistration Interface*
     // --------------------------------------------------------------------
         /**
      * Allows the MBean to perform any operations it needs before
      * being registered in the MBean server.
      * If any exception is raised, the MBean will not be registered
      * in the MBean server.
      *
      * RackMBean uses this method to check the validity of the supplied
      * ObjectName, and in particular that it corresponds to a valid rack.
      *
      * It also uses this method to obtain a reference to the MBeanServer in
      * which it is registered.
      *
      * @param server -- The MBean server in which the MBean will be registered.
      * @param name -- The object name of the MBean. In this implementation, the
      * supplied name must not be null.
      *
      * @return -- The name under which the MBean is to be registered. If null,
      * the registration will fail.
      *
      * @throws Exception -- This exception will be caught by the MBean
      * server and rethrown as an MBeanRegistrationException.
      */
      *public ObjectName preRegister(MBeanServer server, ObjectName name)
         throws Exception {*
         // A null ObjectName is not allowed. Let MBeanServer throw
         // the exception.
         if (name == null)             return null;
                 // Get rackname.
         rackName = name.getKeyProperty(RACK_KEY);
         if (rackName == null)
             throw new MalformedObjectNameException("missing rack name: " + name);
                 if (!isValidRack(rackName))
             throw new IllegalArgumentException(rackName + ": not a valid rack");
                 this.server = server;
         return name;
     }

     /**
      * Allows the MBean to perform any operations needed after having
      * been registered in the MBean server or after the registration
      * has failed.
      *
      * If the registration is successful, the Rack MBean will
      * register all its related CardMBeans.
      *
      * @param registrationDone -- Indicates whether or not the MBean
      * has been successfully registered in the MBean server.
      * The value false means that the registration has failed.
      */
     *public void postRegister(Boolean registrationDone) {*
                 if (!registrationDone) return;
                 for (int i = 0; i &amp;lt; slots.length; i++) {
             final String cardType = discoverCardType(i);
             if (cardType != null) {
                 try {
                     final Card card = createCard(i, cardType);
                     final ObjectName cardName = createCardName(rackName, i);
                         // Avoid calling an MBeanServer operation
                         // from within a synchronized block.
                     card.registerSelf(server, cardName);
                                         synchronized (slots) {
                         slots[i] = card;
                     }
                 } catch (Exception x) {
                     LOG.warning("Couldn't create CardMBean for " +
                             cardType + "[" + i + "]");
                 }
             }
         }
             }

     /**
      * Allows the MBean to perform any operations it needs before being
      * unregistered by the MBean server
      *
      * The RackMBean uses this method to unregister all its related
      * CardMBeans. If for some reason, unregistration of one of these
      * MBeans fails, the RackMBean will no be unregistered either.
      *
      * @throws Exception -- This exception will be caught by the MBean
      * server and rethrown as an MBeanRegistrationException.
      */
      *public void preDeregister() throws Exception {*
         for (int i=0; i&amp;lt;SLOTS.LENGTH; class="" implementation="" i++) ...
         return name;
     }
         /**
      * Returns the rack name embedded in the given ObjectName.
      **/
     public static String getRackName(ObjectName name) {
         final String rackName = name.getKeyProperty(RACK_KEY);
         if (rackName == null)
             throw new IllegalArgumentException(" missing name: ?=" + rackName + " + name); return rackName;
&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;preRegister &amp;lt;#preRegisterRack&amp;gt;&lt;/code&gt;&#50640;&#49436; &lt;code&gt;Rack&lt;/code&gt; MBean&#51008; &#44536;&#44163;&#51060; &#46321;&#47197;&#46108; &lt;code&gt;MBeanServer&lt;/code&gt;&#47196;&#51032; &#47112;&#54140;&#47088;&#49828;&#50752; &#51088;&#44592; &#51088;&#49888;&#51032; &lt;code&gt;ObjectName&lt;/code&gt;&#50640; &#45824;&#54620; &#47112;&#54140;&#47088;&#49828;&#47484; &#54925;&#46301;&#54633;&#45768;&#45796;. &#44536;&#44163;&#51008; &#51228;&#44277;&#46108; &lt;code&gt;ObjectName&lt;/code&gt;&#51060; &#50976;&#54952;&#54620;&#51648; &#52404;&#53356;&#54624; &#49688; &#51080;&#51004;&#47728; -- &#51060; &#50696;&#50640;&#49436;&#45716; &#44536;&#44163;&#51060; &lt;code&gt;rack&lt;/code&gt; &#53412;&#47484; &#54252;&#54632;&#54616;&#44256; &#51080;&#51004;&#47732; &#50976;&#54952;&#54620; &#44163;&#51004;&#47196; &#44036;&#51452;&#54632; -- &#44536;&#44163;&#51008; &#49892;&#51228;&#47196; &#51088;&#49888;&#51060; &#47784;&#45944;&#47553;&#54616;&#44592;&#47196; &#50836;&#52397; &#48155;&#51008; &#47001;&#51012; &#47784;&#45944;&#47553;&#54624; &#49688;&#51080;&#45796;&#45716; &#44163;&#51012; &#52404;&#53356;&#54624; &#49688; &#51080;&#49845;&#45768;&#45796;. &#50668;&#44592;&#49436; &#51060;&#44163;&#51008; &lt;code&gt;isValidRack(...)&lt;/code&gt; &#47700;&#49548;&#46300;&#50640; &#51032;&#54644; &#54665;&#54644;&#51648;&#44172; &#46104;&#50612; &#51080;&#51004;&#47728;, &#51060; &#47700;&#49548;&#46300;&#51032; &#44396;&#54788;&#51008; &#54364;&#49884;&#46104;&#51648; &#50506;&#49845;&#45768;&#45796;. &#51060;&#47084;&#54620; &#51312;&#44148;&#51060; &#47582;&#51648; &#50506;&#51004;&#47732; &lt;code&gt;Rack&lt;/code&gt; MBean&#51008; exception&#51012; &#48156;&#49373;&#49884;&#53420; &#44163;&#51060;&#47728; &#46384;&#46972;&#49436; &#46321;&#47197;&#51060; &#44144;&#48512;&#46112; &#44163;&#51077;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;postRegister &amp;lt;#postRegisterRack&amp;gt;&lt;/code&gt;&#50640;&#49436; &lt;code&gt;Rack MBean&lt;/code&gt;&#51008; &#46321;&#47197; &#49457;&#44277; &#50668;&#48512;&#47484; &#54869;&#51064;&#54633;&#45768;&#45796;. &#49892;&#54056;&#50688;&#51004;&#47732; &#50668;&#44592;&#49436; &#51473;&#45800;&#54633;&#45768;&#45796;. &#44536;&#47111;&#51648; &#50506;&#51004;&#47732; &#44536;&#44163;&#51008; &#50612;&#45712; &#49836;&#47215;&#51060; &#51060;&#48120; &#52852;&#46300;&#44032; &#44866;&#54784;&#51080;&#45716;&#51648;&#47484; &#50508;&#50500;&#45236;&#44256; &#44536;&#44163;&#46308; &#44033;&#44033;&#50640; &#45824;&#54644; &lt;code&gt;CardMBean&lt;/code&gt;&#51012; &#49373;&#49457; &#48143; &#46321;&#47197;&#54633;&#45768;&#45796;. &#44536;&#47084;&#45208; &#51068;&#48152;&#51201;&#51064; &lt;code&gt;MBeanServer.registerMBean(...)&lt;/code&gt;&#51012; &#49324;&#50857;&#54616;&#45716; &#45824;&#49888;, &#49373;&#49457;&#46108; &lt;code&gt;Card&lt;/code&gt; &#51064;&#49828;&#53556;&#49828;&#50640; &#45824;&#54620; package-protected &#47700;&#49548;&#46300;&#47484; &#54840;&#52636;&#54633;&#45768;&#45796;. &#51060; &#50696;&#50640;&#49436;&#45716; &lt;code&gt;Card.registerSelf() &amp;lt;#registerSelf&amp;gt;&lt;/code&gt;&#51077;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#51060; &#47700;&#49548;&#46300;&#45716; &#47196;&#51649;&#44284; &#54632;&#44760; &#49373;&#49457;&#46104;&#50632;&#44592; &#46412;&#47928;&#50640; CardMBean&#51008; &#44536;&#44163;&#51032; &lt;code&gt;registerSelf(...)&lt;/code&gt; &#47700;&#49548;&#46300;&#47484; &#54840;&#52636;&#54616;&#50668; &lt;code&gt;MBeanServer&lt;/code&gt; &#50640; &#45800;&#51648; &#46321;&#47197;&#47564; &#46112; &#49688; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;postRegister&lt;/code&gt;&#45716; exception&#51012; &#48156;&#49373;&#49884;&#53412;&#51648; &#50506;&#46020;&#47197; &#46104;&#50612; &#51080;&#45796;&#45716; &#51216;&#50640; &#50976;&#51032;&#54616;&#49901;&#49884;&#50724;. &#46384;&#46972;&#49436; &#47784;&#46304; &lt;code&gt;Card&lt;/code&gt; MBean &#46321;&#47197;&#51012; &lt;code&gt;try { } catch { }&lt;/code&gt; &#48660;&#47085;&#51004;&#47196; &#48372;&#54840;&#54664;&#49845;&#45768;&#45796;. &#50528;&#54540;&#47532;&#52992;&#51060;&#49496; &#47196;&#51649;&#50640; &#46384;&#47476;&#47732; &lt;code&gt;Card&lt;/code&gt; MBean &#46321;&#47197;&#51008; &#51060; &#49884;&#51216;&#50640;&#49436; &#49892;&#54056;&#54616;&#51648; &#50506;&#51012; &#44163;&#51060;&#48064;&#47196; &#51060;&#47111;&#44172; &#54644;&#46020; &#44316;&#52270;&#49845;&#45768;&#45796;. &#47564;&#50557; &#44536;&#47111;&#45796;&#47732;, &#45800;&#49692;&#55176; &#44221;&#44256; &#47700;&#49884;&#51648;&#47564; &#44592;&#47197;&#54624; &#44163;&#51077;&#45768;&#45796;. Had you wanted the &lt;code&gt;Card&lt;/code&gt; MBean&#51060; &#46321;&#47197; &#49892;&#54056;&#51068; &#46412;&#47560;&#45796; &lt;code&gt;Rack&lt;/code&gt; MBean &#46321;&#47197;&#46020; &#49892;&#54056;&#54616;&#46020;&#47197; &#54644;&#50556;&#54620;&#45796;&#47732;, &#45824;&#49888; &lt;code&gt;preRegister &amp;lt;#preRegisterRack&amp;gt;&lt;/code&gt;&#50640;&#49436; &lt;code&gt;Card&lt;/code&gt; &#46321;&#47197; &#47196;&#51649;&#51012; &#44396;&#54788;&#54664;&#51012; &#44163;&#51077;&#45768;&#45796;. &#44536;&#47111;&#44172; &#46104;&#47732; &#44536; &#47196;&#51649;&#51008; &#45908; &#48373;&#51105;&#54644;&#51276;&#51012; &#44163;&#51077;&#45768;&#45796;. &#50780;&#45264;&#47732; &#44536;&#46308; &#51473; &#54616;&#45208;&#44032; &#46321;&#47197;&#50640; &#49892;&#54056;&#54620; &#44221;&#50864;&#50640; &#51060;&#48120; &#46321;&#47197;&#46108; &lt;code&gt;Card&lt;/code&gt; MBeans&#51032; &#46321;&#47197;&#51012; &lt;code&gt;rollback&lt;/code&gt; &#54616;&#45716; &#53076;&#46300;&#47484; &#44396;&#54788;&#54644;&#50556; &#54616;&#44592; &#46412;&#47928;&#51077;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;preDeregister &amp;lt;#preDeregisterRack&amp;gt;&lt;/code&gt;&#50640;&#49436;, &lt;code&gt;Rack&lt;/code&gt; MBean&#51008; &#44536;&#44163;&#51060; &#51204;&#50640; &#46321;&#47197;&#54664;&#45912; &#47784;&#46304; &lt;code&gt;Card&lt;/code&gt; MBean&#46308;&#51012; &#46321;&#47197; &#54644;&#51228;&#54633;&#45768;&#45796;. &#45796;&#49884; &#50668;&#44592;&#49436;, &#51068;&#48152;&#51201;&#51064; &lt;code&gt;MBeanServer.unregisterMBean(...)&lt;/code&gt;&#51012; &#49324;&#50857;&#54616;&#45716; &#45824;&#49888;, &#46321;&#47197;&#46108; &lt;code&gt;Card&lt;/code&gt; &#51064;&#49828;&#53556;&#49828;&#50640; &#45824;&#54620; package-protected &#47700;&#49548;&#46300;&#47484; &#54840;&#52636;&#54633;&#45768;&#45796;. &#51060; &#50696;&#50640;&#49436;&#45716; &lt;code&gt;Card.unregisterSelf() &amp;lt;#unregisterSelf&amp;gt;&lt;/code&gt;&#51077;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#51060; &#47700;&#49548;&#46300;&#45716; &#47196;&#51649;&#44284; &#54632;&#44760; &#49373;&#49457;&#46104;&#50632;&#44592; &#46412;&#47928;&#50640; &lt;code&gt;Card&lt;/code&gt; MBean&#51008; &#44536;&#44163;&#51032; &lt;code&gt;unregisterSelf(...)&lt;/code&gt; &#47700;&#49548;&#46300;&#47484; &#54840;&#52636;&#54616;&#50668; &lt;code&gt;MBeanServer&lt;/code&gt;&#47196;&#48512;&#53552; &#50724;&#51649; &#46321;&#47197; &#54644;&#51228;&#47564; &#46112; &#49688; &#51080;&#49845;&#45768;&#45796;. &#45800;&#49692;&#55176; &lt;code&gt;MBeanServer.unregisterMBean(...)&lt;/code&gt;&#51012; &#54840;&#52636;&#54616;&#47732; &#49892;&#54056;&#51068; &#44163;&#51077;&#45768;&#45796;. &#51060;&#45716; &lt;code&gt;Card&lt;/code&gt; MBean&#51032; &#49373;&#49457;&#51088;&#47564;&#51060; &#44536;&#44163;&#51012; &#46321;&#47197; &#48143; &#46321;&#47197; &#54644;&#51228;&#54624; &#49688; &#51080;&#45796;&#45716; &#44163;&#51012; &#54869;&#49892;&#55176; &#54633;&#45768;&#45796;. JMX &#53364;&#46972;&#51060;&#50616;&#53944;&#44032; &lt;code&gt;Card&lt;/code&gt; MBean &#49345;&#50640;&#49436; &lt;code&gt;MBeanServer.unregisterMBean(...)&lt;/code&gt;&#51012; &#51649;&#51217;&#51201;&#51004;&#47196; &#54840;&#52636;&#54616;&#47140;&#44256; &#54616;&#47732; &#51060;&#45716; &#49892;&#54056;&#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#51060;&#51228; &#50612;&#46523;&#44172; &lt;code&gt;Card&lt;/code&gt; MBean&#51060; &lt;a href="http://java.sun.com/javase/6/docs/api/javax/management/MBeanRegistration.html"&gt;&lt;code&gt;&lt;span style="COLOR: #0000ff"&gt;MBeanRegistration&lt;/span&gt;&lt;/code&gt;&lt;/a&gt; &#51064;&#53552;&#54168;&#51060;&#49828;&#47484; &#49324;&#50857;&#54616;&#45716;&#51648;&#47484; &#49332;&#54196;&#48389;&#49884;&#45796;. &#45796;&#51020; &#53076;&#46300;&#45716; &#50612;&#46523;&#44172; &lt;code&gt;Card&lt;/code&gt; MBean&#51060; &#44396;&#54788;&#46104;&#50632;&#45716;&#51648;&#47484; &#48372;&#50668;&#51469;&#45768;&#45796;.&lt;/p&gt;
&lt;pre&gt;
/**
  * A Card is plugged in a Rack slot.
  */
 public class Card implements CardMBean, MBeanRegistration {

     // This MBean will accept to be registered or unregistered
     // only if 'isRegistrationAllowed' is 'true'.
     private volatile boolean isRegistrationAllowed = false;
         private volatile ObjectName  name;
     private volatile MBeanServer server;
         public Card(int occupiedSlot, String cardType) { ... }

     // This method sets 'isRegistrationAllowed' to 'true', calls
     // server.registerMBean(this, name), and finally sets
     // 'isRegistrationAllowed' back to false.
     //
     *void registerSelf(MBeanServer server, ObjectName name) throws JMException {*
         *isRegistrationAllowed = true;*
         try {
             this.server = server;
             this.name = name;
             this.name = server.registerMBean(this, name).getObjectName();
         } finally {
             *isRegistrationAllowed = false;*
         }
     }
     // This method sets 'isRegistrationAllowed' to 'true',
     // calls server.unregisterMBean(name), and finally sets
     // 'isRegistrationAllowed' back to false.
     //
     *void unregisterSelf() throws JMException {*
         *isRegistrationAllowed = true;*
         try {
             if (server != null &amp;amp;&amp;amp; server.isRegistered(name))
                 server.unregisterMBean(name);
             this.server = null;
             this.name = null;
         } finally {
             *isRegistrationAllowed = false;*
         }
     }
            /**
      * Allows the MBean to perform any operations it needs before being
      * registered in the MBean server.      *
      * *In this example, the CardMBean will refuse to be registered if
      * 'isRegistrationAllowed' is false -- which means that Card MBeans
      * can only be registered by {@link #registerSelf registerSelf()}.*
      *
      * {@code registerSelf()} is a package method which is only called by
      * {@link Rack}.
      */
     *public final ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception {*
                 if (*!isRegistrationAllowed*)
             throw new IllegalStateException("Illegal registration attempt");
                     assert server == this.server &amp;amp;&amp;amp; name == this.name;

         return name;
     }

     /**
      * Allows the MBean to perform any operations needed after having
      * been registered in the MBean server or after the registration has
      * failed.
      * *The CardMBean does not need to do anything here.*
      * @param registrationDone -- Indicates whether or not the MBean
      * has been successfully registered in the MBean server. The value
      * 'false' means that the registration has failed.
      */
     *public void postRegister(Boolean registrationDone) {}*

     /**
      * Allows the MBean to perform any operations it needs before
      * being unregistered by the MBean server.
      * *The CardMBean will refuse to let itself be unregistered if
      * 'isRegistrationAllowed' is false, which means that Card MBeans
      * can only be unregistered by {@link #unregisterSelf unregisterSelf()}.*
      *
      * {@code unregisterSelf()} is a package method which is only called by
      * {@link Rack}.
      *
      * @throws Exception -- This exception will be caught by the MBean
      * server and rethrown as an MBeanRegistrationException.
      */
     *public final void preDeregister() throws Exception {*
         if (*!isRegistrationAllowed*)
             throw new IllegalStateException("Illegal unregistration attempt");                }

     /**
      * Allows the MBean to perform any operations needed after having been
      * unregistered in the MBean server.
      * *The CardMBean does not need to do anything here.*
      */
     *public void postDeregister() { }*

 }
&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;preRegister &amp;lt;#preRegisterCard&amp;gt;&lt;/code&gt;, &lt;code&gt;preDeregister &amp;lt;#preDeregisterCard&amp;gt;&lt;/code&gt;, &lt;code&gt;registerSelf &amp;lt;#registerSelf&amp;gt;&lt;/code&gt; &#48143; &lt;code&gt;unregisterSelf &amp;lt;#unregisterSelf&amp;gt;&lt;/code&gt;&#50640;&#49436;&#51032; &#47196;&#51649;&#51008; &lt;code&gt;Card&lt;/code&gt; MBean&#51060; &#44536;&#44163;&#51012; &#49373;&#49457;&#54620; &lt;code&gt;Rack&lt;/code&gt; MBean&#51060; &#50500;&#45772; &#45572;&#44400;&#44032;&#50640; &#51032;&#54644; &#46321;&#47197; &#46608;&#45716; &#46321;&#47197; &#54644;&#51228; &#46104;&#45716; &#44163;&#51012; &#48169;&#51648;&#54616;&#45716; &#44163;&#51077;&#45768;&#45796;. &lt;code&gt;registerSelf&lt;/code&gt; &#48143; &lt;code&gt;unregisterSelf&lt;/code&gt; &#47700;&#49548;&#46300;&#45716; package-protected &#49345;&#53468;&#47484; &#50976;&#51648;&#54616;&#48064;&#47196; &lt;code&gt;Rack&lt;/code&gt; MBean &#47564;&#51060; &#51060;&#47484; &#54840;&#52636;&#54624; &#49688; &#51080;&#49845;&#45768;&#45796;. &lt;code&gt;preRegister&lt;/code&gt; &#48143; &lt;code&gt;preDeregister&lt;/code&gt; &#47700;&#49548;&#46300;&#45716; final&#47196; &#49440;&#50616;&#46104;&#50632;&#44592; &#46412;&#47928;&#50640; &#49436;&#48652;&#53364;&#47000;&#49828;&#46308;&#51060; &#54644;&#45817; &#47196;&#51649;&#51012; &#48320;&#44221;&#54624; &#49688; &#50630;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#52280;&#44256;: &lt;code&gt;Card&lt;/code&gt;&#51032; &#46321;&#47197; &#46608;&#45716; &#46321;&#47197; &#54644;&#51228; &#49884; &#49436;&#48652;&#53364;&#47000;&#49828;&#50640;&#49436; &#53945;&#51221; &#52628;&#44032; &#50529;&#49496;&#51012; &#49688;&#54665;&#54644;&#50556; &#54616;&#45716; &#44221;&#50864;, &lt;a href="http://www.martinfowler.com/bliki/CallSuper.html"&gt;&lt;span style="COLOR: #810081"&gt;Martin Fowler's note&lt;/span&gt;&lt;/a&gt;&#50640;&#49436; &#49444;&#47749;&#54616;&#45716; &#45824;&#47196; &#47785;&#51201;&#50640; &#47582;&#45716; &#49352;&#47196;&#50868; protected hook&#51012; &#49324;&#50857;&#54624; &#49688; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#44536;&#47084;&#45208; &#45800;&#49692;&#54620; &lt;code&gt;volatile boolean isRegistrationAllowed&lt;/code&gt; &#54540;&#47000;&#44536;&#47484; &#49324;&#50857;&#54616;&#44172; &#46104;&#47732; &#50416;&#47112;&#46300; &#44221;&#54633;(thread contention)&#50640; &#45824;&#54620; &#50557;&#44036;&#51032; &#50668;&#51648;&#44032; &#50668;&#51204;&#55176; &#45224;&#44172; &#46121;&#45768;&#45796;. &#49892;&#51228;&#47196; &lt;code&gt;Rack&lt;/code&gt; MBean&#51060; &lt;code&gt;unregisterSelf &amp;lt;#unregisterSelf&amp;gt;&lt;/code&gt;&#47484; &#54840;&#52636;&#54624; &#46412;, &#45796;&#47480; &#50416;&#47112;&#46300;&#44032; &#49332;&#51677; &#46308;&#50612;&#50752;&#49436; &lt;code&gt;isRegistrationAllowed&lt;/code&gt; &#54540;&#47000;&#44536;&#45716; &#49444;&#51221;&#46108; &#51649;&#54980;&#51060;&#51648;&#47564; &lt;code&gt;unregisterSelf&lt;/code&gt;&#44032; &#50756;&#47308;&#46104;&#44592; &#51204;&#50640; &lt;code&gt;MBeanServer.unregisterMBean&lt;/code&gt;&#51012; &#54840;&#52636;&#54624; &#49688;&#46020; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#46384;&#46972;&#49436; &#45908; &#45208;&#51008; &#49556;&#47336;&#49496;&#51004;&#47196;&#45716; &lt;code&gt;isRegistrationAllowed&lt;/code&gt; &#54540;&#47000;&#44536;&#47484; &lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/ThreadLocal.html"&gt;&lt;code&gt;&lt;span style="COLOR: #0000ff"&gt;ThreadLocal&lt;/span&gt;&lt;/code&gt;&lt;/a&gt;&#47196; &#51200;&#51109;&#54616;&#45716; &#48169;&#48277;&#51060; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&#45796;&#51020; &#53076;&#46300;&#50640;&#49436;&#45716; &lt;code&gt;Card&lt;/code&gt; MBean &#44396;&#54788;&#50640;&#49436; &#48320;&#44221;&#51060; &#54596;&#50836;&#54620; &#49324;&#54637;&#51012; &#48372;&#50668;&#51469;&#45768;&#45796;.&lt;/p&gt;
&lt;pre&gt;
// initialization of isRegistrationAllowed flag:

     // private volatile boolean isRegistrationAllowed = false;
     //     =&amp;gt; replaced by:
     private final static ThreadLocal isRegistrationAllowed =        new ThreadLocal() {
           @Override protected Boolean initialValue() {return false;}
     };
          // in registerSelf / unregisterSelf
     ....
         // isRegistrationAllowed = true;
         //     =&amp;gt; replaced by:
         *isRegistrationAllowed.set(true);*
         try {
             ...
         } finally {
             // isRegistrationAllowed = false;
             //     =&amp;gt; replaced by:
             *isRegistrationAllowed.set(false);*
         }
     ....

     // in preRegister / preDeregister
     ...
         // if (!isRegistrationAllowed)
         //     =&amp;gt; replaced by:                if (*!isRegistrationAllowed.get()*)
             throw new IllegalStateException(...);
     ...
&lt;/pre&gt;
&lt;p class="body"&gt;&lt;strong&gt;&#44208;&#47200;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&#51060; &#53580;&#53356;&#54017;&#51008; MBean&#51060; &#51333;&#49549; MBean&#51012; &#46321;&#47197; &#48143; &#46321;&#47197; &#54644;&#51228;&#54616;&#44592; &#50948;&#54644; &lt;a href="http://java.sun.com/javase/6/docs/api/javax/management/MBeanRegistration.html"&gt;&lt;code&gt;&lt;span style="COLOR: #0000ff"&gt;MBeanRegistration&lt;/span&gt;&lt;/code&gt;&lt;/a&gt; &#51064;&#53552;&#54168;&#51060;&#49828;&#47484; &#50612;&#46523;&#44172; &#51060;&#50857;&#54616;&#45716;&#51648;&#47484; &#49548;&#44060;&#54664;&#49845;&#45768;&#45796;. &#46608;&#54620; &#49373;&#49457;&#51088;&#47564;&#51060; &#51060;&#47484; &#46321;&#47197; &#48143; &#46321;&#47197; &#54644;&#51228;&#54624; &#49688; &#51080;&#46020;&#47197; &#54616;&#45716; &#48169;&#48277;&#51012; &#53685;&#54644; &#51333;&#49549; MBean&#47484; &#48372;&#54840;&#54624; &#49688; &#51080;&#45796;&#45716; &#44163;&#46020; &#49332;&#54196; &#48372;&#50520;&#49845;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;JDK 6&#50857; &#44256;&#44553; JMX &#49368;&#54540;(&lt;code&gt;$JDK_HOME/sample/jmx/jmx-scandir&lt;/code&gt;)&#50640;&#49436;&#45716; &lt;a href="http://java.sun.com/javase/6/docs/api/javax/management/MBeanRegistration.html"&gt;&lt;code&gt;&lt;span style="COLOR: #0000ff"&gt;MBeanRegistration&lt;/span&gt;&lt;/code&gt;&lt;/a&gt; &#51064;&#53552;&#54168;&#51060;&#49828; &#49324;&#50857;&#50640; &#45824;&#54644; &#47566;&#51008; &#45796;&#47480; &#44032;&#45733;&#49457;&#46308;&#51012; &#51228;&#49884;&#54633;&#45768;&#45796;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&#51200;&#51088; &#51221;&#48372;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.sun.com/jmxetc"&gt;&lt;span style="COLOR: #0000ff"&gt;Daniel Fuchs&lt;/span&gt;&lt;/a&gt;&#45716; &#54532;&#46993;&#49828; Grenoble &#49548;&#51116; &#50028;&#47560;&#51060;&#53356;&#47196;&#49884;&#49828;&#53596;&#51592;&#51032; Java DMK, JMX, Java SE &#54016;&#50640;&#49436; &#51068;&#54616;&#44256; &#51080;&#49845;&#45768;&#45796;.&lt;br /&gt;
&lt;br /&gt;
* &#51060; &#50500;&#54000;&#53364;&#51032; &#50689;&#50612; &#50896;&#48376;&#51008;&lt;br /&gt;
&lt;a href="http://blogs.sun.com/CoreJavaTechTips/entry/using_the_mbeanregistration_interface_to"&gt;&lt;span style="COLOR: #810081"&gt;http://blogs.sun.com/CoreJavaTechTips/entry/using_the_mbeanregistration_interface_to&lt;/span&gt;&lt;/a&gt;&#50640;&#49436; &#48372;&#49892; &#49688; &#51080;&#49845;&#45768;&#45796;.&lt;/p&gt;
</source>
  <rights nil="true"></rights>
  <creator>http://kyeseon.myid.net/</creator>
  <contributor_modified>http://kyeseon.myid.net/</contributor_modified>
  <version type="integer">21</version>
  <tags>jmx,mbean,mbeanregistration</tags>
</page>
