`
jiopi
  • 浏览: 32292 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JIOPi v0.2类加载模型

阅读更多

JIOPi v0.2的类加载模型在延续JIOPi v0.1 POJO兼容的基础上,增加了对 JIOPi 蓝图 的支持。

JIOPi v0.1类加载模型参见 http://jiopi.iteye.com/blog/656895

蓝图的类加载规则:
JIOPi蓝图由以下Jar包组成:
当前蓝图的Jar包
依赖蓝图的Jar包
因此蓝图模块的类加载器必须将蓝图模块中的Jar进行分类,首先从当前蓝图的Jar包中加载类,如果加载不到,则应当调用依赖蓝图的Jar包所使用的蓝图模块的类加载器进行蓝图的加载,而不应该使用当前类加载器进行类的加载。
特殊加载逻辑:如果能够从当前蓝图的Jar包中加载到类,则应当检测ContextClassLoader中是否存在同名、同版本的蓝图,如果存在,则应当从ContextClassLoader中加载类,而不使用当前类加载器加载,从而保证实现模块的对象可以暴漏到ContextClassLoader加载的类中。

模块的类加载规则
模块由以下Jar包组成:
当前模块的实现类Jar包
当前模块的依赖蓝图Jar包
其他第三方类库Jar包
对于当前模块的实现类Jar包 和 其他第三方类库的Jar包中的类,由当前模块的类加载器进行加载,而模块所依赖的蓝图Jar中的类,则应该交由对应的蓝图的类加载器进行加载

蓝图的版本冲突
在大多数情况下,总是一个模块通过蓝图使用另一个模块,而这两个模块必然使用了同一个版本的蓝图,然而在下面这种情形下,会出现蓝图的版本冲突:
Aimpl-1.0.0.0模块 实现A1.0蓝图, 依赖 B-1.0蓝图,选择使用了 Bimpl-1.0.0.0的实现模块,Cimpl-1.0.0.0 依赖 A1.0,B-1.1,然而传递给Cimpl-1.0.0.0 的 B接口的实现类,有的是从 BNimpl-1.1.0.0 获得的,有的是从A1.0中获取的,而从A1.0中获取的确是B1.0的实现类,从而B蓝图的两个版本在 Cimpl-1.0.0.0中产生了版本冲突,当然,这个异常模型是不会出现在传统Java运行环境的,因为不可能出现一个类的两个版本,而这种情形却会出现在JIOPi的模块依赖模型中,并且JIOPi打算赋予Cimpl-1.0.0.0处理 B 蓝图不同版本的实现的能力,这个能力计划通过动态代理类来完成,从而避免强制类型转换异常。不过该规范没有被包含在JIOPi v0.2中,所以在使用JIOPi v0.2规范的实现容器时,要注意避免将同一蓝图的不同版本的实现类的对象在同一个模块中会合这种情形。

 

0
1
分享到:
评论
7 楼 jiopi 2010-05-29  
zwhc 写道
呵呵,不知道你这项目和 ivy 有没有相似之处。


ivy应该和Maven相似,属于编译时Jar依赖管理,编译时的Jar依赖管理不能十分有效的解决Jar依赖时的版本冲突

JIOPi引入的是类似OSGi的运行时模块依赖管理,允许运行时加载一个类的多个版本,从而完全避免Jar的运行时版本依赖冲突

我认为这两个项目应该是不矛盾的,因为一个是 编译时 环境,一个是 运行时 环境
6 楼 zwhc 2010-05-29  
呵呵,不知道你这项目和 ivy 有没有相似之处。

http://www.blogjava.net/brokendoor/archive/2007/01/09/92643.html
5 楼 jiopi 2010-05-27  
直接运行源码 需要将 #ibean.debug.mode = true 打开
因为采取了 类库 统一部署的模式,并且要用JDK1.6的一些特性(instrument),因此程序是使用JAVA_HOME环境变量自动在SUN的JDK路径查询tools.jar的位置,并自动加载

is not a local file 的原因你可以看一下
org.jiopi.ibean.kernel.util.FileUtil.getJarDirFileByResourceURL
函数,本意是要从一个URL是Jar包中的文件时,解析出Jar文件的File对象,但奇怪你这里怎么没有盘符了?

因为要从这个Jar文件中解析Annotation,所以需要是本地文件,报这个错误是因为 isFile()函数返回了false,这个会导致没有正确解析Annotation,那么在以后的运行中就可能出问题


不过最好还是设置一下ibean.work.dir属性,用临时文件夹,特别是在windows下,目录有空格,中文,我可能在解析式没有考虑完所有的情况

感谢反馈,JIOPi主要是希望建立 模块化编程 规范,lib下只需要部署API程序,而不用部署实现类,实现类的Jar是被同一部署在一个公用远程类库里面的,实现类之间在运行时采用类似OSGi的模块分离机制,从而避Jar依赖冲突

0.2只是大概展示了一下这个技术, 不具备实用价值,目前正在完善0.3,0.3将引入完善的模块化编程 规范,并具备一定实用价值,到时候会写一份比较详细的说明文档
4 楼 zwhc 2010-05-27  
总结,简单运行了一下 HelloWorldShow ,不太明白想做什么。

最好能有个简单明了的文档。
3 楼 zwhc 2010-05-27  
另外,有这样的 WARN,最好能修正了,"is not a local file" ,这样的文件无法使用?

2010-05-27 15:06:55,640 kernel WARN  contextBlueprintConfigFile \Documents%20and%20Settings\Administrator\My%20Documents\%e4%b8%8b%e8%bd%bd\JIOPi-iBean-0.2.0.0-src\JIOPi-iBean-0.2.0.0\ibean-show\lib\iBeanWithJIOPi-0.2.0.0.jar is not a local file
2010-05-27 15:06:55,640 kernel WARN  contextBlueprintConfigFile \Documents%20and%20Settings\Administrator\My%20Documents\%e4%b8%8b%e8%bd%bd\JIOPi-iBean-0.2.0.0-src\JIOPi-iBean-0.2.0.0\ibean-show\lib\ibean.testblueprint-0.1.jar is not a local file
2 楼 zwhc 2010-05-27  
引入 jdk 下的 tools.jar 后,第一次可以运行。

第二次就报错。

以下是第三次运行的报错记录。

Exception in thread "Thread-1" java.lang.ExceptionInInitializerError
at java.io.File.deleteOnExit(File.java:939)
at org.jiopi.ibean.share.ShareUtil$MyFileLock.release(ShareUtil.java:1014)
at org.jiopi.ibean.bootstrap.util.DirLoker$LockClose.close(DirLoker.java:104)
at org.jiopi.ibean.bootstrap.CloseableManager.close(CloseableManager.java:46)
at org.jiopi.ibean.bootstrap.IBeanInitializer$1.run(IBeanInitializer.java:84)
Caused by: java.lang.IllegalStateException: Shutdown in progress
at java.lang.Shutdown.add(Shutdown.java:62)
at java.lang.System$2.registerShutdownHook(System.java:1146)
at java.io.DeleteOnExitHook.<clinit>(DeleteOnExitHook.java:20)
... 5 more
1 楼 zwhc 2010-05-27  
下载了你的原码试了一下,有 bug


java.lang.NoClassDefFoundError: com/sun/tools/attach/VirtualMachine
at org.jiopi.ibean.bootstrap.IBeanInitializer.initHotSwap(IBeanInitializer.java:174)
at org.jiopi.ibean.bootstrap.IBeanInitializer.bootstrapInitialize(IBeanInitializer.java:75)
at org.jiopi.ibean.bootstrap.IBeanInitializer.initialize(IBeanInitializer.java:58)
at org.jiopi.ibean.initializer.IBeanInitializer.iBeanInitialize(IBeanInitializer.java:183)
at org.jiopi.ibean.loader.IBeanCenterConsoleKernelLoader.loadCentralConsoleKernel(IBeanCenterConsoleKernelLoader.java:44)
at org.jiopi.framework.core.loader.CentralConsoleKernelLoaderFactory.loadCentralConsoleKernel(CentralConsoleKernelLoaderFactory.java:58)
at org.jiopi.framework.CentralConsole.<clinit>(CentralConsole.java:44)
at org.jiopi.ibean.show.helloworld.HelloWorldShow.<clinit>(HelloWorldShow.java:42)
Caused by: java.lang.ClassNotFoundException: com.sun.tools.attach.VirtualMachine
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at org.jiopi.ibean.share.LocalJarPriorClassLoader.loadClass(LocalJarPriorClassLoader.java:61)
... 8 more

相关推荐

    Java系统源码+科研工作量管理系统

    Java系统源码+科研工作量管理系统 内容概要: 本资源包含了完整的Java前后端源码及说明文档,适用于想要快速搭建并部署Java Web应用程序的开发者、学习者。 技术栈: 后端:Java生态系统,包含Spring Boot、Shiro、MyBatis等,数据库使用Mysql 前端:Vue、Bootstrap、Jquery等 适用场景示例: 1、毕业生希望快速启动一个新的Java Web应用程序。 2、团队寻找一个稳定的模板来加速产品开发周期。 3、教育机构或个人学习者用于教学目的或自学练习。 4、创业公司需要一个可以立即投入使用的MVP(最小可行产品)。

    毕业设计-智能优化之粒子群模型Python代码.rar

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、本项目仅用作交流学习参考,请切勿用于商业用途。

    Matlab实现SMA-KELM黏菌优化算法优化核极限学习机分类预测(含完整的程序,GUI设计和代码详解)

    内容概要:本文介绍了如何在MATLAB中实现结合黏菌优化算法(SMA)和核极限学习机(KELM)的分类预测模型。SMA优化KELM的超参数,提高模型的训练效率和预测精度,特别适用于处理复杂、高维数据集。文档详细阐述了项目背景、目标、挑战、模型架构、代码实现、结果展示、GUI设计、部署与应用等多个方面。 适合人群:具备一定MATLAB编程基础,对机器学习特别是优化算法和核方法感兴趣的科研人员和工程师。 使用场景及目标:①金融预测:股票价格、外汇市场等时间序列预测;②医疗诊断:疾病预测与辅助诊断;③工业故障检测:设备故障预警;④气象预测:天气变化预测;⑤市场营销:客户行为分析与预测。通过结合SMA和KELM,提升模型在高维数据上的分类和预测性能。 其他说明:文档不仅提供了详细的理论和方法介绍,还包含了完整的程序代码和GUI设计,有助于读者快速上手并应用到实际问题中。此外,文档还讨论了模型的部署、安全性和未来改进方向。

    Java jdbc for sqlserver2000 驱动包: msbase.jar;mssqlserver.jar;msutil.jar

    解压到项目下的LIB目录,在IDEA上右键,选添加为库即可。 连接代码如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class SQL { public static void main(String[] args) { String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; String connectionUrl = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=数据库名"; String username = "sa"; String password = "口令"; try { Class.forNam……

    毕业设计-神经网络图像分类代码(可直接运行).rar

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、本项目仅用作交流学习参考,请切勿用于商业用途。

    水母检测4-YOLO(v5至v9)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar

    水母检测4-YOLO(v5至v9)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar水族馆-V2释放 ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 它包括638张图像。 水族馆以可可格式注释。 将以下预处理应用于每个图像: 没有应用图像增强技术。

    电缆损坏检测8-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar

    电缆损坏检测8-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar电缆损坏-V2释放 ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 它包括1318张图像。 电缆破坏以可可格式注释。 将以下预处理应用于每个图像: 没有应用图像增强技术。

    基于java的讯友网络相册.zip

    项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!

    2024税务稽查典型案例分析(PPT格式,可编辑)

    2024年以来,税务稽查主要针对虚开骗税、骗取税收优惠、隐匿收入、虚增成本等行为,开展重点行业重点领域重点行为税收监管。本课程从案例出发,梳理稽查重点关注的问题行为,分析常见涉税疑点,供财务人员实务参考。

    content_1734090857469.docx

    content_1734090857469.docx

    阵列信号处理-MUSIC算法-幅相误差校正-协方差矩阵校正法-信噪比变化

    阵列信号处理,MUSIC算法中,使用基于协方差矩阵的幅相误差校正法实现幅相误差校正

    linux的概要介绍与分析

    以下是一个关于Linux系统管理与自动化脚本项目的资源描述及源码概要: 资源描述 本项目专注于Linux系统管理与自动化脚本开发,旨在通过一系列脚本提升系统运维效率。在资源准备阶段,我们深入研究了Linux系统架构、Shell脚本编程、以及常用系统管理命令。参考了《Linux命令行与Shell脚本编程大全》等经典书籍,以及Linux官方文档和在线社区,如Stack Overflow和Linux Academy,这些资源为我们提供了丰富的知识和实战案例。 项目实施过程中,我们利用Bash Shell作为主要脚本语言,结合sed、awk、grep等文本处理工具,以及cron作业调度器,实现了系统监控、日志分析、自动备份、用户管理等一系列自动化任务。同时,通过SSH和rsync等工具,实现了远程服务器管理和文件同步,极大地提高了运维的灵活性和效率。 项目源码概要 项目源码包含多个Shell脚本文件,每个脚本负责不同的自动化任务: system_monitor.sh:监控系统资源使用情况,如CPU、内存、磁盘空间等,并生成报告。 log_analyzer.sh:分析系统日志文件,提取关

    黑鲨4S完好机备份基带qcn 黑鲨4S基带qcn

    资源说明; 完好机备份的基带qcn文件 下载后解压 可以解决常规更新降级刷第三方导致的基带丢失。 会使用有需要的友友下载,不会使用的请不要下载 需要开端口才可以写入,不会开端口的请不要下载 希望我的资源可以为你带来帮助 谢谢 参考: https://blog.csdn.net/u011283906/article/details/124720894?spm=1001.2014.3001.5502

    javaweb学生信息管理系统-lw.zip

    项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!

    情侣恋爱主题源码LikeGirl v5.2.0最终版

    情侣恋爱主题源码LikeGirlv5.2.0最终版,经过多次更新和优化,情侣小站现已正式定版为v5.2.0。从今日起,此版本将成为项目的最终版本。 维护终止:自2024年11月7日起,情侣小站将不再接受新的功能更新或bug 修复。 用户责任:如在使用过程中遇到任何问题,请自行修复或选择放弃使用。

    基于java进销存管理系统.zip

    项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!

    园区监控方案【范本模板】.pdf

    园区监控方案【范本模板】.pdf

    基于ssm的房源管理系统源代码(java+vue+mysql+说明文档+LW).zip

    基于ssm的房源管理系统源代码(java+vue+mysql+说明文档+LW).zip

    商务大楼能源计量系统施工方法.docx

    商务大楼能源计量系统施工方法.docx

Global site tag (gtag.js) - Google Analytics