JavaTM 2
Platform
Std.  Ed.  v1. 4.0

ÆÐŰÁö javax.naming.ldap

LDAPv3 ÀÇ È®Àå Á¶ÀÛ°ú ÄÁÆ®·ÑÀ» ¼­Æ÷Æ®ÇÕ´Ï´Ù.

ÂüÁ¶:
          ¼³¸í

ÀÎÅÍÆäÀ̽ºÀÇ °³¿ä
Control ÀÌ ÀÎÅÍÆäÀ̽º´Â ¡¸RFC 2251¡¹À¸·Î Á¤Àǵǰí ÀÖ°Ô LDAPv3 ÄÁÆ®·ÑÀ» Ç¥½ÃÇÕ´Ï´Ù.
ExtendedRequest ÀÌ ÀÎÅÍÆäÀ̽º´Â ¡¸RFC 2251¡¹À¸·Î Á¤Àǵǰí ÀÖ´Â LDAPv3 È®Àå Á¶ÀÛÀÇ ¿ä±¸¸¦ ³ªÅ¸³À´Ï´Ù.
ExtendedResponse ÀÌ ÀÎÅÍÆäÀ̽º´Â ¡¸RFC 2251¡¹À¸·Î Á¤Àǵǰí ÀÖ´Â LDAP È®Àå Á¶ÀÛÀÇ ÀÀ´äÀ» ³ªÅ¸³À´Ï´Ù.
HasControls ÀÌ ÀÎÅÍÆäÀ̽º´Â ¿ÀºêÁ§Æ®°¡ NamingEnumerations ·Î µ¹·ÁÁÖ¾îÁú ¶§, ÄÁÆ®·ÑÀ» µ¹·ÁÁִµ¥ »ç¿ëµË´Ï´Ù.
LdapContext ÀÌ ÀÎÅÍÆäÀ̽º´Â LDAPv3 ½ºÅ¸ÀÏÀÇ ÄÁÆ®·ÑÀ» °¡Áö´Â Á¶ÀÛ°ú LDAPv3 ½ºÅ¸ÀÏÀÇ È®Àå Á¶ÀÛÀ» ½ÇÇàÇÒ ¼ö ÀÖ´Â ¹®¸ÆÀ» ³ªÅ¸³À´Ï´Ù.
UnsolicitedNotification ÀÌ ÀÎÅÍÆäÀ̽º´Â ¡¸RFC 2251¡¹À¸·Î Á¤ÀÇµÈ ºñ¿äû ÅëÁö¸¦ ³ªÅ¸³À´Ï´Ù.
UnsolicitedNotificationListener ÀÌ ÀÎÅÍÆäÀ̽º´Â UnsolicitedNotificationEvent ¸¦ ó¸®Çϱâ À§ÇÑÀÇ °ÍÀÔ´Ï´Ù.
 

Ŭ·¡½ºÀÇ °³¿ä
ControlFactory ÀÌ Ãß»ó Ŭ·¡½º´Â LDAPv3 ÄÁÆ®·ÑÀÇ ÀÛ¼º¿¡ »ç¿ëÇÏ´Â ÆÑÅ丮¸¦ Ç¥½ÃÇÕ´Ï´Ù.
InitialLdapContext ÀÌ Å¬·¡½º´Â LDAPv3 ½ºÅ¸ÀÏÀÇ È®Àå Á¶ÀÛ ¹× È®Àå ÄÁÆ®·ÑÀ» ½ÇÇàÇϱâ À§ÇÑ °³½Ã ¹®¸ÆÀÔ´Ï´Ù.
StartTlsRequest ÀÌ Å¬·¡½º´Â Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security ¿¡ Á¤Àǵǰí ÀÖ´Â LDAPv3 ÀÇ StartTLS È®Àå ¿ä±¸¸¦ ±¸ÇöÇÕ´Ï´Ù.
StartTlsResponse ÀÌ Å¬·¡½º´Â Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security ¿¡ Á¤Àǵǰí ÀÖ´Â LDAPv3 ÀÇ StartTLS È®Àå ÀÀ´äÀ» ±¸ÇöÇÕ´Ï´Ù.
UnsolicitedNotificationEvent ÀÌ Å¬·¡½º´Â LDAP ¼­¹ö·ÎºÎÅÍ ¼Û½ÅµÈ ºñ¿äû ÅëÁö¿¡ ÀÀÇØ ¹æ¾Æ¼è µÈ À̺¥Æ®¸¦ ³ªÅ¸³À´Ï´Ù.
 

