java告诉OpenEJB忽略MDB
我为一个活动编写了一个单元测试,最终将消息放入队列。一旦消息被放入该队列,消息驱动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
# 1 楼答案
就我的2美分:
".*org/example/mdb.*" or ".*org.example.mdb.*"
# 2 楼答案
我们没有这个功能,但是如果你想做一点修改的话,可以很容易地添加它。新的贡献和贡献者总是受欢迎的
This class会做你想做的事。。。还有一些您可能不想要的东西:)它去掉了所有MDB和JMS资源引用(好的部分),去掉了所有实体bean和持久化单元引用(您可能不想要的部分)。我们之所以编写它,是因为在加载ActiveMQ或OpenJPA时遇到了一些调试问题。如果你把它清理干净了,我们很乐意把它拿回来,并支持它作为一个功能
有一个类似的特性strips out all web services。如果设置了特定的系统属性,它将安装在ConfigurationFactory中。在
ConfigurationFactory
中基本相同的位置使用类似的标志插入“MDB&;JMS”移除程序应该很容易事实上,因为在OpenEJB中,所有注释和xml元数据都合并到一个对象树(也是一个JAXB树)中,所以在实际部署应用程序之前,您可以对其进行非常强大的转换。比如说,将特定bean替换为模拟版本
我认为其中的一个功能会非常出色,但还没有时间去做。也就是说,在我们把树送出去部署之前,制作一些干净的钩子,让人们把树弄乱。欢迎阅读本文的任何人加入并尝试一下(耶,开源!)