MyBatis + OSGi:如何动态删除映射器

时间:2014-06-15 18:33:57

标签: java orm osgi mybatis ibatis

我有和OSGi架构,我使用xml mappers +接口(因为它是推荐的)。

Mybatis配置文件我放在glassfish / domains / domain1 / config文件夹中。首次调用MyBatisConnectionFactory时会加载此配置。没关系。

现在每个捆绑包都有自己的映射器。我可以通过添加

动态添加它们

com.acme.myproject.MyMapper和com / acme / myproject / MyMapper.xml到相关文件夹并在Activator中

public void start(BundleContext context) throws Exception {
    getSqlSessionFactory().getConfiguration().addMapper(MyMapper.class);
}

似乎有效。当我的包开始时,映射器被添加到配置中。问题是,如果我更新捆绑包更改,则在重新启动glassfish域之前不会生效。据我所知,我必须首先删除以前的映射器,但无法找到方法。求你帮帮我。

2 个答案:

答案 0 :(得分:1)

BundleActivator也有一个stop()方法,当一个bundle停止时会调用它,但是因为iBatis / MyBatis似乎没有removeMapper()方法或者等价的方法,所以它不会起作用 - 这意味着动态删除映射的唯一方法是关闭它并重新启动它......

答案 1 :(得分:1)

看起来这个问题在几年前作为MyBatis问题打开,并以赢得修复结束,但他们确实提供了一种解决方法:http://code.google.com/p/mybatis/issues/detail?id=98。< / p>

代码链接不起作用,但概念性解决方法仍然存在,并且可能会在log4j内跟踪相关文件。

以下是存储代码的地方,它来自Maven Centralhttp://grepcode.com/file/repo1.maven.org/maven2/log4j/log4j/1.2.14/org/apache/log4j/helpers/FileWatchdog.java

简而言之,他们建议:

  

您只需要重新加载SqlSessionFactory来拨打电话   当您检测到文件已更改时,SqlSessionFactoryBuilder.build