如何解决用于测试 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 举报,一经查实,本站将立刻删除。