问题标签 [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.
eclipse - 谁在 Equinox osgi 容器中加载 javax.swing.* 类?
我读了一些春分代码和文档。我开始明白,目前,只有 java.* 包的类加载被委托给父类加载器(假设我没有修改 org.osgi.bootdelegation 属性,顺便说一句似乎是空的)。那么谁在加载 javax.swing.* 类。我没有在导入的包/所需的包中的任何地方提到它,但它仍然加载得很好。我想知道到底是谁“正式”负责加载它?提前非常感谢。
caching - 跨类加载器/EJB 的单例:如何避免由于多个类加载器/EJB 而出现多个 JCS 缓存实例?
我想使用 JCS(Java 缓存系统)来缓存应该由多个 EJB(类加载器)共享的 ldap 查询,以避免重复搜索。我创建了一个单例包装器来仅创建一个 JCS 缓存实例,但由于每个 EJB 都有自己的类加载器,它会创建多个 JCS 缓存实例,因此不会重用 ldap 搜索结果。
有没有办法创建一个可以由多个 EJB/类加载器共享的真正的单例?我的一位朋友建议在我的单例上创建一个 EJB 包装器。这是正确的方法吗?没有EJB我不能实现吗?我看到并写了一篇关于如何实现“Absolute Singleton”的文章,但是当我尝试解决方案时它不起作用。请参阅“绝对单例。不是真的.. ”。
java - ClassLoader 加载错误的文件
我使用此代码片段来获取文件作为输入流。文件 version.txt 打包在我的应用程序的 jar 中,在最上面的文件夹中。
这几乎一直有效。但是对于一个用户来说,它正在获取另一个 version.txt,它不在我的 jar 中。如何确保这会加载我的 jar 中的特定 version.txt 文件?
caching - 如何跨多个 EJB 共享 Java 缓存系统 (JCS) 资源
我正在使用 JCS 存储应该由多个 EJB 共享的 ldap 搜索结果。我创建了一个单例类来仅初始化 JCS 一次,但由于 EJB 的类加载器,它已使用自己的副本多次初始化。所以搜索资源不共享。
你们如何解决需要跨多个 bean 共享缓存的问题?我正在寻找 JVM 中的缓存。(不是远程的,例如 memcached 等)。
Glassfish 用作应用程序服务器。
eclipse - 如何在 Equinox 中获取捆绑包的类加载器?
我已经为此阅读了很多 Equinox 代码,但仍然无法找出在 Eclipse Equinox 设置中获取 osgi 包的类加载器的非 hacky 方法。有吗?
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,反之亦然。)
提前致谢!
java - Java Classloader - 如何引用不同版本的 jar
这是一个常见的问题。我正在使用 2 个库A.jar和B.jar,它们依赖于同一个 jar 的不同版本。
假设在运行时我需要THIS.xxxjar
我可以针对其依赖项编译特定的 jar (A.jar/B.jar),但在运行时我只需要加载 1 个版本。哪一个?
仅加载 1 个依赖项(最新版本)意味着如果库不向后兼容(是否有向后兼容的库?),我的代码可能会引发运行时异常。
无论如何,我知道像 OSGi 这样的东西可以解决这个问题。
我想知道解决此类问题的旧方法是什么...
非常感谢
jpa - 谁需要在 JPA 应用程序中查看谁?
我有使用 JPA 的代码,并且在我的开发环境和单元测试中一切正常。但是将我的模块部署到 OSGi 目标环境中时,我经常遇到最奇怪的类加载问题。我真的很喜欢 OSGi,但如果我不能一劳永逸地解决这个问题,我会发疯的。只要我不明白哪些类需要被哪些其他类看到,我就永远不会正确设置 OSGi 的东西。
因此,据我所见,我有以下项目可能会或可能不会从某些正在运行的代码中看到,我们称它们为“主题”:
- JPA 注释实体类
- 一种
persistence.xml
- 持久性 API
javax.persistence
- 持久性提供者类
我的代码中有以下情况:
- 创建一个
EntityManagerFactory
和一个EntityManager
- 实例化新的实体对象
- 将这些对象传递给
EntityManager
以将它们放入其持久性上下文中 - 继续使用它们,偶尔要求 EntityManager 保存更改
- 实例化、使用和丢弃实体对象,而无需将它们保存到数据库或以其他方式显式调用 EntityManager 的方法
- 而不是实例化实体对象,而是要求 EM 从数据库中加载它们,这会导致实例化发生在我看不到的地方。
- 使用、更改、保存和丢弃这些实例
那么,在上述哪种情况下,我需要哪些主体可见?
我想这可能很明显
- 持久性提供者和实体类需要知道 javax.persistence
- 创建 EntityManager 的代码需要查看 javax.persistence (我猜是持久性提供程序,尽管这在我自己的任何代码中都没有直接可见)
java - 程序从 jar 执行时的动态加载问题
我有一个可通过符合给定接口的 java 类扩展的应用程序。如果我从命令行类运行程序,我可以使用以下方法实例化附加类:
但是,如果我 jar 应用程序(正确设置主类),我会得到一个类未找到异常。任何人都可以阐明这里发生了什么吗?
TIA,亚当
java - java:是否有允许动态加载和卸载 jars(但不是 osgi)的框架?
我想要一种允许动态加载和卸载 jar 以及在 jar 中调用激活器类的机制。由于繁琐的导入/导出机制,我不想使用 OSGi。