我有和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域之前不会生效。据我所知,我必须首先删除以前的映射器,但无法找到方法。求你帮帮我。
答案 0 :(得分:1)
BundleActivator也有一个stop()方法,当一个bundle停止时会调用它,但是因为iBatis / MyBatis似乎没有removeMapper()方法或者等价的方法,所以它不会起作用 - 这意味着动态删除映射的唯一方法是关闭它并重新启动它......
答案 1 :(得分:1)
看起来这个问题在几年前作为MyBatis
问题打开,并以赢得修复结束,但他们确实提供了一种解决方法:http://code.google.com/p/mybatis/issues/detail?id=98。< / p>
代码链接不起作用,但概念性解决方法仍然存在,并且可能会在log4j
内跟踪相关文件。
以下是存储代码的地方,它来自Maven Central
:
http://grepcode.com/file/repo1.maven.org/maven2/log4j/log4j/1.2.14/org/apache/log4j/helpers/FileWatchdog.java
简而言之,他们建议:
您只需要重新加载
SqlSessionFactory
来拨打电话 当您检测到文件已更改时,SqlSessionFactoryBuilder.build
。