2011-02-02 34 views
1

我写一个单元测试用于这最终将消息放入到队列中的活动。只要将消息放入该队列,消息驱动的bean就开始处理。但我不想在单元测试中测试MDB。我如何告诉OpenEJB忽略它们?给OpenEJB的忽略MDB

我成立了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

+0

这属性没有在classpath中过滤个人类,但实际的类路径本身。即罐子和目录成为部署的“模块”。我们绝对需要一个类似的功能来包含/排除个别课程。会非常有用。 – 2011-03-20 03:54:42

回答

1

只是我的2美分:

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

    注意默认情况下这些设置将 只影响其罐子OpenEJB的将 扫描的注释组件时没有找到 描述符。如果您想 使用这些设置还筛选出 罐子确实包含描述, 设置

    openejb.deployments.classpath.filter.descriptors

    属性为true。默认为false

+1

这是第一个表达式“。* org/example/mdb。*”。 OpenEJB排除并包含基于类路径值的类,因此必须使用“/”作为分隔符。在你的情况下,另一个选项可能是“。*/MyMDB。*”,或者如果你使用“MDB”作为消息驱动Bean的后缀,只需“。* /。* MyMDB。*” – magarciaschopohl 2013-10-16 14:59:00

1

我们没有这样的功能,但如果你想要做一个小的黑客很容易就会被添加 - 新的贡献和贡献者总是受欢迎的。

This class会做你想要的东西......以及一些你可能不想要的东西:)它去掉所有的MDB和JMS资源引用(好的部分),它去掉所有的实体bean和持久化单元引用(你可能不想要的部分)。我们编写它是因为我们在加载ActiveMQ或OpenJPA时遇到的一些调试问题。如果你把它清理干净,我们会高兴地收回并支持它作为一项功能。

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

实际上使用类似的标志,在基本相同的地方插上了“MDB & JMS”卸妆因为OpenEJB的所有注解和XML元数据合并到一个对象树(这也是一个JAXB树),您可以在实际部署之前对应用程序进行非常强大的转换。举例来说,换出特定的豆来模拟版本。

其中的一个事情,我觉得会使一个极好的功能,但尚未有工作的时间。即在我们发送它进行部署之前,让人们在树上弄乱一些干净的钩子。任何阅读此文的人都可以跳进来并尝试一下(yay开源!)。