¿¹¿ÜÀÇ °³¿ä
LdapReferralException ÀÌ abstract Ŭ·¡½º´Â LDAP ÂüÁ¶ ¿¹¿Ü¸¦ ³ªÅ¸³»±â À§Çؼ­(¶§¹®¿¡) »ç¿ëµË´Ï´Ù.
 

ÆÐŰÁö javax.naming.ldap ÀÇ ¼³¸í

LDAPv3 ÀÇ È®Àå Á¶ÀÛ°ú ÄÁÆ®·ÑÀ» ¼­Æ÷Æ®ÇÕ´Ï´Ù.

ÀÌ ÆÐŰÁö´Â Java Naming and Directory InterfaceTM (JNDI)ÀÇ µð·ºÅ丮 Á¶ÀÛÀ» È®ÀåÇÕ´Ï´Ù. JNDI  ´Â Java ÇÁ·Î±×·¥ ¾ð¾î·Î ÀÛ¼ºµÈ ¾îÇø®ÄÉÀ̼ǿ¡ ³×ÀÌ¹Ö ±â´É ¹× µð·ºÅ丮 ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù. JNDI ´Â ƯÁ¤ÀÇ ³×ÀÌ¹Ö ¶Ç´Â µð·ºÅ丮 ¼­ºñ½º ±¸Çö°ú´Â µ¶¸³ÇØ ¼³°èµÇ°í ÀÖ½À´Ï´Ù. ÀÌ ¶§¹®¿¡, »õ·Î¿î ¼­ºñ½º ¹× ¹ú½á ¹èÄ¡µÇ°í ÀÖ´Â ¿©·¯°¡Áö ¼­ºñ½º¿¡, °øÅëÀÇ ¹æ¹ýÀ¸·Î ¾×¼¼½º ÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÀÌ ÆÐŰÁö´Â ¡¸RFC 2251¡¹À¸·Î Á¤ÀÇµÈ LDAPv3 ÀÇ È®Àå Á¶ÀÛ°ú ÄÁÆ®·ÑÀ» ó¸®ÇÏ´Â ¾îÇø®ÄÉÀÌ¼Ç ¹× ¼­ºñ½º ÇÁ·Î¹ÙÀÌ´õÀü¿ëÀÇ °ÍÀÔ´Ï´Ù. ÀÌ ÆÐŰÁöÀÇ ÄÚ¾î ÀÎÅÍÆäÀ̽º´Â LdapContext ·Î, À̰ÍÀº È®Àå Á¶ÀÛ ½ÇÇà ¹× ÄÁÆ®·Ñ ó¸®ÀÇ ¹®¸ÆÀÇ ¸Þ¼Òµå¸¦ Á¤ÀÇÇÕ´Ï´Ù.

È®Àå Á¶ÀÛ

ÀÌ ÆÐŰÁö´Â È®Àå Á¶ÀÛÀÇ Àμö¸¦ ³ªÅ¸³»´Â ExtendedRequest ÀÎÅÍÆäÀ̽º ¹× È®Àå Á¶ÀÛÀÇ °á°ú¸¦ ³ªÅ¸³»´Â ExtendedResponse ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÕ´Ï´Ù. È®Àå ÀÀ´äÀº Ç×»ó È®Àå ¿ä±¸¿Í Æä¾î°¡ µË´Ï´Ù¸¸, È®Àå ¿ä±¸´Â ¹Ýµå½Ã È®Àå ÀÀ´ä°ú Æä¾î°¡ µÉ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. Áï, ´ëÀÀÇÏ´Â È®Àå ÀÀ´äÀÌ ¾ø´Â È®Àå ¿ä±¸¸¦ °¡Áú ¼ö ÀÖ´Ù°í ÇÏ´Â °ÍÀÔ´Ï´Ù.

