草庐IT

java - 类加载隔离在 jboss 5.1.x 中工作吗

我有一个非常标准的java应用程序,它使用maven一些非常常见的库,包括SpringhibernateORMhibernatevalidatorLog4j该应用程序由两个共享许多共同依赖项的war模块组成。在开发过程中,我们同时使用了jetty和tomcat,一切正常。现在我们即将部署到生产环境中,我们对这个环境有一些限制:应用程序必须部署在一个已配置的jboss5.1.x实例中,该实例在$JBOSS_HOME/common/lib/和$JBOSS_HOME/server//lib/下有大量的库,显然有很多重复的jar在这些目录中(尤其是log4j和hibernate验证的东西)我们

java - 我怎样才能安全地解决这个 Java 上下文类加载器问题?

我的数百名用户中只有一个在启动我的Java桌面应用程序时遇到问题。他只有大约三分之一的时间开始。另外三分之二的时间在启动时抛出NullPointerException:Exceptioninthread"AWT-EventQueue-0"java.lang.NullPointerExceptionatjava.util.Hashtable.put(Hashtable.java:394)atjavax.swing.JEditorPane.registerEditorKitForContentType(JEditorPane.java:1327)atjavax.swing.JEditorP

java - 实现过滤类加载器

我们正在扩展我们的java应用程序以支持插件。其中一部分包括将插件与我们自己的类隔离开,因此每个插件都将存在于它自己的类加载器中。我们还计划为插件提供一个可以使用的java框架,因此它必须暴露给插件。这个java框架还包含需要从我们自己的java代码访问的类,因此我们自己的java代码也必须可以访问它。问题是,如果java框架存在于系统类加载器中(我们自己的java代码存在于其中),我们就无法为插件提供我们想要的隔离。如果我们选择将java框架分离到不同的类加载器并将该类加载器用作插件类加载器的父级,则java框架将对我们自己的类不可见。我目前想到的解决方案是实现一个过滤类加载器。ja

Java 编译器 API 类加载器

我正在尝试使用JavaCompilerAPI来编译一些java类。该类从jar文件中导入一些包,这些包可以由上下文类加载器加载,我们称他为X,它不是系统类加载器。当我运行编译时,编译器提示无法识别导入。我试图指定fileManager来传递类加载器,但它没有帮助。当编译方法被调用时,它首先打印“CLASSLOADED”,因此上下文ClassLoader可以找到依赖类。但是,编译本身失败了(我收到“编译失败”消息)并且在编译过程中出现如下错误:/path/to/my/Source.java:3:包my.dependency不存在导入my.dependency.MyClass;^我做错了什

java - Java 类加载器安全模型

我正在尝试了解要求JVM加载类时使用的安全模型。根据关于沙盒的JVM规范,我相信标准的JVM实现应该至少维护一个其他ClassLoader,独立于primordialClassLoader。这用于加载应用程序类文件(例如从提供的类路径)。如果从不在其命名空间中的ClassLoader请求该类,例如java/lang/String,则它将请求转发到原始ClassLoader,它尝试从JavaAPI加载类,如果不存在,则抛出NoClassDefFoundError。我是否认为原始的ClassLoader仅从JavaAPI命名空间加载类,而所有其他类都是通过单独的ClassLoader实现加

java - 跨不同类加载器覆盖默认访问器方法会破坏多态性

我在尝试使用默认访问器(例如:voidrun())覆盖方法时遇到了一个奇怪的行为。根据Java规范,如果类属于同一个包,则类可以使用或覆盖基类的默认成员。当所有类都从同一个类加载器加载时,一切正常。但是,如果我尝试从单独的类加载器加载子类,那么多态性就不起作用。这是示例:应用程序.java:importjava.net.*;importjava.lang.reflect.Method;publicclassApp{publicstaticclassBase{voidrun(){System.out.println("error");}}publicstaticclassInsideex

java - Java 和 Scala 类加载的区别

类加载在java和scala之间是相同的还是在scala中处理不同 最佳答案 Scala根本没有对类加载做任何特殊的事情。一旦Scala代码被编译成字节码,它的外观和行为就好像源代码是Java。 关于java-Java和Scala类加载的区别,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5167806/

java - 静态和动态类加载?

为什么我需要像这样加载类定义:Class.forName("类名");这个的需求和优势是什么。一般用于在JDBC中加载驱动类。 最佳答案 Whatistheneedandadvantageofthis.TypicallywhichisusedtoloaddriverclassinJDBC.它允许您构建应用程序,以便关键的外部依赖项不会编译到应用程序源代码中。例如,在JDBC案例中,它允许您在不同的驱动程序实现和(理论上)不同的数据库供应商之间切换,而无需更改您的源代码。另一个用例是,当某些供应商开发具有扩展点的通用形式的应用程序时,

java - 急切的java类加载

我正在尝试对运行在各种硬件和操作系统平台上的JVM进行一些基准测试。我创建了一个算法来练习我感兴趣的JVM部分,并打算多次运行该算法以找到一个合适的平均值。当我运行基准测试时,我发现第一次运行明显比后续运行长:132ms86ms77ms89ms72ms我怀疑类是延迟加载的,在第一次运行时会产生很大的开销。虽然我认为这确实是每个JVM所独有的一项功能,但目前我对此并不感兴趣。是否有标准的命令行选项或属性来预先加载类?或者有人有任何其他理论吗? 最佳答案 最简单的做法是忽略第一次运行。(如果这是一件有效的事情)注意:如果您运行相同的代码

java - 为什么我们需要在 Java 中使用用户定义的类加载器

为什么tomcat有自己的类加载器。拥有用户定义的类加载器有什么好处 最佳答案 它将部署到容器中的各种网络应用隔离开来;也就是说,网络应用程序的行为不会受到(取消)部署另一个网络应用程序的影响。每个webapp只能看到自己的类,看不到其他应用程序提供的类。这允许不同的webapps使用同一类的不同版本。如果没有这种隔离,部署多个Web应用程序将是一场噩梦。同样,OSGI包有自己的类加载器,因此不同的包可以使用同一插件的不同版本。同样,这种隔离使得添加插件(及其依赖库)不太可能影响系统中的其他插件。