Tag: classloader

Apache Commons JCI ReloadingClassLoader

有没有人有使用Apache Commons JCI API的ReloadingClassLoader的经验? 唯一的用法示例可以在以下页面中找到: http : //commons.apache.org/jci/usage.html 我假设每当目录或jar更改时,它会自动重新加载类加载器中的类? 如果是这样,你将不得不再次加载/实例化一个先前加载/实例化的类(通过调用loadClass())来使用新修改的类? 那是对的吗? 希望这很清楚。

Java / JSF / Tomcat / Spring – Proxy-Object与原始对象有不同的方法

今天我遇到了这个问题,这真的让我感到困扰,因为几乎代码已经运行了(并且即使在恢复到旧版本之后也停止了工作)。 我正在Facelets-Page上访问一个Spring-Bean。 Spring在Proxies中包装这些对象以使用方面和其他一些东西。 问题是,我在尝试访问bean的属性时遇到exception。 例外是这样的: javax.el.PropertyNotFoundException: /customers.xhtml @23,27 value=”#{customerBean.customer}”: Property ‘customer’ not found on type $Proxy88 我肯定知道(!!)有相应的getter / setter方法。 到目前为止我尝试的事情: 将应用程序部署到另一个tomcat安装 清除所有tomcat-caches,webapp目录 清理eclipse项目 使用javap(以及那里的方法/属性)检查相应的方法 更改bean的范围 更改bean的类名 更改spring bean-id 更改bean的serialVersionUID 无论我做什么,类都不正确地被类加载器正确包装或者没有正确加载。 有谁知道什么可能导致这样的问题? 我不知道该怎么做,所以任何建议都非常感谢! 提前致谢! 问候,罗伯特

修补或覆盖核心Java 10类的实现

JFX中存在一个错误,通常在计算屏幕坐标时显示出来https://bugs.openjdk.java.net/browse/JDK-8194727和https://bugs.openjdk.java.net/browse/JDK-8190400 我已将问题跟踪到GeneralTransform3D的实现,这是javajfx运行时的一部分。 我已经向Oracle提交了一个错误报告,但在它被接受,修复并进入发布之前,我需要一种修复我的应用程序的方法。 在java 8中,我能够创建一个包含该类的固定版本的jar并将其安装在lib / ext文件夹中。 这似乎有效,JFX实现使用了我自己的impl。 在java 10中,已删除扩展机制。 将补丁jar添加到类路径不起作用,因为在类加载过程中为时已晚。 有没有办法在Java 10中覆盖/修补核心java类的实现? 请注意,我没有直接使用此类,它由框架使用

Java中的自定义类加载器

是否可以在java中创建自己的自定义类加载器。 如果是那么请指导我。 我想在类文件中进行更改而不是类混淆,这样就无法通过任何工具进行反转

JVM在加载特定类时是否加载所有使用的类?

当JVM加载A类时,它是否加载A中使用的所有类? 而且我想知道导入声明是否对加载过程有某种影响? JLS的链接将不胜感激。

Parent Last Classloader解决Java类路径地狱?

我有一个项目使用两个版本的bouncyCastle jars bcprov-jdk15和bcprov-jdk16。 jvm加载旧版本,但我写的一个function需要运行更新的版本。 我试图通过使用自定义类加载器来解决这个类路径地狱。 经过一些谷歌搜索并借助之前的Stackoverflow回答[1] [2]和本博客 ,我编写了以下Parent Last Class加载器,以便在委托给父类加载器之前从较新的jar加载类。 public class ParentLastClassLoader extends ClassLoader { private String jarFile; //Path to the jar file private Hashtable classes = new Hashtable(); //used to cache already defined classes public ParentLastClassLoader(ClassLoader parent, String path) { super(parent); this.jarFile = path; } @Override public Class findClass(String name) throws ClassNotFoundException { […]

WebSphere和Maven的deployment.xml

我已经使用Maven而不是RAD的内置工具转换了要构建和部署的应用程序。 它大部分都很顺利,但最后一个“问题”是应用程序需要一个“父级/应用程序”的类加载器策略。 我想自动执行此操作,因为目前,当我使用Maven的WAS插件时 ,它似乎完全卸载并重新安装应用程序,因此每次代码更改并重新部署应用程序时,我都必须通过管理控制台。 如果我可以在部署的EAR中内置类加载器设置,那么工作会更快。 据我所知,类加载器配置由RAD管理的文件“deployment.xml”控制,该文件位于我的EAR项目的“META-INF / ibmconfig”文件夹中。 我猜我可以在我的EAR中包含这个目录结构,当它部署到WebSphere时它会正常工作,但我更关心这个文件的内容。 它看起来像这样: … 应用程序中的所有模块都有ID,例如EJBModuleDeployment_1460348645719 ,我猜这些是在应用程序最初通过RAD发布到WAS时创建的。 如果我将新的Maven化项目提供给新开发人员,他们是否能够使用此deployment.xml文件,或者是否存在特定于通常由RAD管理的特定WAS实例的部分文件? 此外,如果我稍后向应用程序添加更多模块,我将如何使用Maven生成新的模块ID? 我可以只EJBModuleDeployment_123一个ID,比如EJBModuleDeployment_123还是应该由RAD / WAS管理呢? 我也想知道我是否可以写一个Jython脚本来做这个并以某种方式将它与Maven集成,但我不确定这是否有用或者是否有必要。

ClassLoader.getResources在Weblogic / Spring应用程序上返回一个空的Enumeration

我使用Spring 4.0.4在Weblogic 12.2上部署了一个EAR应用程序并面临一个奇怪的行为: Spring无法找到基础包,因为Weblogic的类加载器为Spring的代码返回一个空的Enumeration: cl.getResources(“my/base/pkg”) 它是在我的MDB上注入一些@Autowired bean的上下文中。 (所以,由于它,没有注入豆类) 但如果我将以下代码放入同一个应用程序的示例MDB中,它的工作原理如下: Thread.currentThread().getContextClassLoader().getResources(“my/base/pkg”); 并且似乎Spring使用相同的代码来创建其cl变量。 我注意到的另一件事是:如果我将Spring配置为具有基本包(具有类的基础包),它就可以工作。 会是什么呢?

Java类加载器委派模型是强制性的吗?

如果我有一个自定义类加载器,而不是首先委托给它的父级,尝试搜索并加载类本身是否会违反某些声明/未声明的规则?

为什么JVM不从数据库加载类?

为什么Java虚拟机没有从数据库加载类(类似于.NET的GAC)? 据我了解,目前它必须在类路径上读取和扫描每个JAR的清单,以便找到类文件。 不会使用数据库(如SQLite)来提升启动时间吗?