¾îÇø®ÄÉÀ̼ÇÀº Åë»ó, ÀÌ·¯ÇÑ ÀÎÅÍÆäÀ̽º¸¦ Á÷Á¢Àº ó¸®ÇÏÁö ¾Ê½À´Ï´Ù. ´ë½Å¿¡, ÀÌ·¯ÇÑ ÀÎÅÍÆäÀ̽º¸¦±¸ÇöÇϰí ÀÖ´ÂŬ·¡½º¸¦ ó¸®ÇÕ´Ï´Ù. ¾îÇø®ÄÉÀ̼ÇÀº ÀÌ·¯ÇÑ Å¬·¡½º¸¦, IETF ¿¡ ÀÇÇØ Ç¥ÁØÈ­ µÈ È®Àå Á¶ÀÛÀ¸·Î¼­ ÃëµæÇϵ簡, ȤÀº º¥´õ °íÀ¯ÀÇ È®Àå Á¶ÀÛÀÇ µð·ºÅ丮 º¥´õ·ÎºÎÅÍ ÃëµæÇÕ´Ï´Ù. ¿ä±¸ Ŭ·¡½º¿¡´Â ÇüÅ ÇÁ·ÎÅØ¼ÇµÈ À¯Àú°¡ »ç¿ëÇϱ⠽¬¿î ¹æ¹ýÀ¸·Î Àμö¸¦ ¹Þ¾ÆµéÀÌ´Â constructor ÀÌ ÇÊ¿äÇØ, ÀÀ´ä Ŭ·¡½º¿¡´Â ÇüÅ ÇÁ·ÎÅØ¼ÇµÈ À¯Àú°¡ »ç¿ëÇϱ⠽¬¿î ¹æ¹ýÀ¸·Î ÀÀ´äÀÇ µ¥ÀÌÅ͸¦ ÃëµæÇϱâ À§ÇÑ ¾×¼¼½º ¸Þ¼Òµå°¡ ÇÊ¿äÇÕ´Ï´Ù. ³»ºÎÀûÀ¸·Î´Â ¿ä±¸ Ŭ·¡½º ¹× ÀÀ´ä Ŭ·¡½º´Â BER Ä¡ÀÇ encode ¹× º¹È£È­(decode)¸¦ ó¸®ÇÕ´Ï´Ù.

¿¹¸¦ µé¾î, LDAP ¼­¹ö°¡ ¡¸½Ã°£ Ãëµæ¡¹ÀÇ È®Àå Á¶ÀÛÀ» ¼­Æ÷Æ®Çϰí ÀÖ´Â °æ¿ì, LDAP ¼­¹ö´Â ¾îÇø®ÄÉÀ̼ÇÀÌ ÀÌ ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖµµ·Ï,GetTimeRequest ³ª GetTimeResponse µîÀÇ Å¬·¡½º¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ¾îÇø®ÄÉÀ̼ÇÀº ÀÌ·¯ÇÑ ±â´ÉÀ» ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÕ´Ï´Ù.

GetTimeResponse resp =
    (GetTimeResponse) ectx.extendedOperation(new GetTimeRequest());
long time = resp.getTime();

GetTimeRequest ¹× GetTimeResponse Ŭ·¡½º´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù.

public class GetTimeRequest implements ExtendedRequest {
    // User-friendly constructor 
    public GetTimeRequest() {
    };

    // Methods used by service providers
    public String getID() {
        return GETTIME_REQ_OID;
    }
    public byte[] getEncodedValue() {
        return null;  // no value needed for get time request
    }
    public ExtendedResponse createExtendedResponse(
        String id, byte[] berValue, int offset, int length) throws NamingException {
        return new GetTimeResponse(id, berValue, offset, length);
    }
}
public class GetTimeResponse() implements ExtendedResponse {
    long time;
    // called by GetTimeRequest.createExtendedResponse()
    public GetTimeResponse(String id, byte[] berValue, int offset, int length) 
        throws NamingException {
        // check validity of id
        long time =  ... // decode berValue to get time
    }

