实验一:
环境:jboss-4.2.3GA jdk1.6
应用结构: Jdom.ear
--library
--businessInterface.jar
--operationInterface.jar
--META-INF
--application.xml
--jboss-app.xml
--MANIFEST.MF
--Jdom.web.war
包部署位置:
包名称 |
部署位置 |
UserInterface.jar、Jdom.ejb.jar |
JBOSS_HOME/server/default/lib |
Jdom.ear |
JBOSS_HOME/sever/default/deploy |
说明:
1、UserManagerMgr、TUser在UserInterface.jar包下。
2、CmtCtrlMgr在library下的operationInterface.jar下。
3、StaticClass在Jdom.ear下的Jdom.web.war包下。
运行过程:
通过页面触发TestCastAction的valid方法,在这个方法里,会进行实例化UserManagerMgr、TUser、CmtCtrlMgr,同时将这几个类对应的加载类打印出来。
打印日志如下:
20:22:04,378 INFO [STDOUT] managerMgr return cast::org.jboss.mx.loading.UnifiedClassLoader3@16f144c{ url=null ,addedOrder=2}
20:22:04,378 INFO [STDOUT] action's TUser cast::org.jboss.mx.loading.UnifiedClassLoader3@16f144c{ url=null ,addedOrder=2}
20:22:04,378 INFO [STDOUT] action's user cast::org.jboss.mx.loading.UnifiedClassLoader3@16f144c{ url=null ,addedOrder=2}
20:22:04,402 INFO [STDOUT] action's cmtCtrlMgr cast::WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
java.net.FactoryURLClassLoader@1242445
20:22:04,402 INFO [STDOUT] action's CmtCtrlMgr cast::org.jboss.mx.loading.UnifiedClassLoader3@bc917c{ url=file:/usr/jboss/jboss/server/default/tmp/deploy/tmp6204233924756827378Jdom.ear ,addedOrder=50}
14:44:25,943 INFO [STDOUT] action.util.StaticClass cast::WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
java.net.FactoryURLClassLoader@1641c0
结论:
1、default/lib下的jar包与deploy下的jar包(包括ear里面的jar)都是由UnifiedClassLoader3加载,但是又不同的实例加载(根据日志,lib下的是UnifiedClassLoader3@16f144c,deploy下的是UnifiedClassLoader3@bc917c),这里可以解释之前的ClasscastException A cannot cast to A的问题了,尽管路径、类的详细内容一致,但是由不同实例加载,这样肯定不能做转换的。
2、war包是由WebappClassLoader加载的,同时,war包能够访问到由UnifiedClassLoader3加载的类。
问题:
1、CmtCtrlMgr的引用cmtCtrlMgr为什么是由 UnifiedClassLoader3加载的呢?
2、
相关测试的结论:
1、同一个ear下的jar包都是用UnifiedClassLoader3的同一个实例来加载的。
2、貌似普通的javabean不能同时存在于lib下和deploy下?如果同时存在,报错:java.lang.LinkageError: loader constraint violation: loader (instance of org/jboss/web/tomcat/service/WebAppClassLoader) previously initiated loading for a different type with name "a/c/Operate"。
分享到:
相关推荐
- **轻量级架构**:采用模块化设计,减少了不必要的组件加载,提升了启动速度。 - **优化的资源管理**:改进了内存管理机制,降低了内存占用,提高了运行效率。 - **高效的服务模型**:引入了新的服务模型,简化了...
- **Servlet生命周期**:包括加载、实例化、初始化、服务、销毁等阶段。 - **Servlet请求和响应**:Servlet通过`service()`方法处理客户端请求,使用HttpServletRequest和HttpServletResponse对象来获取和设置响应...
JBossAS7的快速主要归功于其微内核架构,这种架构允许应用服务器按需加载组件和服务,而非启动时全部加载,从而显著减少了启动时间和内存占用。 ### JBossAS7中的新概念——域 **域(Domain)**是一种管理多个服务器...
##### 3.2 实验 - **准备工作**:在进行域的配置之前,需要准备两台服务器作为Master和Slave。 - **配置**:包括在Master服务器上的`domain.xml`和`host.xml`配置文件的编辑,在Slave服务器上的相同配置文件的编辑。...
Jboss Fuse Ldap认证实验室重要信息:在启动以下脚本之前,您需要自己构建保险丝映像,请参阅 sh fuseLdap.sh 这是一个简单的脚本,可以为您运行3个docker映像: 带有预加载的用户/组数据的OpenLdap:valdar / ...
10. **Web容器和应用服务器**: Tomcat、Jetty等是常见的Java Web容器,它们负责加载和运行Servlet。而应用服务器如WebLogic、JBoss等则提供更全面的企业级服务,如EJB支持、JMS等。 在"java web"这个实验项目中,...
- **AspectJ**:最强大的AOP框架之一,支持编译期、类加载期和运行期织入。 - **JBoss AOP**:JBoss平台提供的AOP实现,主要用于企业级应用。 - **Spring AOP**:Spring框架内置的AOP支持,基于代理模式实现。 ####...
2. **代码注入**:Javaassist 提供了API,使得在运行时向已加载的类中注入代码成为可能。这对于实现诸如事务管理、安全控制等跨切面关注点特别有效。开发者可以通过CtClass的`insertBefore()`、`insertAfter()`和`...
3. 反弹shell部分更完美,不再加载远程war包,直接发包完成反弹。 4. jboss回显执行命令部分利用异常抛出机制,本地(4.2.3.GA)测试成功,其他版本请自测 5. 体积更小,不再依赖java环境,但程序采用.net编写,需要...
【标题】"simple-drools:Drools 中的一些实验"主要涵盖了使用Drools这一规则引擎进行编程的实践内容。Drools是JBOSS的一个开源项目,它提供了一个强大的业务规则管理系统,允许开发者用Java编写规则并进行执行。这个...
更高级的企业级服务器,如WebLogic、JBoss,还提供了EJB容器,支持更复杂的业务组件。 6. 安全性与权限管理: J2EE手机管理系统可能包含用户认证和授权功能,例如使用Servlet过滤器实现登录验证,或者通过角色权限...