问题标签 [classloader]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 在运行时加载 .jars:我的加载器工作,但使用 setContextClassLoader 没有?
我有一个名为“MyClassLoader”的 URLClassLoader,上面有一些罐子。如果我尝试
有用。
如果我尝试
它也有效。
但如果我尝试
它抛出一个ClassNotFoundException
.
当然,Class.forName
这里只是一个例子;尝试使用MyClass
也会引发异常。
这一切可能意味着我不明白它是如何setContextClassLoader
工作的。谁能向我澄清这一点并帮助我理解它 - 我应该怎么做才能使我的代码正常工作?谢谢你。
java - 如何发现哪个类路径条目提供了一个类?
我正在从 Java 中的自定义类加载器从几个不同的 .jar 加载几个不同的类。我创建了一个 custom URLClassLoader
,向其中添加了几个 .jar 并将其传递给 aServiceLoader
以查找我想要的类。
我的问题是:给定一个类,有没有办法发现它是从哪个 .jar 加载的?
java - 如何使用 Java 类加载器从类路径加载文件?
我想使用 ClassLoader 加载 Properties 类的属性文件。出于讨论的目的,我简化了以下代码以删除错误处理:
在与此类相同的目录中,我有文件“theta.properties”,但 InputStream 始终为空。我是不是把文件放错地方了?我正在使用 eclipse 及其设置将类文件构建到源文件夹 - 所以这不应该是问题。
我在 JavaDoc 中找不到任何东西来让 ClassLoader 告诉我正在搜索什么类路径。
classloader - 从 timerTask 连接池中清理类加载器
我有一个带有一些定时器任务的应用程序,connectionPools。我还开发了一个类加载器,有时我需要清理类加载器。问题是定时器任务就像一个引用类的守护进程。如何从 timertask 中取消计时器,以及如何在不调用 .remove() 而是使用通用解决方案的情况下关闭连接池。谢谢
java - 使用 ClassLoader 加载文件
这个问题困扰了我一段时间。我必须在我的 java 应用程序中加载几个文件,到目前为止我工作的唯一方法是这样的:
但这是丑陋和可怕的。有一段时间我以为我有这个工作:
但这由于某种原因不再起作用(我一定改变了一些东西但没有注意到。它返回 null。
我应该使用 getResource() 而不是 getSystemResource()(如果是,为什么 getSystemResource() 是静态的而不是 getResource())?
我正在使用 eclipse 并且我尝试在构建路径(类路径)中包含该文件夹而不包括它,它似乎没有任何区别。
java - 解释类加载器如何加载静态变量
好的,这是一个关于java的新手问题,但我似乎无法理解它。
我的课堂上有以下代码
由于以下行中的 nullpointerexception,此代码给了我一个初始化异常
当时似乎变量 LIST_INTEGER 为空。
有人可以解释为什么吗?类加载器过程是否是线性的,换句话说,它是否在完全加载所有其他变量之前调用该方法?
deployment - 将相同 EJB 和类的多个版本部署到相同的 JBoss 服务器
我有几个单独的应用程序项目 (EAR),其中包含多个 EJB,我想将它们部署到同一个 JBoss 服务器。现在,一些项目可能具有相同的 EJB,但版本不同。在类似的情况下,一些项目可能会使用相同“普通”类的不同版本(即在 VM 中加载的类,没有 JNDI 查找)。
使用 OC4J,这似乎不是问题,但现在使用 JBoss,我得到的印象是所有内容都驻留在同一个“名称空间”(或类加载器)中。我在这个假设中正确吗?
基本上,我想做(或确保)有两件事:
从执行 EJB 的 JNDI 查找的客户端,我希望能够指示它驻留在哪个应用程序中,以便返回正确版本的 EJB。
在 EJB 中,当实例化一个类时,我想确保该类是使用与 EJB 相同的应用程序 (EAR) 部署的类。
我想我读到您可以为 EJB 配置一些“隔离”属性,我猜对了,这可能会解决我的第二点吗?
java - 多线程类加载可能吗?
是否可以在 Java 中实现多线程类加载器?在元驱动框架中,我需要提前加载数百个类,即,不像系统类加载器那样懒惰。为了加速这一点,我想更好地利用当前的多核 CPU。在我深入研究之前,如果有人在这个问题上已经有一些经验,或者是否可能完全清楚这可能defineClass()
是这种情况下的瓶颈,我会很感兴趣。
谢谢安德烈
hibernate - JBoss 作用域类加载
我想在不升级服务器上的 jar 的情况下使用耳内最新的休眠版本。我正在按照此处给出的说明进行操作 - http://jaitechwriteups.blogspot.com/2008/08/how-to-upgrade-hibernate-in-jboss.html。
但是现在的问题是应用程序没有使用部署文件夹中的 jboss-local-jdbc.rar。
任何想法 ?
java - 是否可以在运行时使用 Java 切换 Class 版本?
我有一个要创建的 java 项目,它将建立在一些供应商 API 之上。API 连接到运行所述供应商软件的服务器并执行各种操作。
我有 2 个不同版本的服务器,由 2 个不同的 API 版本支持。对 API 的任何更改仅在内部实现中。IE 旧版本中我可用的类、接口、方法等在新版本中存在。因此,我编写的代码应该使用任一 API 版本编译和运行。使用 API 进行连接时,向服务器提供的 API 中有一个版本号,可防止您在该特定服务器上使用不同版本的 API。
有没有办法在运行时动态切换 JAR 文件?(像 ac/c++ DLL 之类的东西??)
如果无法在运行时切换 API 版本,那么处理该问题的最优雅方法是什么。构建代码 2x(每个 api 版本一个)?
我希望我遗漏了一些东西,但方法 2 似乎并不理想。下面是一个更具体的例子:
这是我的困境。我希望 w1 使用旧 API 构建,w2 使用新 API 构建,以便它们可以连接到适当的服务器。除了它们所在的 API 之外,它们是相同的(相同的代码)。我是否必须为 W1 和 W2 创建两个唯一命名的类类型,即使它们的代码相同,只是为了适应不同的 API 版本?如果我有许多想要与之交互的 API 版本,这似乎会很快变得笨拙。
非常感谢任何建议和意见。
-新人