告诉OpenEJB忽略MDB

时间:2011-02-02 14:56:19

标签: java message-driven-bean openejb

我为一个活动编写了一个单元测试,最终将一条消息放入队列中。只要将消息放入该队列,消息驱动的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

2 个答案:

答案 0 :(得分:1)

只是我的2美分:

  • 尝试".*org/example/mdb.*" or ".*org.example.mdb.*"
  • 来自Loading Deployments from the Classpath

      

    默认情况下请注意这些设置   只影响OpenEJB的罐子   当没有时,扫描注释的组件   找到描述符。如果你愿意   使用这些设置也可以过滤   包含描述符的罐子,   

         

    openejb.deployments.classpath.filter.descriptors

         

    属性为true。默认值为false

  •   

答案 1 :(得分:1)

我们没有这个功能,但是如果你想做一点点黑客攻击可以轻松添加它 - 新的贡献和贡献者总是受欢迎。

This class将完全按照您的要求执行...以及您可能不想要的一些事情:)它删除所有MDB和JMS资源引用(好的部分)并删除所有实体bean和持久性单元引用(您可能不想要的部分)。我们编写它是因为在加载ActiveMQ或OpenJPA时我们遇到了一些调试问题。如果你把它清理干净了,我们很乐意收回它并支持它作为一个功能。

strips out all web services的类似功能。如果设置了特定的系统属性,它将安装在ConfigurationFactory中。应该很容易在ConfigurationFactory

基本相同的位置使用类似的标志插入“MDB& JMS”去除器

实际上,因为在OpenEJB中,所有注释和xml元数据都合并到一个对象树(也是一个JAXB树)中,所以在实际部署之前,您可以对应用程序进行非常强大的转换。比如说换掉模拟版本的特定bean。

我认为其中一件事会成为一个很好的功能,但还没有时间去研究。即在我们将它发送出去进行部署之前,为人们弄乱了一些干净的钩子。任何阅读此内容的人都欢迎您加入并采取行动(耶和开源!)。