    // Type-safe and User-friendly methods
    public java.util.Date getDate() { return new java.util.Date(time); }
    public long getTime() { return time; }

    // Low level methods
    public byte[] getEncodedValue() {
        return // berValue saved;
    }
    public String getID() {
        return GETTIME_RESP_OID;
    }
}

ÄÁÆ®·Ñ

ÀÌ ÆÐŰÁö´Â LDAPv3 ÄÁÆ®·ÑÀ» ³ªÅ¸³»´Â Control ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÕ´Ï´Ù. ÀÌ ÀÎÅÍÆäÀ̽º´Â LDAP ¼­¹ö¿¡ ¼Û½ÅµÇ´Â ÄÁÆ®·Ñ (¿ä±¸ ÄÁÆ®·Ñ)ÀÌ µÇµç°¡, ȤÀº LDAP ¼­¹ö¿¡ ÀÇÇØ µ¹·ÁÁÖ¾îÁö´Â ÄÁÆ®·Ñ (ÀÀ´ä ÄÁÆ®·Ñ)ÀÌ µË´Ï´Ù. È®Àå ¿ä±¸³ª È®Àå ÀÀ´ä°ú ´Þ¸®, ¹Ýµå½Ã ¿ä±¸ ÄÁÆ®·Ñ°ú ÀÀ´ä ÄÁÆ®·ÑÀÇ »çÀÌ¿¡ Æä¾î¸¦ © ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ¿ä±¸ ÄÁÆ®·ÑÀ» ¼Û½ÅÇØ ÀÀ´ä ÄÁÆ®·ÑÀÌ µ¹¾Æ¿ÀÁö ¾Ê°Ô Çϰųª ȤÀº ¿ä±¸ ÄÁÆ®·ÑÀ» ¼Û½ÅÇÏÁö ¾Ê°í ÀÀ´ä ÄÁÆ®·ÑÀ» ¼ö½ÅÇϰųª ÇÒ ¼ö ÀÖ½À´Ï´Ù.

¾îÇø®ÄÉÀ̼ÇÀº Åë»ó, ÀÌ ÀÎÅÍÆäÀ̽º¸¦ Á÷Á¢Àº ó¸®ÇÏÁö ¾Ê½À´Ï´Ù. ´ë½Å¿¡, ÀÌ ÀÎÅÍÆäÀ̽º¸¦±¸ÇöÇϰí ÀÖ´ÂŬ·¡½º¸¦ ó¸®ÇÕ´Ï´Ù. ¾îÇø®ÄÉÀ̼ÇÀº ÄÁÆ®·Ñ Ŭ·¡½º¸¦, Ç¥ÁØÈ­ µÈ ÄÁÆ®·ÑÀÇ repertoireÀÇ ÀϺημ­ IETF ·ÎºÎÅÍ ÃëµæÇϵ簡, ȤÀº º¥´õ °íÀ¯ ÄÁÆ®·ÑÀÇ µð·ºÅ丮 º¥´õ·ÎºÎÅÍ ÃëµæÇÕ´Ï´Ù. ¿ä±¸ ÄÁÆ®·Ñ Ŭ·¡½º¿¡´Â ÇüÅ ÇÁ·ÎÅØ¼ÇµÈ À¯Àú°¡ »ç¿ëÇϱ⠽¬¿î ¹æ¹ýÀ¸·Î Àμö¸¦ ¹Þ´Â constructor ÀÌ ÇÊ¿äÇØ, ÀÀ´ä ÄÁÆ®·Ñ Ŭ·¡½º¿¡´Â ÇüÅ ÇÁ·ÎÅØ¼ÇµÈ À¯Àú°¡ »ç¿ëÇϱ⠽¬¿î ¹æ¹ýÀ¸·Î ÀÀ´äÀÇ µ¥ÀÌÅ͸¦ ÃëµæÇϱâ À§ÇÑ ¾×¼¼½º ¸Þ¼Òµå°¡ ÇÊ¿äÇÕ´Ï´Ù. ³»ºÎÀûÀ¸·Î´Â ¿ä±¸ ÄÁÆ®·Ñ Ŭ·¡½º ¹× ÀÀ´ä ÄÁÆ®·Ñ Ŭ·¡½º´Â BER Ä¡ÀÇ encode ¹× º¹È£È­(decode)¸¦ Ãë±ÞÇÕ´Ï´Ù.

