【问题标题】:Set openejb javaagent in code?在代码中设置openejb javaagent?
【发布时间】:2014-05-16 22:05:07
【问题描述】:

我目前正在为 Java EE 应用程序编写集成测试并使用 openejb/openjpa。 但是当我使用 CMP 时,我必须使用 javaagent 来增强我的类。在 maven 中,我可以配置我的 surefire 插件来执行此增强功能,或者更好地将代理设置为测试的 vm 参数。

但由于我目前正在开发,我喜欢经常在 Eclipse 中运行我的测试。但是我不想一直通过

设置代理
java -javaagent:openejb-javaagent-4.6.0.jar _\[other params...](other-params....html)

有人对此问题有有用的解决方案吗?

【问题讨论】:

    标签: eclipse maven integration-testing openjpa openejb


    【解决方案1】:

    为了在 Eclipse 中进行测试,我总是创建一个可在运行配置的 VM 参数部分中使用的变量。这样,您只需要指定 ${agent}(或您所称的任何名称)之类的东西,而不是完整的 javaagent 字符串。

    【讨论】:

    • 谢谢瑞克。这也是我目前看到的唯一解决方案。
    【解决方案2】:

    嗯,但不确定,看看我的属性,我的类应该在运行时增强:

    @Before
    public void startupContainer() throws NamingException {
        Properties p = new Properties();
        p.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=true)");
        p.put("openjpa.jdbc.DBDictionary", "hsql(SupportsSelectForUpdate=true)");
        p.put("openejb.embedded.initialcontext.close", "destroy");
        p.put("openjpa.RuntimeUnenhancedClasses", "supported");
        p.put("openjpa.DynamicEnhancementAgent", "true");
        p.put("javax.persistence.lock.timeout", "0");
        p.put("openejb.log.factory", "slf4j");
    
        ejbContainer = EJBContainer.createEJBContainer(p);
    }
    

    【讨论】:

    • 请不要那样做! openjpa.RuntimeUnenhancedClasses 默认是禁用的,因为它有很多错误,除了让人头疼之外什么都做不了。
    • 它不是生产代码,它只是用于集成测试一个 jboss 应用程序
    • 这意味着您测试的代码路径与您在生产中使用的不同。
    • 是的,但是有很多测试,我们使用 Junit-Tests 进行 TDD,openejb/openjpa 进行集成测试,在打包应用程序时运行,并且每晚针对安装的夜间构建版本进行系统测试在 jboss 上。
    • 我只是警告您会遇到 RuntimeUnenhancedClasses 的错误,解决这些错误的方法是使用不同的增强方法。
    猜你喜欢
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 2011-08-09
    • 1970-01-01
    相关资源
    最近更新 更多