问题标签 [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.

0 投票
1 回答
1247 浏览

eclipse - 谁在 Equinox osgi 容器中加载 javax.swing.* 类?

我读了一些春分代码和文档。我开始明白,目前,只有 java.* 包的类加载被委托给父类加载器(假设我没有修改 org.osgi.bootdelegation 属性,顺便说一句似乎是空的)。那么谁在加载 javax.swing.* 类。我没有在导入的包/所需的包中的任何地方提到它,但它仍然加载得很好。我想知道到底是谁“正式”负责加载它?提前非常感谢。

0 投票
0 回答
1351 浏览

caching - 跨类加载器/EJB 的单例:如何避免由于多个类加载器/EJB 而出现多个 JCS 缓存实例?

我想使用 JCS(Java 缓存系统)来缓存应该由多个 EJB(类加载器)共享的 ldap 查询,以避免重复搜索。我创建了一个单例包装器来仅创建一个 JCS 缓存实例,但由于每个 EJB 都有自己的类加载器,它会创建多个 JCS 缓存实例,因此不会重用 ldap 搜索结果。

有没有办法创建一个可以由多个 EJB/类加载器共享的真正的单例?我的一位朋友建议在我的单例上创建一个 EJB 包装器。这是正确的方法吗?没有EJB我不能实现吗?我看到并写了一篇关于如何实现“Absolute Singleton”的文章,但是当我尝试解决方案时它不起作用。请参阅“绝对单例。不是真的.. ”。

0 投票
3 回答
1878 浏览

java - ClassLoader 加载错误的文件

我使用此代码片段来获取文件作为输入流。文件 version.txt 打包在我的应用程序的 jar 中,在最上面的文件夹中。

这几乎一直有效。但是对于一个用户来说,它正在获取另一个 version.txt,它不在我的 jar 中。如何确保这会加载我的 jar 中的特定 version.txt 文件?

0 投票
2 回答
2270 浏览

caching - 如何跨多个 EJB 共享 Java 缓存系统 (JCS) 资源

我正在使用 JCS 存储应该由多个 EJB 共享的 ldap 搜索结果。我创建了一个单例类来仅初始化 JCS 一次,但由于 EJB 的类加载器,它已使用自己的副本多次初始化。所以搜索资源不共享。

你们如何解决需要跨多个 bean 共享缓存的问题?我正在寻找 JVM 中的缓存。(不是远程的,例如 memcached 等)。

Glassfish 用作应用程序服务器。

0 投票
4 回答
16079 浏览

eclipse - 如何在 Equinox 中获取捆绑包的类加载器?

我已经为此阅读了很多 Equinox 代码,但仍然无法找出在 Eclipse Equinox 设置中获取 osgi 包的类加载器的非 hacky 方法。有吗?

0 投票
6 回答
19650 浏览

java - Java Enums:两种枚举类型,每个都包含对彼此的引用?

有没有办法解决由两个相互引用的枚举引起的类加载问题?

我有两组枚举,Foo 和 Bar,定义如下:

上面的代码作为输出产生:

我明白为什么会发生 - JVM 开始类加载 Foo;它在 Foo.A 的构造函数中看到了 Bar.Alpha,所以它开始类加载 Bar。它在对 Bar.Alpha 的构造函数的调用中看到了 Foo.A 引用,但是(因为我们仍在 Foo.A 的构造函数中)此时 Foo.A 为空,因此 Bar.Alpha 的构造函数传递了一个空值。如果我反转两个 for 循环(或以其他方式在 Foo 之前引用 Bar),输出会发生变化,因此 Bar 的值都是正确的,但 Foo 的值不是。

有没有办法解决这个问题?我知道我可以在第三堂课中创建一个静态地图和一个静态地图,但这对我来说感觉相当骇人。我还可以创建引用外部映射的 Foo.getBar() 和 Bar.getFoo() 方法,因此它甚至不会更改我的接口(我使用的实际类使用检查器而不是公共字段),但它仍然感觉对我来说有点不干净。

(我在实际系统中这样做的原因:Foo 和 Bar 表示 2 个应用程序相互发送的消息类型;Foo.b 和 Bar.f 字段表示给定消息的预期响应类型 - 所以在我的示例代码,当 app_1 收到 Foo.A 时,需要回复 Bar.Alpha,反之亦然。)

提前致谢!

0 投票
5 回答
10418 浏览

java - Java Classloader - 如何引用不同版本的 jar

这是一个常见的问题。我正在使用 2 个库A.jarB.jar,它们依赖于同一个 jar 的不同版本。
假设在运行时我需要THIS.xxxjar

我可以针对其依赖项编译特定的 jar (A.jar/B.jar),但在运行时我只需要加载 1 个版本。哪一个?
仅加载 1 个依赖项(最新版本)意味着如果库不向后兼容(是否有向后兼容的库?),我的代码可能会引发运行时异常。

无论如何,我知道像 OSGi 这样的东西可以解决这个问题。
我想知道解决此类问题的旧方法是什么...

非常感谢

0 投票
1 回答
111 浏览

jpa - 谁需要在 JPA 应用程序中查看谁?

我有使用 JPA 的代码,并且在我的开发环境和单元测试中一切正常。但是将我的模块部署到 OSGi 目标环境中时,我经常遇到最奇怪的类加载问题。我真的很喜欢 OSGi,但如果我不能一劳永逸地解决这个问题,我会发疯的。只要我不明白哪些类需要被哪些其他类看到,我就永远不会正确设置 OSGi 的东西。

因此,据我所见,我有以下项目可能会或可能不会从某些正在运行的代码中看到,我们称它们为“主题”:

  • JPA 注释实体类
  • 一种persistence.xml
  • 持久性 APIjavax.persistence
  • 持久性提供者类

我的代码中有以下情况:

  • 创建一个EntityManagerFactory和一个EntityManager
  • 实例化新的实体对象
  • 将这些对象传递给EntityManager以将它们放入其持久性上下文中
  • 继续使用它们,偶尔要求 EntityManager 保存更改
  • 实例化、使用和丢弃实体对象,而无需将它们保存到数据库或以其他方式显式调用 EntityManager 的方法
  • 而不是实例化实体对象,而是要求 EM 从数据库中加载它们,这会导致实例化发生在我看不到的地方。
  • 使用、更改、保存和丢弃这些实例

那么,在上述哪种情况下,我需要哪些主体可见?

我想这可能很明显

  • 持久性提供者和实体类需要知道 javax.persistence
  • 创建 EntityManager 的代码需要查看 javax.persistence (我猜是持久性提供程序,尽管这在我自己的任何代码中都没有直接可见)
0 投票
2 回答
179 浏览

java - 程序从 jar 执行时的动态加载问题

我有一个可通过符合给定接口的 java 类扩展的应用程序。如果我从命令行类运行程序,我可以使用以下方法实例化附加类:

但是,如果我 jar 应用程序(正确设置主类),我会得到一个类未找到异常。任何人都可以阐明这里发生了什么吗?

TIA,亚当

0 投票
3 回答
2675 浏览

java - java:是否有允许动态加载和卸载 jars(但不是 osgi)的框架?

我想要一种允许动态加载和卸载 jar 以及在 jar 中调用激活器类的机制。由于繁琐的导入/导出机制,我不想使用 OSGi。