用于测试 EJB 的 JUnit 和 OpenEJB 中的问题

问题描述

我是单元测试的初学者。我在 Eclipse Kepler 和 Maven 以及 jboss 5.0 和 Java 8 中构建了一个 EJB 应用程序。 我想用 JUnit 和 openEJB 测试 EJB,但是当我想配置时,我遇到了问题。我正在努力解决这个问题

org.apache.openejb.OpenEjbContainer$InitializationException: java.lang.IllegalArgumentException
    at org.apache.openejb.OpenEjbContainer$Provider.createEJBContainer(OpenEjbContainer.java:414)
    at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:56)
    at ir.simorgh.stateless.LibraryPersistentBeanTest.setUp(LibraryPersistentBeanTest.java:22)
    at junit.framework.TestCase.runBare(TestCase.java:140)
    at junit.framework.TestResult$1.protect(TestResult.java:122)
    at junit.framework.TestResult.runProtected(TestResult.java:142)
    at junit.framework.TestResult.run(TestResult.java:125)
    at junit.framework.TestCase.run(TestCase.java:130)
    at junit.framework.TestSuite.runTest(TestSuite.java:241)
    at junit.framework.TestSuite.run(TestSuite.java:236)
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:90)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.IllegalArgumentException
    at org.apache.xbean.asm5.ClassReader.<init>(UnkNown Source)
    at org.apache.xbean.asm5.ClassReader.<init>(UnkNown Source)
    at org.apache.xbean.asm5.ClassReader.<init>(UnkNown Source)
    at org.apache.openejb.util.AnnotationFinder.readClassDef(AnnotationFinder.java:299)
    at org.apache.openejb.util.AnnotationFinder.find(AnnotationFinder.java:164)
    at org.apache.openejb.config.DeploymentLoader.checkAnnotations(DeploymentLoader.java:2008)
    at org.apache.openejb.config.DeploymentLoader.discoverModuleType(DeploymentLoader.java:1891)
    at org.apache.openejb.config.DeploymentsResolver.processUrls(DeploymentsResolver.java:389)
    at org.apache.openejb.config.DeploymentsResolver.loadFromClasspath(DeploymentsResolver.java:302)
    at org.apache.openejb.config.ConfigurationFactory.getModulesFromClasspath(ConfigurationFactory.java:664)
    at org.apache.openejb.OpenEjbContainer$Provider.load(OpenEjbContainer.java:511)
    at org.apache.openejb.OpenEjbContainer$Provider.createEJBContainer(OpenEjbContainer.java:309)
    ... 16 more

这是我的 oracle-ds.xml:

<!DOCTYPE xml>
<datasources>
    <local-tx-datasource>
        <jndi-name>OracleDS</jndi-name>
        <connection-url>url</connection-url>
        <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
        <user-name>user</user-name>
        <password>pass</password>
        <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
        <min-pool-size>5</min-pool-size>
        <max-pool-size>100</max-pool-size>
        <idle-timeout-minutes>5</idle-timeout-minutes>
        <Metadata>
            <type-mapping>Oracle9i</type-mapping>
        </Metadata>
    </local-tx-datasource>
</datasources>

这里是persistence.xml文件

<persistence version="1.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
    <persistence-unit name="EjbComponentPU" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:/OracleDS</jta-data-source>
        <class>ir.simorgh.entity.Book</class>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9iDialect" />
        </properties>
    </persistence-unit>
</persistence>

这是我的测试:

package ir.simorgh.stateless;

import ir.simorgh.stateless.LibraryPersistentBean;
import java.util.Properties;
import javax.ejb.EJB;
import javax.ejb.embeddable.EJBContainer;
import javax.naming.Context;

import junit.framework.TestCase;

public class LibraryPersistentBeanTest extends TestCase {
    @EJB
    private LibraryPersistentBean libraryPersistentBean;

    private Context initialContext;

    protected void setUp() throws Exception {
        final Properties props = new Properties();
        props.put("OracleDS","new://Resource?type=DataSource");
        props.put("OracleDS.jdbcDriver ","org.hsqldb.jdbcDriver");
        props.put("OracleDS.jdbcUrl ","jdbc:hsqldb:mem:moviedb");
        props.put("EjbComponentPU.hibernate.dialect ","org.hibernate.dialect.HsqlDialect");
        initialContext = EJBContainer.createEJBContainer(props).getContext();
    }

    public void test() throws Exception {
        Object obj = initialContext.lookup("LibraryPersistentBeanRemote");
        assertNotNull(obj);
        assertTrue(obj instanceof LibraryPersistentBeanRemote);
    }
}

提前致谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)