当前位置: 首页 > 知识库问答 >
问题:

如何在OSGI环境中避免MyBatis的类加载问题?

姬英武
2023-03-14

我正在开发一个具有多个模块的基于Eclipse3.7RCP的应用程序。模块A是一系列库,包括MyBatis-3.2.2.jar。模块B依赖于模块A(manifest.mf中的Require-Bundle),并具有使用MyBatis访问数据库中数据的代码。我在模块B中导出了带有映射器类和XML的包,并在模块A中导入了它们。我正在代码中构建SqlSessionFactory,如果我按名称添加所有映射器类,它就可以正常工作。

configuration.addMapper(MyMapper.class);
configuration.addMappers(MyMapper.class.getPackage().getName());

我尝试改变默认的类加载器,但这没有帮助。

Resources.setDefaultClassLoader(this.getClass().getClassLoader());

我怀疑这个问题与OSGI环境中类的可见性有关。如果是这种情况,有什么方法可以在应用程序中修复它吗?

共有1个答案

傅越
2023-03-14

你试过了吗

resources.setDefaultClassLoader(activator.class.getClassLoader())。我认为这将为包使用OSGi类加载器。希望这能有所帮助。

 类似资料:
  • 问题内容: 我使用了来自Maven回购的log4j-1.2.17捆绑包。我尝试在捆绑软件中执行此代码(我的捆绑软件调用了log4j-1.2.17捆绑软件) 但是我有错误 捆绑包已按顺序加载 如何解决这个错误?拜托,对不起我的英语。最好的问候,亚瑟。 问题答案: 由于您的Log4j类似乎已由sun.misc类加载器加载,我认为某些东西正在从OSGi外部提供log4j类。有Log4J条目解释了为什么它

  • 我正在制作一个捆绑包,插入OSGi,为用户提供一个功能: 所以这是我的问题:我只有我的包的类加载器,我如何才能得到OSGi容器类加载器,我可以从整个OSGi容器中按名称加载类?(我希望当OSGi启动时,它会加载所有的包和所有的类到内存中,任何类都可以被OSGi容器类加载器加载,如果它真的存在并且能够) 有人知道怎么做这项工作吗?高度赞赏示例代码。

  • 我正在进行一个使用 spring 3.2.5 .发布hibernate 4.2.15 .最终版karaf 3.0.x 安装自定义包(包含所有实体类)时,<code>抛出PersistentClass名称不能转换为类</code>异常 请在下面找到我的karaf捆绑包列表 查找以下例外 我猜,实体类扫描不正常。这是我的配置 编辑: 请查找以下清单标题条目 我不能解决这个问题。如果任何人有想法,请与我

  • 如果我有一个班级ProfessorDto和一个班级StudentDto,如果ProfessorDto有一个StudentDto列表,StudentDto有一个ProfessorDto类型的属性,我如何避免循环问题?我没有给出域类的代码,但假设它与Dto的代码相同。 我是Mapstruct的新手,将域bean转换为具有简单属性的Dto,如Long,String正在工作,但在我的示例中,关系OneTo

  • 问题内容: 我知道python中的循环导入问题已经出现过很多次了,我已经阅读了这些讨论。在这些讨论中反复提出的意见是,循环导入表明设计不良,应重新组织代码以避免循环导入。 有人可以告诉我在这种情况下如何避免循环导入吗?:我有两个类,并且我希望每个类都有一个构造函数(方法),该构造函数接受另一个类的实例并返回该类的实例。 更具体地说,一类是可变的,一类是不变的。哈希,比较等需要不可变的类。可变类也需