问题标签 [classloading]

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 回答
22 浏览

java - Atmosphere servlet 类加载与 java 冲突

我不确定如何命名这个问题,但我会尝试解释问题所在。我目前正在 Web 应用程序中测试Atmosphere 框架。我首先阅读了文档,然后测试了chat-multiroom 示例。我使用tomcat 8.5在eclipse中运行它。当大气 servlet 初始化时,它将扫描一个包以查找具有某些注释的任何类,如果找到注释,它将使用路径作为键将该类添加到地图中。为此,它必须首先扫描自己的包以查找它应该使用的注释并将它们添加到可用注释的映射中。必须填充此列表才能初始化带注释的类。代码如下所示:

所以它会遍历它找到的每个类并检查它是否实现了处理器。处理器是大气提供的接口import org.atmosphere.annotation.Processor;

但是,当我调试此代码时,它会将 clazz 与 jdk:s 接口 javax.annotation.processing.Processor 而不是 org.atmosphere.annotation.Processor 进行比较。这导致地图为空。这会导致未加载端点,因为没有要查找的注释。

如果我下载气氛代码并将其复制到我的 src 文件夹中,它可以正常工作。

我目前正在使用 Eclipse IDE,我想知道是否有办法以某种方式配置项目或 tomcat 服务器以使其了解应该使用哪个接口。

0 投票
1 回答
27 浏览

java - 如何创建父级最后的类加载器层次结构?

我有 3 个类加载器:

  1. 主加载器
  2. 预加载加载器
  3. 游戏场景加载器

在整个程序执行过程中只有一个MainLoader实例,但PreloadingLoaderGameSceneLoader可以按需重新创建。

当我在程序中加载任何类时,我想:

  • 如果类名以任何开头,则使用MainLoaderstaticClasses加载它
  • 如果类名以任何开头,则使用PreloadingLoaderpreloadingClasses加载它
  • 如果类名存在pl.gieted.flappy_bird但未在上述列表中列出,则使用GameSceneLoader加载它
  • 否则使用默认的类加载器加载它

下面的代码有效,但仅适用于加载的第一个类,例如:

  1. pl.gieted.flappy_bird.engine.RendererGameSceneLoader请求
  2. MainLoader尝试加载它,因为它是GameSceneLoader最古老的父级
  3. Renderer一个类依赖LoadingScene
  4. 由于Renderer是使用MainLoader加载的,因此Loading Scene也正在使用MainLoader加载,但是找不到它。
  5. java.lang.NoClassDefFoundError被抛出。

我想要发生的是:

  1. pl.gieted.flappy_bird.engine.RendererGameSceneLoader请求
  2. MainLoader尝试加载它,因为它是GameSceneLoader最古老的父级
  3. Renderer一个类依赖LoadingScene
  4. 的加载LoadingScene被传回GameSceneLoader
  5. MainLoader找不到它。
  6. PreloadingLoader找到并加载它
  7. 加载继续...

如何实现这样的事情?

这些示例是用 Kotlin 编写的,但是您可以毫无问题地用 Java 回答我。

0 投票
0 回答
45 浏览

java - 在运行的 Jetty 服务器上动态加载类

我很好奇一个问题。Jetty 是否可以将类(Jersey REST 控制器)动态加载到服务器上已经运行的应用程序。我的意思是,我在服务器上部署了我的应用程序,但不是作为 .war 文件,而是作为具有适合 Jetty 拾取类的结构的常规文件夹,我需要这种行为:当重新编译时来类或向该 WEB-INF 添加新类-> classes 目录 Jetty 拾取更改并刷新上下文。因为目前据我所知,热部署仅扫描根目录,WebAppContext 中有一个内部属性 - scanDepth 设置为 1。那么有没有任何选项可以配置码头扫描整个应用程序目录,而不仅仅是根目录?

0 投票
1 回答
21 浏览

java-9 - 使 java.sql 包或模块可用于引导类加载器

我正在使用 sql 语句包装器。尝试使用 jdk 11 时,我收到 java.lang.NoClassDefFoundError: java/sql/PreparedStatement。从 java 9 开始,java.sql 在平台加载器中加载。我的包装类在引导类路径中。如何使任何模块在引导类路径中可用。

我试过 --add-modules java.sql 没用。有什么建议么

0 投票
1 回答
25 浏览

java - java.lang.ClassNotFoundException raised while the same is shown as loaded in -verbose logs and also present in the OSGI Bundle jar file

I have an existing Maven project working fine on a java version 1.8.0_241. But this supports vaadin version 7.2.6 and is needed to upgrade to vaadin 8 along with the compatibilty package. After making the necessary changes all the compilation issue are resolved but during execution, we are facing a ClassNotFoundException for one of our class GuiBaseApplication. But the class file was present in the OSGI Bundle guibase-2.2.4-SNAPSHOT.jar being used.

This class is an abstract class extending one class and implementing another class.

But when we took the -verbose logs, then could see that class was loaded once as below log.

Uptill now the Web GUI HTTP server was up and running.

Then trying to connect via the browser, the below error was displayed.

Checking on the existing and working version, we could see that this class is loaded two more times as below but with $1 and $2 sign.

We checked and confirmed that these 2 classes are GuiBaseApplication$1 and GuiBaseApplication$2 are present in the guibase-2.2.4-SNAPSHOT.jar file but still class loading issue is there.

It will be very helpful if we get some directions for where to look further. What we can try to identify the cause and then resolve the issue.