¿¹¸¦ µé¾î, LDAP ¼­¹ö°¡ ¡¸¼ÒÆ®¡¹ÀÇ ¿ä±¸ ÄÁÆ®·ÑÀ» ¼­Æ÷Æ®Çϰí ÀÖ´Â °æ¿ì, ÀÌ ÄÁÆ®·ÑÀº °Ë»ö ¿ä±¸¿Í ÇÔ²² ¼Û½ÅµÇ¾úÀ» °æ¿ì, °Ë»ö °á°ú¸¦ ƯÁ¤ÀÇ ¼Ó¼ºÀ¸·Î ¼ø¼­ ºÙ¿© µ¹·ÁÁÖµµ·Ï(µíÀÌ) ¼­¹ö¿¡ ¿ä±¸ÇÕ´Ï´Ù. ÀÌ ÄÁÆ®·ÑÀº ¾îÇø®ÄÉÀ̼ÇÀÌ ÀÌ ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖµµ·Ï,SortControl Ŭ·¡½º¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ¾îÇø®ÄÉÀ̼ÇÀº ÀÌ Å¬·¡½º¸¦ ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÕ´Ï´Ù.

Control[] reqCtls = new Control[] {new SortControl("age")};
ectx.setRequestControls(reqCtls);
NamingEnumeration enum = ectx.search(...);
SortControl Ŭ·¡½º´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù.
public class SortControl implements Control {
    // User-friendly constructor 
    public SortControl(String attrID) {
        // encode attrID
    };

    // Methods used by service providers
    public String getID() {
        return SORT_OID;
    }
    public byte[] getEncodedValue() {
        return // encoded attrID
    }
    ...
}

¼­ºñ½º ÇÁ·Î¹ÙÀÌ´õ°¡ ÀÀ´ä ÄÁÆ®·ÑÀ» ¼ö½ÅÇϸé(ÀÚ), ÀÌ ÇÁ·Î¹ÙÀÌ´õ´Â ControlFactory Ŭ·¡½º¸¦ »ç¿ëÇØ,Control ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇϴ ƯÁ¤ÀÇ Å¬·¡½º¸¦ »ý¼ºÇÕ´Ï´Ù.

LDAP ¼­¹ö´Â LDAP Á¶ÀÛ°ú ÇÔ²² ÀÀ´ä ÄÁÆ®·ÑÀ» ´ä½ÅÇÒ ¼ö ÀÖ¾î ¶Ç ¸®½ºÆ®³ª °Ë»ö Á¶À۵ ÀÇÇØ µ¹·ÁÁÖ¾îÁø ¿­°Å °á°ú¿Í ÇÔ²² ´äÀåÇÒ ¼ö ÀÖ°Ú½À´Ï´Ù. LdapContext ´Â LDAP Á¶ÀÛ°ú ÇÔ²² ¼Û½ÅµÈ ÀÀ´ä ÄÁÆ®·ÑÀ» ÃëµæÇÏ´Â ¸Þ¼Òµå (getResponseControls())¸¦ Á¦°øÇØ,HasControls ´Â ¿­°Å °á°ú¿¡ °ü·ÃÇÑ ÀÀ´ä ÄÁÆ®·ÑÀ» ÃëµæÇϴµ¥ »ç¿ëµË´Ï´Ù.

