我为最终将消息放入队列的活动编写了单元测试。一旦将消息放入该队列,消息驱动bean就会开始处理。但我不想在单元测试中测试MDB。我如何告诉OpenEJB忽略它们?
我用几个属性设置了OpenEJB:
p.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.LocalInitialContextFactory");
p.setProperty("openejb.deployments.classpath.include", ".*");
p.setProperty("openejb.localcopy", "false");
// Messaging
p.put("MyJmsResourceAdapter",
"new://Resource?type=ActiveMQResourceAdapter");
// Do not start the ActiveMQ broker
p.put("MyJmsResourceAdapter.BrokerXmlConfig", "");
p.put("MyJmsConnectionFactory",
"new://Resource?type=javax.jms.ConnectionFactory");
p.put("MyJmsConnectionFactory.ResourceAdapter", "MyJmsResourceAdapter");
p.put("queue/MyQueue",
"new://Resource?type=javax.jms.Queue");我知道我必须设置openejb.deployments.classpath.exclude,但是我找不到正确的值:
p.setProperty("openejb.deployments.classpath.exclude", "org.example.mdb.*");例如,我的类名为org.example.mdb.MyMDB。
发布于 2011-02-22 03:16:44
我的两点意见是:
".*org/example/mdb.*" or ".*org.example.mdb.*"
".*org/example/mdb.*" or ".*org.example.mdb.*"注在缺省情况下,这些设置只会在没有找到描述符时影响OpenEJB扫描带注释的组件的jars。如果您希望使用这些设置也过滤掉包含描述符的jars,请将
openejb.deployments.classpath.filter.descriptors
属性设置为true。缺省值为false
发布于 2011-03-20 11:48:44
我们没有这个特性,但是如果你想做一点修改的话,可以很容易地添加它--新的贡献和贡献者总是受欢迎的。
This class会完全按照你的要求去做。还有一些您可能不想要的东西:)它剥离了所有MDB和JMS资源引用(好的部分),并且剥离了所有实体bean和持久性单元引用(您可能不想要的部分)。我们之所以写它,是因为在加载ActiveMQ或OpenJPA时出现了一些调试问题。如果你把它清理干净了,我们很乐意收回它,并将其作为一个特性来支持。
还有一个类似的特性,即strips out all web services。如果设置了特定的系统属性,它将安装在ConfigurationFactory中。在ConfigurationFactory中基本上相同位置使用类似的标志插入"MDB & JMS“删除程序应该很容易
事实上,由于在OpenEJB中,所有注释和XML元数据都被合并到一个对象树(也是一个JAXB树)中,因此您可以在实际部署应用程序之前对其进行非常强大的转换。例如,用模拟版本替换特定的bean。
我认为其中的一件事会成为一个很好的功能,但还没有时间去做。例如,在我们将树发送到部署之前,做一些干净的钩子让人们弄乱它。任何阅读这篇文章的人都欢迎加入并尝试一下(耶,开源!)。
https://stackoverflow.com/questions/4875899
复制相似问题