equal
deleted
inserted
replaced
1 /* |
1 /* |
2 * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. Oracle designates this |
7 * published by the Free Software Foundation. Oracle designates this |
142 |
142 |
143 withPermissions( new MBeanPermission("*", "getClassLoaderRepository"), |
143 withPermissions( new MBeanPermission("*", "getClassLoaderRepository"), |
144 new RuntimePermission("createClassLoader")) |
144 new RuntimePermission("createClassLoader")) |
145 ); |
145 ); |
146 |
146 |
|
147 |
|
148 this.defaultContextClassLoader = |
|
149 AccessController.doPrivileged( |
|
150 new PrivilegedAction<ClassLoader>() { |
|
151 @Override |
|
152 public ClassLoader run() { |
|
153 return new CombinedClassLoader(Thread.currentThread().getContextClassLoader(), |
|
154 dcl); |
|
155 } |
|
156 }); |
|
157 |
147 serverCommunicatorAdmin = new |
158 serverCommunicatorAdmin = new |
148 RMIServerCommunicatorAdmin(EnvHelp.getServerConnectionTimeout(env)); |
159 RMIServerCommunicatorAdmin(EnvHelp.getServerConnectionTimeout(env)); |
149 |
160 |
150 this.env = env; |
161 this.env = env; |
151 } |
162 } |
508 |
519 |
509 if (debug) logger.debug("queryMBeans", |
520 if (debug) logger.debug("queryMBeans", |
510 "connectionId=" + connectionId |
521 "connectionId=" + connectionId |
511 +" unwrapping query with defaultClassLoader."); |
522 +" unwrapping query with defaultClassLoader."); |
512 |
523 |
513 queryValue = unwrap(query, defaultClassLoader, QueryExp.class); |
524 queryValue = unwrap(query, defaultContextClassLoader, QueryExp.class); |
514 |
525 |
515 try { |
526 try { |
516 final Object params[] = new Object[] { name, queryValue }; |
527 final Object params[] = new Object[] { name, queryValue }; |
517 |
528 |
518 if (debug) logger.debug("queryMBeans", |
529 if (debug) logger.debug("queryMBeans", |
543 |
554 |
544 if (debug) logger.debug("queryNames", |
555 if (debug) logger.debug("queryNames", |
545 "connectionId=" + connectionId |
556 "connectionId=" + connectionId |
546 +" unwrapping query with defaultClassLoader."); |
557 +" unwrapping query with defaultClassLoader."); |
547 |
558 |
548 queryValue = unwrap(query, defaultClassLoader, QueryExp.class); |
559 queryValue = unwrap(query, defaultContextClassLoader, QueryExp.class); |
549 |
560 |
550 try { |
561 try { |
551 final Object params[] = new Object[] { name, queryValue }; |
562 final Object params[] = new Object[] { name, queryValue }; |
552 |
563 |
553 if (debug) logger.debug("queryNames", |
564 if (debug) logger.debug("queryNames", |
1577 } |
1588 } |
1578 try { |
1589 try { |
1579 ClassLoader orderCL = AccessController.doPrivileged( |
1590 ClassLoader orderCL = AccessController.doPrivileged( |
1580 new PrivilegedExceptionAction<ClassLoader>() { |
1591 new PrivilegedExceptionAction<ClassLoader>() { |
1581 public ClassLoader run() throws Exception { |
1592 public ClassLoader run() throws Exception { |
1582 return new OrderClassLoaders(cl1, cl2); |
1593 return new CombinedClassLoader(Thread.currentThread().getContextClassLoader(), |
|
1594 new OrderClassLoaders(cl1, cl2)); |
1583 } |
1595 } |
1584 } |
1596 } |
1585 ); |
1597 ); |
1586 return unwrap(mo, orderCL, wrappedClass); |
1598 return unwrap(mo, orderCL, wrappedClass); |
1587 } catch (PrivilegedActionException pe) { |
1599 } catch (PrivilegedActionException pe) { |
1669 |
1681 |
1670 private final MBeanServer mbeanServer; |
1682 private final MBeanServer mbeanServer; |
1671 |
1683 |
1672 private final ClassLoader defaultClassLoader; |
1684 private final ClassLoader defaultClassLoader; |
1673 |
1685 |
|
1686 private final ClassLoader defaultContextClassLoader; |
|
1687 |
1674 private final ClassLoaderWithRepository classLoaderWithRepository; |
1688 private final ClassLoaderWithRepository classLoaderWithRepository; |
1675 |
1689 |
1676 private boolean terminated = false; |
1690 private boolean terminated = false; |
1677 |
1691 |
1678 private final String connectionId; |
1692 private final String connectionId; |
1751 return objects(strs); |
1765 return objects(strs); |
1752 } |
1766 } |
1753 |
1767 |
1754 private static final ClassLogger logger = |
1768 private static final ClassLogger logger = |
1755 new ClassLogger("javax.management.remote.rmi", "RMIConnectionImpl"); |
1769 new ClassLogger("javax.management.remote.rmi", "RMIConnectionImpl"); |
|
1770 |
|
1771 private static final class CombinedClassLoader extends ClassLoader { |
|
1772 |
|
1773 private final static class ClassLoaderWrapper extends ClassLoader { |
|
1774 ClassLoaderWrapper(ClassLoader cl) { |
|
1775 super(cl); |
|
1776 } |
|
1777 |
|
1778 @Override |
|
1779 protected Class<?> loadClass(String name, boolean resolve) |
|
1780 throws ClassNotFoundException { |
|
1781 return super.loadClass(name, resolve); |
|
1782 } |
|
1783 }; |
|
1784 |
|
1785 final ClassLoaderWrapper defaultCL; |
|
1786 |
|
1787 private CombinedClassLoader(ClassLoader parent, ClassLoader defaultCL) { |
|
1788 super(parent); |
|
1789 this.defaultCL = new ClassLoaderWrapper(defaultCL); |
|
1790 } |
|
1791 |
|
1792 @Override |
|
1793 protected Class<?> loadClass(String name, boolean resolve) |
|
1794 throws ClassNotFoundException { |
|
1795 try { |
|
1796 super.loadClass(name, resolve); |
|
1797 } catch(Exception e) { |
|
1798 for(Throwable t = e; t != null; t = t.getCause()) { |
|
1799 if(t instanceof SecurityException) { |
|
1800 throw t==e?(SecurityException)t:new SecurityException(t.getMessage(), e); |
|
1801 } |
|
1802 } |
|
1803 } |
|
1804 final Class<?> cl = defaultCL.loadClass(name, resolve); |
|
1805 return cl; |
|
1806 } |
|
1807 |
|
1808 } |
1756 } |
1809 } |