¿¹¸¦ µé¾î, º¯°æ ¿Ï·á¿¡ µû¶ó LDAP ¼­¹ö°¡ ¡¸ID º¯°æ¡¹ÄÁÆ®·ÑÀ» ´äÀåÇÏ´Â °æ¿ì, ¼­¹ö´Â ¾îÇø®ÄÉÀ̼ÇÀÌ ÀÌ ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ°Ô ChangeIDControl Ŭ·¡½º¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ¾îÇø®ÄÉÀ̼ÇÀº °»½ÅÀ» ½Ç½ÃÇØ, °è¼ÓµÇ¾î ID º¯°æÀ» ÃëµæÇÏ·Á°í ÇÕ´Ï´Ù.

// Perform update
Context ctx = ectx.createSubsubcontext("cn=newobj");

// Get response controls
Control[] respCtls = ectx.getResponseControls();
if (respCtls ! = null) {
    // Find the one we want
    for (int i = 0; i < respCtls; i++) {
        if(respCtls[i] instanceof ChangeIDControl) {
	    ChangeIDControl cctl = (ChangeIDControl) respCtls[i];
	    System.out.println(cctl.getChangeID());
        }
    }
}
º¥´õ´Â ´ÙÀ½°ú °°Àº ChangeIDControl Ŭ·¡½º ¹× VendorXControlFactory Ŭ·¡½º¸¦ ÁöÁ¤ÇÕ´Ï´Ù. VendorXControlFactory ´Â ¼­ºñ½º ÇÁ·Î¹ÙÀÌ´õ°¡ LDAP ¼­¹ö·ÎºÎÅÍ ÀÀ´ä ÄÁÆ®·ÑÀ» ¼ö½ÅÇßÀ» ¶§¿¡ ±× ÇÁ·Î¹ÙÀÌ´õ°¡ »ç¿ëÇÕ´Ï´Ù.
public class ChangeIDControl implements Control {
    long id;

    // Constructor used by ControlFactory
    public ChangeIDControl(String OID, byte[] berVal) throws NamingException {
        // check validity of OID
        id = // extract change ID from berVal
    };

    // Type-safe and User-friendly method
    public long getChangeID() {
        return id;
    }

    // Low-level methods
    public String getID() {
        return CHANGEID_OID;
    }
    public byte[] getEncodedValue() {
        return // original berVal
    }
    ...
}
public class VendorXControlFactory extends ControlFactory {
    public VendorXControlFactory () {
    }

    public Control getControlInstance(Control orig) throws NamingException {
        if (isOneOfMyControls(orig.getID())) {
	    ... 

	    // determine which of ours it is and call its constructor
	    return (new ChangeIDControl(orig.getID(), orig.getEncodedValue()));
	}
        return null;  // not one of ours
    }
}

ÆÐŰÁöÀÇ »ç¾ç

¡¸Java technology web site¡¹¿¡¼­´Â ´ÙÀ½ÀÇ ¹®¼­¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ½À´Ï´Ù.

µµÀÔµÈ ¹öÁ¯:
1.3

JavaTM 2
Platform
Std.  Ed.  v1. 4.0

¹ö±×ÀÇ º¸°í¿Í ±â´ÉÀÇ ¸®Äù½ºÆ®
ÀÌ¿ÜÀÇ API ·¹ÆÛ·±½º ¹× °³¹ßÀÚ¿ë ¹®¼­¿¡ ´ëÇØ¼­´Â Java 2 SDK SE °³¹ßÀÚ¿ë ¹®¼­¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä. °³¹ßÀÚÀü¿ëÀÇ »ó¼¼ÇÑ ÇØ¼³, °³³äÀÇ °³¿ä, ¿ë¾îÀÇ Á¤ÀÇ, ¹ö±×ÀÇ È¸ÇÇÃ¥, ¹× ÄÚµå ½Ç·Ê°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.

Java, Java 2 D, ¹× JDBC ´Â ¹Ì±¹ ¹× ±× ¿ÜÀÇ ³ª¶ó¿¡ À־ÀÇ ¹Ì±¹ Sun Microsystems, Inc. ÀÇ »óÇ¥ ȤÀº µî·Ï»óÇ¥ÀÔ´Ï´Ù.
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.