java: do not pollute isolate classpath with isolator dependencies
We don't want cglib classes needed by io.osv.* classes to be accessible from application classes. This could cause problems if application would want to use its own version of cglib. In this case the application provided cglib would be masked by the one inside OSv. To solve this problem we do not set the current class loader as application class loader parent, but instead we link it with a proxy which combines bootstrap class loader and the original system class loader allowing only classes from io.osv.* package to be loaded from the system class loader. Class loader diagram: +-----------+ | Bootstrap |<---------------+ +-----------+ | ^ | | | | | +----+------+ io.osv.* +-----------+ | System |<-----------| Filtering | +-----------+ +-----------+ ^ | | +-----------+ | | App 1 |-----+ +-----------+ | | +-----------+ | | App 2 |-----+ +-----------+ This way the application may still use OSv java APIs, but does not see classes from our dependencies and may load its own version of these classes.
Showing
- java/runjava/src/main/java/io/osv/ContextIsolator.java 8 additions, 10 deletionsjava/runjava/src/main/java/io/osv/ContextIsolator.java
- java/runjava/src/main/java/io/osv/FilteringClassLoader.java 22 additions, 0 deletionsjava/runjava/src/main/java/io/osv/FilteringClassLoader.java
- java/runjava/src/main/java/io/osv/TeeClassLoader.java 29 additions, 0 deletionsjava/runjava/src/main/java/io/osv/TeeClassLoader.java
Please register or sign in to comment