public class RMIClassLoader extends Object
RMIClassLoaderã¯ãRMIã䜿çšããŠåçã«ã¯ã©ã¹ãããŒãããããã®staticã¡ãœããããæ§æãããŸãã ãã®ã¯ã©ã¹ã»ããŒããŒã«ã¯ããããã¯ãŒã¯ã®å Žæ(1ã€ä»¥äžã®URL)ããã¯ã©ã¹ãããŒãããã¡ãœããããæ¢åã®ã¯ã©ã¹ãæ ŒçŽãããŠããå ŽæãååŸããã¡ãœãããçµã¿èŸŒãŸããŠããŸãã ãããã®ã¡ãœããã¯ããªã¢ãŒãã»ã¡ãœããåŒåºãã®åŒæ°ãæ»ãå€ã«å«ãŸããã¯ã©ã¹ãæŽååããã³éæŽååãããšãã«ãRMIã©ã³ã¿ã€ã ã«ãã£ãŠäœ¿çšãããŸãããŸãããããã®ã¡ãœãããã¢ããªã±ãŒã·ã§ã³ããçŽæ¥åŒã³åºããŠãã¯ã©ã¹ãåçã«ããŒãããããšãã§ããŸãã
次ã®staticã¡ãœããã®å®è£ ã¯ã
loadClass(URL,String)
loadClass(String,String)
loadClass(String,String,ClassLoader)
loadProxyClass(String,String[],ClassLoader)
getClassLoader(String)
getClassAnnotation(Class)
RMIClassLoaderSpiã®ã€ã³ã¹ã¿ã³ã¹ã«ãã£ãŠæäŸãããŸãã ãã®ã¡ãœããã®ãããããåŒã³åºããããšããã®åäœããµãŒãã¹ã»ãããã€ãã»ã€ã³ã¹ã¿ã³ã¹ã®å¯Ÿå¿ããã¡ãœããã«å§è²ãããŸãã åã¡ãœããããããã€ãã»ã€ã³ã¹ã¿ã³ã¹ã«å§è²ããæ¹æ³ã®è©³çްã¯ãåã¡ãœããã®ããã¥ã¢ã«ãåç
§ããŠãã ããã
ãµãŒãã¹ã»ãããã€ãã»ã€ã³ã¹ã¿ã³ã¹ã¯æ¬¡ã®ããã«éžæãããŸãã
java.rmi.server.RMIClassLoaderSpiãå®çŸ©ãããŠããå Žåããã®å€ã"default"ã®ãšãã¯ãgetDefaultProviderInstance()ã¡ãœããåŒåºãã®æ»ãå€ã«æå®ãããŠãããããã€ãã»ã€ã³ã¹ã¿ã³ã¹ãéžæãããŸãããã®ã·ã¹ãã ã»ããããã£ã"default"以å€ã®å€ã®ãšãã¯ãã·ã¹ãã ã»ã¯ã©ã¹ã»ããŒããŒ(ClassLoader.getSystemClassLoader()ãåç
§)ãã·ã¹ãã ã»ããããã£ã«æå®ãããŠããã¯ã©ã¹ãããŒãã§ãããã®ã¯ã©ã¹ãRMIClassLoaderSpiã«å²ãåœãŠãããšãã§ããåŒæ°ã®ãªãpublicã³ã³ã¹ãã©ã¯ã¿ãæã€å Žåããããã€ãã»ã€ã³ã¹ã¿ã³ã¹äœææã«ãã®ã³ã³ã¹ãã©ã¯ã¿ãåŒã³åºãããŸãã ãã®ã·ã¹ãã ã»ããããã£ãå®çŸ©ãããŠããå Žåã§ãããããã®æ¡ä»¶ãæºããããŠããªãå Žåã¯ãRMIClassLoaderã®äœ¿çšã詊ã¿ãã³ãŒãã«å¯ŸããŠããããã€ãã»ã€ã³ã¹ã¿ã³ã¹ã®ååŸã«å€±æããããšã瀺ããç¹å®ã§ããªãErrorãã¹ããŒãããŸãã
META-INF/services/java.rmi.server.RMIClassLoaderSpiãšãããªãœãŒã¹ãã·ã¹ãã ã»ã¯ã©ã¹ã»ããŒããŒããèŠããå Žåããã®ãªãœãŒã¹ã®å
容ã¯ãããã€ãæ§æãã¡ã€ã«ãšããŠè§£éããããã®ãã¡ã€ã«ã®æåã«æå®ãããŠããã¯ã©ã¹åããããã€ãã»ã¯ã©ã¹åãšããŠäœ¿çšãããŸãã ã·ã¹ãã ã»ã¯ã©ã¹ã»ããŒããŒããã®ååãæã€ã¯ã©ã¹ãããŒãã§ãããã®ã¯ã©ã¹ãRMIClassLoaderSpiã«å²ãåœãŠãããšãã§ããåŒæ°ã®ãªãpublicã³ã³ã¹ãã©ã¯ã¿ãæã€å Žåã¯ããããã€ãã»ã€ã³ã¹ã¿ã³ã¹äœææã«ãã®ã³ã³ã¹ãã©ã¯ã¿ãåŒã³åºãããŸãã ãã®ãªãœãŒã¹ãèŠã€ãã£ãŠããèšè¿°ãããŠããããã«ãããã€ããã€ã³ã¹ã¿ã³ã¹åã§ããªãå Žåã¯ãRMIClassLoaderã®äœ¿çšã詊ã¿ãã³ãŒãã«å¯ŸããŠããããã€ãã»ã€ã³ã¹ã¿ã³ã¹ã®ååŸã«å€±æããããšã瀺ããäžæãªErrorãã¹ããŒãããŸãã
getDefaultProviderInstance()ã¡ãœããåŒåºãã®æ»ãå€ã«æå®ãããŠãããããã€ãã»ã€ã³ã¹ã¿ã³ã¹ãéžæãããŸãã
RMIClassLoaderSpi| 修食åãšå | ã¡ãœãã | 説æ |
|---|---|---|
static String |
getClassAnnotation(Class<?> cl) |
ã¯ã©ã¹å®çŸ©ã®äœçœ®ãç€ºãæ³šéæååãè¿ããŸããRMIã¯ããã䜿çšããŠãæå®ãããã¯ã©ã¹ã®ãªããžã§ã¯ãã®æŽååãè¡ãéã«ãã¯ã©ã¹èšè¿°åã«æ³šéãå ããŸãã
|
static ClassLoader |
getClassLoader(String codebase) |
æå®ãããã³ãŒãã»ããŒã¹URLãã¹ããã¯ã©ã¹ãããŒãããã¯ã©ã¹ã»ããŒããŒãè¿ããŸãã
|
static RMIClassLoaderSpi |
getDefaultProviderInstance() |
ãµãŒãã¹ã»ãããã€ãã»ã€ã³ã¿ãã§ãŒã¹
RMIClassLoaderSpiã®ããã©ã«ãã»ãããã€ãã®æ£èŠã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãã |
static Object |
getSecurityContext(ClassLoader loader) |
éæšå¥šã
代æ¿ã¯ãããŸããã Java 2ãã©ãããã©ãŒã v1.2以éã®RMIã§ã¯ãã¯ã©ã¹ã»ããŒããŒã®ã»ãã¥ãªãã£ã»ã³ã³ããã¹ããååŸããããã«ãã®ã¡ãœããã䜿çšããŸããã
|
static Class<?> |
loadClass(String name) |
éæšå¥šã
loadClass(String,String)ã¡ãœããã«çœ®ãæããããŠããŸã |
static Class<?> |
loadClass(String codebase, String name) |
æå®ãããã³ãŒãã»ããŒã¹URLãã¹ããã¯ã©ã¹ãããŒãããŸãã
|
static Class<?> |
loadClass(String codebase, String name, ClassLoader defaultLoader) |
æå®ãããã³ãŒãã»ããŒã¹URLãã¹ããã¯ã©ã¹ãããŒãããŸããæå®ãããããŒããŒã䜿çšããããšãã§ããŸãã
|
static Class<?> |
loadClass(URL codebase, String name) |
æå®ãããã³ãŒãã»ããŒã¹URLããã¯ã©ã¹ãããŒãããŸãã
|
static Class<?> |
loadProxyClass(String codebase, String[] interfaces, ClassLoader defaultLoader) |
æå®ãããååãæã€ã€ã³ã¿ãã§ãŒã¹çŸ€ãå®è£
ããåçãããã·ã»ã¯ã©ã¹(
Proxyãåç
§)ããæå®ãããã³ãŒãã»ããŒã¹URLãã¹ããããŒãããŸãã |
@Deprecated public static Class<?> loadClass(String name) throws MalformedURLException, ClassNotFoundException
loadClass(String,String)ã¡ãœããã«çœ®ãæããããŸãããnameãååã«æã€ã¯ã©ã¹ãããŒãããŸãã
ãã®ã¡ãœããã¯loadClass(String,String)ã«åŠçãå§è²ããŸãããã®ãšããnullãæåã®åŒæ°ãšããŠãnameã2ã€ãã®åŒæ°ãšããŠæž¡ãããŸãã
name - ããŒã察象ã¯ã©ã¹ã®ååClassãªããžã§ã¯ãMalformedURLException - ã¯ã©ã¹ã®ããŒãæã«äœ¿çšããããããã€ãåºæã®URLãç¡å¹ã§ããå ŽåClassNotFoundException - ã¯ã©ã¹ã®å®çŸ©ãã³ãŒãã»ããŒã¹ã®å Žæã«ãªãã£ãå ŽåloadClass(String,String)public static Class<?> loadClass(URL codebase, String name) throws MalformedURLException, ClassNotFoundException
codebaseãnullã®å Žåããã®ã¡ãœããã®åäœã¯loadClass(String,String)ã«nullã®codebaseãšæå®ã®ã¯ã©ã¹åãæå®ããå Žåãšåãã«ãªããŸãã
ãã®ã¡ãœããã¯ããããã€ãã»ã€ã³ã¹ã¿ã³ã¹ã®RMIClassLoaderSpi.loadClass(String,String,ClassLoader)ã¡ãœããã«åŠçãå§è²ããŸãããã®ãšããæå®ãããURLã§URL.toString()ãåŒã³åºããçµæ(codebaseãnullã®å Žåã¯null)ãæåã®åŒæ°ãšããŠãnameã2ã€ãã®åŒæ°ãšããŠãnullã3ã€ãã®åŒæ°ãšããŠæž¡ãããŸãã
codebase - ã¯ã©ã¹ã®ããŒãå
ã®URLããŸãã¯nullname - ããŒã察象ã¯ã©ã¹ã®ååClassãªããžã§ã¯ãMalformedURLException - codebaseãnullã§ããã€ã¯ã©ã¹ã®ããŒãæã«äœ¿çšããããããã€ãåºæã®URLãç¡å¹ã§ããå ŽåClassNotFoundException - ã¯ã©ã¹ã®å®çŸ©ãæå®ãããURLã«ãªãã£ãå Žåpublic static Class<?> loadClass(String codebase, String name) throws MalformedURLException, ClassNotFoundException
ãã®ã¡ãœããã¯ããããã€ãã»ã€ã³ã¹ã¿ã³ã¹ã®RMIClassLoaderSpi.loadClass(String,String,ClassLoader)ã¡ãœããã«åŠçãå§è²ããŸãããã®ãšããcodebaseãæåã®åŒæ°ãšããŠãnameã2ã€ãã®åŒæ°ãšããŠãnullã3ã€ãã®åŒæ°ãšããŠæž¡ãããŸãã
codebase - ã¯ã©ã¹ã®ããŒãå
ã®URLã®ãªã¹ã(åºåãæåã¯ã¹ããŒã¹)ããŸãã¯nullname - ããŒã察象ã¯ã©ã¹ã®ååClassãªããžã§ã¯ãMalformedURLException - codebaseãnull以å€ã§ãã€ç¡å¹ãªURLãå«ãã§ããå ŽåããŸãã¯codebaseãnullã§ãã€ã¯ã©ã¹ã®ããŒãæã«äœ¿çšããããããã€ãåºæURLãç¡å¹ã§ããå ŽåClassNotFoundException - ã¯ã©ã¹ã®å®çŸ©ãæå®ãããå Žæã«ãªãã£ãå Žåpublic static Class<?> loadClass(String codebase, String name, ClassLoader defaultLoader) throws MalformedURLException, ClassNotFoundException
defaultLoaderã䜿çšããŠæå®ãããã¯ã©ã¹ã®è§£æ±ºã詊ã¿ãããšã§ãã³ãŒãã»ããŒã¹URLãã¹ããã®ã¯ã©ã¹ã®è§£æ±ºã詊ã¿ãŸãã
ãã®ã¡ãœããã¯ããããã€ãã»ã€ã³ã¹ã¿ã³ã¹ã®RMIClassLoaderSpi.loadClass(String,String,ClassLoader)ã¡ãœããã«åŠçãå§è²ããŸãããã®ãšããcodebaseãæåã®åŒæ°ãšããŠãnameã2ã€ãã®åŒæ°ãšããŠãdefaultLoaderã3ã€ãã®åŒæ°ãšããŠæž¡ãããŸãã
codebase - ã¯ã©ã¹ã®ããŒãå
ã®URLã®ãªã¹ã(åºåãæåã¯ã¹ããŒã¹)ããŸãã¯nullname - ããŒã察象ã¯ã©ã¹ã®åådefaultLoader - ç¶æ³ã«å¿ããŠäœ¿çšãã远å ã¯ã©ã¹ã»ããŒããŒããŸãã¯nullClassãªããžã§ã¯ãMalformedURLException - codebaseãnull以å€ã§ãã€ç¡å¹ãªURLãå«ãã§ããå ŽåããŸãã¯codebaseãnullã§ãã€ã¯ã©ã¹ã®ããŒãæã«äœ¿çšããããããã€ãåºæURLãç¡å¹ã§ããå ŽåClassNotFoundException - ã¯ã©ã¹ã®å®çŸ©ãæå®ãããå Žæã«ãªãã£ãå Žåpublic static Class<?> loadProxyClass(String codebase, String[] interfaces, ClassLoader defaultLoader) throws ClassNotFoundException, MalformedURLException
Proxyãåç
§)ããæå®ãããã³ãŒãã»ããŒã¹URLãã¹ããããŒãããŸãã
ãããã®ã€ã³ã¿ãã§ãŒã¹ã®è§£æ±ºã¯ãæå®ãããcodebaseã䜿çšããŠloadClass(String,String)ã¡ãœããçµç±ã§ããŒããããã¯ã©ã¹ãšåæ§ã®æ¹æ³ã§è¡ãããŸãã
ãã®ã¡ãœããã¯ããããã€ãã»ã€ã³ã¹ã¿ã³ã¹ã®RMIClassLoaderSpi.loadProxyClass(String,String[],ClassLoader)ã¡ãœããã«åŠçãå§è²ããŸãããã®ãšããcodebaseãæåã®åŒæ°ãšããŠãinterfacesã2ã€ãã®åŒæ°ãšããŠãdefaultLoaderã3ã€ãã®åŒæ°ãšããŠæž¡ãããŸãã
codebase - ã¯ã©ã¹ã®ããŒãå
ã®URLã®ãªã¹ã(åºåãæåã¯ã¹ããŒã¹)ããŸãã¯nullinterfaces - ãããã·ã»ã¯ã©ã¹ãå®è£
ããã€ã³ã¿ãã§ãŒã¹ã®åådefaultLoader - ç¶æ³ã«å¿ããŠäœ¿çšãã远å ã¯ã©ã¹ã»ããŒããŒããŸãã¯nullMalformedURLException - codebaseãnull以å€ã§ãã€ç¡å¹ãªURLãå«ãã§ããå ŽåããŸãã¯codebaseãnullã§ãã€ã¯ã©ã¹ã®ããŒãæã«äœ¿çšããããããã€ãåºæURLãç¡å¹ã§ããå ŽåClassNotFoundException - æå®ãããã€ã³ã¿ãã§ãŒã¹ã®å®çŸ©ã®ãããããæå®ãããå Žæã«èŠã€ãããªãå ŽåããŸãã¯åçãããã·ã»ã¯ã©ã¹ã®äœæã«å€±æããå Žå(Proxy.getProxyClass(ClassLoader,Class[])ããæå®ãããã€ã³ã¿ãã§ãŒã¹ã»ãªã¹ãã«å¯ŸããŠIllegalArgumentExceptionãã¹ããŒãããšããªã©)public static ClassLoader getClassLoader(String codebase) throws MalformedURLException, SecurityException
è¿ãããã¯ã©ã¹ã»ããŒããŒã¯ãloadClass(String,String)ã¡ãœãããåãcodebaseåŒæ°ãæå®ããŠã¯ã©ã¹ãããŒããããšãã«äœ¿çšããã¯ã©ã¹ã»ããŒããŒãšåãã§ãã
ãã®ã¡ãœããã¯ããããã€ãã»ã€ã³ã¹ã¿ã³ã¹ã®RMIClassLoaderSpi.getClassLoader(String)ã¡ãœããã«åŠçãå§è²ããŸãããã®ãšããcodebaseãåŒæ°ãšããŠæž¡ãããŸãã
ã»ãã¥ãªãã£ã»ãããŒãžã£ãååšããå Žåã¯ãRuntimePermission("getClassLoader")ã¢ã¯ã»ã¹æš©ã䜿çšããŠcheckPermissionã¡ãœãããåŒã³åºããããã®çµæSecurityExceptionã«ãªãããšããããŸãã ãã®ã¡ãœããã®ãããã€ãå®è£
ã¯ãåŒåºãåŽã³ã³ããã¹ããã³ãŒãã»ããŒã¹URLãã¹å
ã®ãã¹ãŠã®URLã«å¯Ÿããã¢ã¯ã»ã¹æš©ãæã£ãŠãããã©ããã«ã€ããŠãã»ãã¥ãªãã£ã»ãã§ãã¯ãè¡ãããšããããŸãã
codebase - è¿ãããã¯ã©ã¹ã»ããŒããŒãããŒãããã¯ã©ã¹ãæ ŒçŽãããŠããURLã®ãªã¹ã(åºåãæåã¯ã¹ããŒã¹)ããŸãã¯nullMalformedURLException - codebaseãnull以å€ã§ãã€ç¡å¹ãªURLãå«ãã§ããå ŽåããŸãã¯codebaseãnullã§ãã€ã¯ã©ã¹ã»ããŒããŒã®èå¥ã«äœ¿çšããããããã€ãåºæURLãç¡å¹ã§ããå ŽåSecurityException - ã»ãã¥ãªãã£ã»ãããŒãžã£ãååšãããšãã«ããã®checkPermissionã¡ãœããã倱æããå ŽåããŸãã¯ãåŒåºãåŽãã³ãŒãã»ããŒã¹URLãã¹å
ã®ãã¹ãŠã®URLã«æ¥ç¶ããã¢ã¯ã»ã¹æš©ãæã£ãŠããªãå Žåpublic static String getClassAnnotation(Class<?> cl)
ãã®ã¡ãœããã¯ããããã€ãã»ã€ã³ã¹ã¿ã³ã¹ã®RMIClassLoaderSpi.getClassAnnotation(Class)ã¡ãœããã«åŠçãå§è²ããŸãããã®ãšããclãåŒæ°ãšããŠæž¡ãããŸãã
cl - 泚éãååŸãã察象ã®ã¯ã©ã¹nullNullPointerException - clãnullã§ããå Žåpublic static RMIClassLoaderSpi getDefaultProviderInstance()
RMIClassLoaderSpiã®ããã©ã«ãã»ãããã€ãã®æ£èŠã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãã ã·ã¹ãã ã»ããããã£java.rmi.server.RMIClassLoaderSpiãå®çŸ©ãããŠããªãå Žåãæ¬¡ã«ç€ºãRMIClassLoaderã®staticã¡ãœããã¯ã
loadClass(URL,String)
loadClass(String,String)
loadClass(String,String,ClassLoader)
loadProxyClass(String,String[],ClassLoader)
getClassLoader(String)
getClassAnnotation(Class)
ã»ãã¥ãªãã£ã»ãããŒãžã£ãååšããå Žåã¯ãRuntimePermission("setFactory")ã¢ã¯ã»ã¹æš©ã䜿çšããŠcheckPermissionã¡ãœãããåŒã³åºããããã®çµæSecurityExceptionã«ãªãããšããããŸãã
ããã©ã«ãã®ãµãŒãã¹ã»ãããã€ãã»ã€ã³ã¹ã¿ã³ã¹ã¯RMIClassLoaderSpiãæ¬¡ã®ããã«å®è£
ããŸãã
getClassAnnotationã¡ãœããã¯ãæå®ãããã¯ã©ã¹å®çŸ©ã®ããŠã³ããŒãã«ãªã¢ãŒãåŽã䜿çšããã³ãŒãã»ããŒã¹URLãã¹ã衚ãStringãè¿ããŸãã è¿ãããæååã®åœ¢åŒã¯ã空çœã§åºåãããURLã®ãã¹ã§ãã è¿ãããã³ãŒãã»ããŒã¹ã®æååã¯ã次ã«ç€ºãããã«ãæå®ãããã¯ã©ã¹ã«å®çŸ©ãããŠããã¯ã©ã¹ã»ããŒããŒã«ãã£ãŠç°ãªããŸãã
å®çŸ©ãããŠããã¯ã©ã¹ã»ããŒããŒãã·ã¹ãã ã»ã¯ã©ã¹ã»ããŒããŒ(
ClassLoader.getSystemClassLoader()ãåç §)ãã·ã¹ãã ã»ã¯ã©ã¹ã»ããŒããŒã®èŠª(ã€ã³ã¹ããŒã«æžã¿ã®æ¡åŒµã¯ã©ã¹ã«äœ¿çšãããããŒããŒãªã©)ããŸãã¯ããŒãã¹ãã©ããã»ã¯ã©ã¹ã»ããŒããŒ(nullã§è¡šãããããšããã)ã®å Žåãjava.rmi.server.codebaseããããã£ã®å€(ãŸãã¯ä»¥åã«ãã£ãã·ã¥ãããå€ã®å¯èœæ§ããã)ãè¿ãããŸãããã®ããããã£ãèšå®ãããŠããªãå Žåã¯ãnullãè¿ãããŸããå®çŸ©ãããŠããã¯ã©ã¹ã»ããŒããŒã
URLClassLoaderã®ã€ã³ã¹ã¿ã³ã¹ã®å Žåããã®ããŒããŒã®getURLsã¡ãœããåŒã³åºãããè¿ããããå€éšåœ¢åŒã®URLã®ãªã¹ã(åºåãæåã¯ã¹ããŒã¹)ãè¿ãããŸããURLClassLoaderããã®ãããã€ãã«ãã£ãŠäœæããããã®loadClassãŸãã¯loadProxyClassã¡ãœããã䜿çšãããå Žåãé¢é£ããã³ãŒãã»ããŒã¹æååãååŸããããã®ã¢ã¯ã»ã¹æš©ã¯å¿ èŠãããŸãããURLClassLoaderã€ã³ã¹ã¿ã³ã¹ããã®ãããã€ã以å€ã«äœæãããã»ãã¥ãªãã£ã»ãããŒãžã£ãååšããå Žåã¯ãgetURLsã¡ãœããããURLãè¿ããããã³ã«ãopenConnection().getPermission()åŒåºãã«ãã£ãŠè¿ãããã¢ã¯ã»ã¹æš©ã䜿çšããŠã»ãã¥ãªãã£ã»ãããŒãžã£ã®checkPermissionã¡ãœãããåŒã³åºãããŸãããããã®åŒåºãã®ããããã§SecurityExceptionãŸãã¯IOExceptionãã¹ããŒãããå Žåãjava.rmi.server.codebaseããããã£ã®å€(ãŸãã¯ä»¥åã«ãã£ãã·ã¥ãããå€ã®å¯èœæ§ããã)ãè¿ãããŸãããã®ããããã£ãèšå®ãããŠããªãå Žåã¯ãnullãè¿ãããŸããå®çŸ©ãããŠããã¯ã©ã¹ã»ããŒããŒã
URLClassLoaderã®ã€ã³ã¹ã¿ã³ã¹ã§ã¯ãªãå Žåãjava.rmi.server.codebaseããããã£ã®å€(ãŸãã¯ä»¥åã«ãã£ãã·ã¥ãããå€ã®å¯èœæ§ããã)ãè¿ãããŸãããã®ããããã£ãèšå®ãããŠããªãå Žåã¯ãnullãè¿ãããŸãã
codebaseãšããååã®Stringãã©ã¡ãŒã¿(空çœã§åºåãããURLã®ãªã¹ã)ãåããæ¬¡ã«èª¬æããåã¡ãœããå®è£ ã«ã€ããŠãã¡ãœãããåŒã³åºããããã³ã«ç¹å®ã®ã³ãŒãããŒã¹ã»ããŒããŒãé¢é£ä»ããããŸããã³ãŒãããŒã¹ã»ããŒããŒã¯ãcodebaseåŒæ°ãšçŸåšã®ã¹ã¬ããã®ã³ã³ããã¹ãã»ã¯ã©ã¹ã»ããŒããŒ(Thread.getContextClassLoader()ãåç §)ãšãçµã¿åãããŠæ€çŽ¢ãããŸãã ã»ãã¥ãªãã£ã»ãããŒãžã£ãååšããå Žåããã®ãããã€ãã¯ãã¯ã©ã¹ã»ããŒããŒã»ã€ã³ã¹ã¿ã³ã¹ã®å éšè¡š(å°ãªããšãURLClassLoaderã®ã€ã³ã¹ã¿ã³ã¹ãå«ã)ãä¿æããŸãããã®è¡šã®ããŒã¯ã芪ã®ã¯ã©ã¹ã»ããŒããŒãšãã®ã³ãŒãã»ããŒã¹URLãã¹(URLã®é åºä»ããªã¹ã)ã®ãã¢ã§ããcodebaseåŒæ°ãnullã®å Žåãã³ãŒãã»ããŒã¹URLãã¹ã¯ãã·ã¹ãã ã»ããããã£java.rmi.server.codebaseã®å€ã以åã®ãã£ãã·ã¥ãããå€ã®ããããã«ãªããŸãã ããã³ãŒãã»ããŒã¹URLãã¹ãããç¹å®ã®ã³ã³ããã¹ãå ã§æ¬¡ã®ããããã®ã¡ãœããã®åŒåºãã®codebaseåŒæ°ãšããŠæž¡ãããå Žåã衚å ã®ããŒããŒã®ãã¡ããã¹ãæå®ãããã³ãŒãã»ããŒã¹URLãã¹ã芪ãçŸåšã¹ã¬ããã®ã³ã³ããã¹ãã»ã¯ã©ã¹ã»ããŒããŒã§ãããããªããŒããŒããã³ãŒãããŒã¹ã»ããŒããŒã«ãªããŸãã ãã®ãããªããŒããŒãååšããªãå Žåã¯ãäœæãããŠè¡šã«è¿œå ãããŸãã ãã ãããã®è¡šã¯ãå°éäžå¯èœãªããŒããŒãšãã®ããŒããŒã«å®çŸ©ãããŠããã¯ã©ã¹ãã¬ããŒãžã»ã³ã¬ã¯ããããããã«ãããŒããŒãžã®åŒ·åç §ãä¿æããŸããã ã»ãã¥ãªãã£ã»ãããŒãžã£ãååšããªããšãã«ä¿¡é Œãããªãã³ãŒããä»®æ³ãã·ã³ã«æé»çã«ããŒããããªãããã«ããããã«ãã»ãã¥ãªãã£ã»ãããŒãžã£ãèšå®ãããŠããªãå Žåã¯ãã³ãŒãããŒã¹ã»ããŒããŒã¯çŸåšã®ã¹ã¬ããã®ã³ã³ããã¹ãã»ã¯ã©ã¹ã»ããŒããŒã«ãªããŸã(æå®ãããã³ãŒãã»ããŒã¹URLãã¹ã¯ç¡èŠããããªã¢ãŒãã»ã¯ã©ã¹ãããŒãã§ããªããªã)ã
getClassLoaderã¡ãœããã¯ãæå®ãããã³ãŒãã»ããŒã¹URLãã¹ã®ã³ãŒãããŒã¹ã»ããŒããŒãè¿ããŸãã ã»ãã¥ãªãã£ã»ãããŒãžã£ãååšããå ŽåãåŒåºãåŽã³ã³ããã¹ãã«ã³ãŒãã»ããŒã¹URLãã¹å ã®ãã¹ãŠã®URLã«å¯Ÿããã¢ã¯ã»ã¹æš©ããªããšãã¯ãSecurityExceptionãã¹ããŒãããŸãã
loadClassã¡ãœããã¯ãæå®ãããååãæã€ã¯ã©ã¹ã®ããŒããæ¬¡ã®æ¹æ³ã§è©Šã¿ãŸããdefaultLoaderåŒæ°ãnullã§ãªãå Žåã¯ããŸãdefaultLoaderã䜿çšããŠãæå®ãããnameã®ã¯ã©ã¹ãããŒãããããšããŸããããšãã°ã次ã®ããã«è©äŸ¡ããŸããClass.forName(name, false, defaultLoader)ã¯ã©ã¹ãdefaultLoaderããããŒãã§ããå Žåã¯ããã®ã¯ã©ã¹ãè¿ãããŸããClassNotFoundException以å€ã®äŸå€ãã¹ããŒãããå Žåã¯ããã®äŸå€ãåŒåºãåŽã«ã¹ããŒãããŸããæ¬¡ã«ã
loadClassã¡ãœããããæå®ãããã³ãŒãã»ããŒã¹URLãã¹ã®ã³ãŒãããŒã¹ã»ããŒããŒã䜿çšããŠãæå®ãããnameã®ã¯ã©ã¹ã®ããŒãã詊ã¿ãŸãã ã»ãã¥ãªãã£ã»ãããŒãžã£ãååšããå ŽåãåŒåºãåŽã³ã³ããã¹ãã«ã¯ã³ãŒãã»ããŒã¹URLãã¹å ã®ãã¹ãŠã®URLã«å¯Ÿããã¢ã¯ã»ã¹æš©ãå¿ èŠã§ããã¢ã¯ã»ã¹æš©ããªãå Žåã¯ãã³ãŒãããŒã¹ã»ããŒããŒã®ä»£ããã«ãçŸåšã®ã¹ã¬ããã®ã³ã³ããã¹ãã»ã¯ã©ã¹ã»ããŒããŒã䜿çšãããŸãã
loadProxyClassã¡ãœããã¯ãæ¬¡ã®æ¹æ³ã§ãæå®ãããã€ã³ã¿ãã§ãŒã¹ã®åçãããã·ã»ã¯ã©ã¹ãè¿ãããšããŸãã
defaultLoaderåŒæ°ãnull以å€ã§ããã®ããŒããŒã䜿çšããŠãæå®ãããã€ã³ã¿ãã§ãŒã¹ããã¹ãŠè§£æ±ºã§ããå Žå
- 解決ãããã€ã³ã¿ãã§ãŒã¹ããã¹ãŠ
publicã®å Žåã¯ããŸãProxy.getProxyClassã䜿çšããŠãã³ãŒãããŒã¹ã»ããŒããŒãããã®ã€ã³ã¿ãã§ãŒã¹ã®åçãããã·ã»ã¯ã©ã¹ãååŸããããšãããIllegalArgumentExceptionãã¹ããŒãããå Žåã¯ãdefaultLoaderãããã®ã€ã³ã¿ãã§ãŒã¹ã®åçãããã·ã»ã¯ã©ã¹ãååŸããããšããã ã©ã¡ãã®å ŽåãIllegalArgumentExceptionãã¹ããŒããããšãã¯ãClassNotFoundExceptionãã¹ããŒãããã ã»ãã®äŸå€ãã¹ããŒãããå Žåããã®äŸå€ã¯åŒåºãåŽã«ã¹ããŒããã- 解決ãããã€ã³ã¿ãã§ãŒã¹ã
public以å€ã®å Žåããããããã¹ãŠåãã¯ã©ã¹ã»ããŒããŒã«å®çŸ©ãããŠãããšãã¯ããã®ããŒããŒãããã®ã€ã³ã¿ãã§ãŒã¹ã®åçãããã·ã»ã¯ã©ã¹ãååŸããããšãã- äžèšä»¥å€ã®å Žåã¯ã
LinkageErrorãã¹ããŒããã(æå®ãããã€ã³ã¿ãã§ãŒã¹ããã¹ãŠå®è£ ããã¯ã©ã¹ã¯ãããã®ããŒããŒã«ãå®çŸ©ã§ããªããã)æå®ããããã¹ãŠã®ã€ã³ã¿ãã§ãŒã¹ããã³ãŒãããŒã¹ã»ããŒããŒã䜿çšããŠè§£æ±ºã§ããå Žå
- 解決ãããã€ã³ã¿ãã§ãŒã¹ããã¹ãŠ
publicã®å Žåã¯ããã®ã€ã³ã¿ãã§ãŒã¹ã®åçãããã·ã»ã¯ã©ã¹ãã³ãŒãããŒã¹ã»ããŒããŒããååŸããããšãããIllegalArgumentExceptionãã¹ããŒãããå Žåã¯ãClassNotFoundExceptionãã¹ããŒãããã- 解決ãããã€ã³ã¿ãã§ãŒã¹ã
public以å€ã®å Žåããããããã¹ãŠåãã¯ã©ã¹ã»ããŒããŒã«å®çŸ©ãããŠãããšãã¯ããã®ããŒããŒãããã®ã€ã³ã¿ãã§ãŒã¹ã®åçãããã·ã»ã¯ã©ã¹ãååŸããããšãã- äžèšä»¥å€ã®å Žåã¯ã
LinkageErrorãã¹ããŒããã(æå®ãããã€ã³ã¿ãã§ãŒã¹ããã¹ãŠå®è£ ããã¯ã©ã¹ã¯ãããã®ããŒããŒã«ãå®çŸ©ã§ããªããã)ãã以å€ã®å Žåã解決ã§ããªãã£ãæå®ã€ã³ã¿ãã§ãŒã¹ã«ã€ããŠã
ClassNotFoundExceptionãã¹ããŒãããŸãã
SecurityException - ã»ãã¥ãªãã£ã»ãããŒãžã£ãååšããå Žåã«ããã®checkPermissionã¡ãœããåŒåºãã«å€±æãããšã@Deprecated public static Object getSecurityContext(ClassLoader loader)
loader - ã»ãã¥ãªãã£ã»ã³ã³ããã¹ãã®ååŸå
ã®ã¯ã©ã¹ã»ããŒããŒSecurityManager.getSecurityContext() ãã°ãŸãã¯æ©èœãéä¿¡
詳现ãªAPIãªãã¡ã¬ã³ã¹ããã³éçºè
ããã¥ã¡ã³ãã«ã€ããŠã¯ãJava SEã®ããã¥ã¡ã³ããåç
§ããŠãã ããã ãã®ããã¥ã¡ã³ãã«ã¯ãæŠå¿µçãªæŠèŠãçšèªã®å®çŸ©ãåé¿æ¹æ³ãæå¹ãªã³ãŒãäŸãªã©ã®ãéçºè
ã察象ã«ãããã詳现ãªèª¬æãå«ãŸããŠããŸãã
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyãåç
§ããŠãã ããã