2012-12-08 28 views
0

虽然executin测试(测试看起来像这样:http://tomee.apache.org/examples-trunk/application-composer/README.html),我总是得到:的Maven,JUnit中,OpenEJB的,ApplicationComposer导致java.lang.NoSuchMethodError

java.lang.NoSuchMethodError: org.apache.openejb.jee.ManagedBean.<init>(Ljava/lang/String;Ljava/lang/String;Z)V 
    at org.apache.openejb.junit.ApplicationComposer$DeployApplication.evaluate(ApplicationComposer.java:194) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:157) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:76) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 

我尝试以获得使用Maven所有的依赖关系。这里是依赖关系列表:

<dependency> 
      <groupId>javax.faces</groupId> 
      <artifactId>jsf-api</artifactId> 
      <version>2.1</version> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.21</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.openejb</groupId> 
      <artifactId>javaee-api</artifactId> 
      <version>6.0-4</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.openejb</groupId> 
      <artifactId>openejb-jee</artifactId> 
      <version>4.0.0-beta-1</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.openjpa</groupId> 
      <artifactId>openjpa-persistence-jdbc</artifactId> 
      <version>2.2.0</version> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.10</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.openejb</groupId> 
      <artifactId>openejb-junit</artifactId> 
      <version>4.5.0</version> 
     </dependency> 
<dependency> 
      <groupId>javax.persistence</groupId> 
      <artifactId>persistence-api</artifactId> 
      <version>1.0.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.primefaces</groupId> 
      <artifactId>primefaces</artifactId> 
      <version>3.4.2</version> 
     </dependency> 

测试应检查一个EJB-DAO。它用于在数据库中编写一个实体,并再次将其从中取出。下面是测试代码:

import com.dlrg.dao.impl.RadioMessageDAOImp; 
import com.dlrg.entity.RadioMessage; 
import org.apache.openejb.jee.EjbJar; 
import org.apache.openejb.jee.StatefulBean; 
import org.apache.openejb.jee.jpa.unit.PersistenceUnit; 
import org.apache.openejb.junit.ApplicationComposer; 
import org.apache.openejb.junit.Configuration; 
import org.apache.openejb.junit.Module; 
import org.junit.Assert; 
import org.junit.Test; 
import org.junit.runner.RunWith; 

import javax.annotation.Resource; 
import javax.ejb.EJB; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 
import javax.transaction.UserTransaction; 
import java.util.List; 
import java.util.Properties; 

@RunWith(ApplicationComposer.class) 
public class RadioMessageDAOTest { 

    @EJB 
    private RadioMessageDAOImp radioMessageDAO; 

    @Resource 
    private UserTransaction userTransaction; 

    @PersistenceContext 
    private EntityManager entityManager; 

    @Configuration 
    public Properties config() throws Exception { 
     Properties p = new Properties(); 
     p.put("MySQLtest", "new://Resource?type=DataSource"); 
     p.put("MySQLtest.JdbcDriver", "org.hsqldb.jdbcDriver"); 
     p.put("MySQLtest.JdbcUrl", "jdbc:hsqldb:file:data/hsqldb/hsqldb"); 
     return p; 
    } 

    @Module 
    public PersistenceUnit persistence() { 
     PersistenceUnit unit = new PersistenceUnit("radio-unit"); 
     unit.setJtaDataSource("MySQLtest"); 
     unit.setNonJtaDataSource("radioDatabaseUnmanaged"); 
     unit.getClazz().add(RadioMessage.class.getName()); 
     unit.setProperty("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=true)"); 
     return unit; 
    } 

    @Module 
    public EjbJar beans() { 
     EjbJar ejbJar = new EjbJar("radio-beans"); 
     ejbJar.addEnterpriseBean(new StatefulBean(RadioMessageDAOImp.class)); 
     return ejbJar; 
    } 



    @Test 
    public void test() throws Exception { 

     userTransaction.begin(); 

     try { 
      entityManager.persist(new RadioMessage()); 

      List<RadioMessage> list = radioMessageDAO.getAll(); 
      Assert.assertEquals(1, list.size()); 

      for (RadioMessage movie : list) { 
       radioMessageDAO.delete(movie); 
      } 

      Assert.assertEquals(0, radioMessageDAO.getAll().size()); 

     } finally { 
      userTransaction.commit(); 
     } 
    } 
} 
+0

这看起来像您的依赖项中的不兼容性。你确定所有的openejb东西都合在一起吗? – sorencito

回答

0

而是使用

org.apache.openejb OpenEJB的-JEE 4.5.0

你是混合的测试版本和4.5.0版本OpenEjb的东西。这是行不通的。

相关问题