2016-07-01 18 views
0

fand ich habe folgendes Problem:org.apache.log4j.Logger Klasse nicht in Integrationstest mit Arquillian

Umwelt:

  1. Weblogic 12.1.3
  2. MySQL
  3. Gradle
  4. Log4j

Selledlib:

-rwxrwxrwx 1 josediaz staff  0B Jan 19 17:06 Readme.txt 
drwxrwxrwx 2 josediaz staff 68B Mar 31 20:48 build 
-rwxr-xr-x 1 josediaz staff 1.1K Jun 30 01:05 build.gradle 
drwxrwxrwx 9 josediaz staff 306B Jul 1 01:31 dao-ifz.jar 
drwxrwxrwx 10 josediaz staff 340B Jul 1 01:31 dao-imp.jar 
drwxrwxrwx 5 josediaz staff 170B Mar 31 20:48 dependencias 
drwxrwxrwx 9 josediaz staff 306B Jul 1 01:31 model.jar 
drwxrwxrwx 9 josediaz staff 306B Jul 1 01:31 service-ifz.jar 
drwxrwxrwx 9 josediaz staff 306B Jul 1 01:31 service-imp.jar 
-rwxr-xr-x 1 josediaz staff 578B Apr 27 23:02 settings.gradle 
drwxrwxrwx 11 josediaz staff 374B Jul 1 01:31 slb.ear 
drwxr-xr-x 11 josediaz staff 374B Jul 1 01:31 test.jar 

Ich habe ein JPAPersonDAO in meinem dao-imp meiner sharedlib und ich bin mit log4j für die Protokollierung tun:

@Stateless 
public class JPAPersonDAO implements PersonDAO { 



    private static final Logger LOG = Logger.getLogger(JPAPersonDAO.class); 

    @PersistenceContext(unitName = "persistence-unit") 
    private EntityManager entityManager; 


    @SuppressWarnings("unchecked") 
    @Override 
    public List<Person> findPersons(int startPosition, int maxResults, String sortFields, String sortDirections) { 

     LOG.warn("warn"); 
     LOG.info("info"); 
     LOG.trace("trace"); 
     LOG.debug("debug"); 
     LOG.error("error"); 
     LOG.fatal("fatal"); 



     return entityManager 
       .createNativeQuery("select * from person order by name limit " + startPosition + "," + maxResults, 
         Person.class) 
       .getResultList(); 

    } 

Das ist mein log4j.properties:

log4j.rootLogger=INFO, stdout, file 

log4j.debug=true 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=[%d] %-5p %c %x - %m%n 

log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.File=/Users/josediaz/Projects/logs/logging_sharedlib.log 
log4j.appender.file.Append = false 
log4j.appender.file.layout = org.apache.log4j.PatternLayout 
log4j.appender.file.MaxFileSize = 20000Kb 
log4j.appender.file.MaxBackupIndex = 5 
log4j.appender.file.layout.ConversionPattern=[%d] %-5p %c %x - %m%n 


log4j.category.com.theserverlabs.blog.wls=DEBUG 

Wenn Ich habe meine sharedlib und andere EAR verwendet es verwenden, wird das Protokoll ohne Probleme generiert.

Das Problem

Ich füge ein Testprojekt mit einem Integrationstest in Arquillian basiert.

@RunWith(Arquillian.class) 
public class NativeSqlTest { 


    @Inject 
    PersonDAO dao; 

    @Deployment 
    public static WebArchive createDeployment() { 
     return ShrinkWrap.create(WebArchive.class) 
       .addClasses(PersonDAO.class, JPAPersonDAO.class, Person.class, Profiled.class, 
         ProfilingInterceptor.class) 
       .addAsWebInfResource("test-beans.xml", "beans.xml") 
       .addAsResource("test-persistence.xml", "META-INF/persistence.xml"); 
    } 

    /** 
    * In the test, we're just going to invoke the only available operation in 
    * the +EmployeeBean+ and assert a few details to confirm that the native 
    * query was successfully executed. 
    */ 
    @Test 
    public void testNativeSql() { 



     int result = dao.countPersons(); 
     assertTrue(result > 0); 
    } 
} 

Ob ich diesen Test von meinem IDE ausführen oder gradle clean build von Terminal aufrufen, ich folgende Fehlermeldung erhalten:

org.jboss.arquillian.container.spi.client.container.DeploymentException: Deployment Failed on server: java.lang.ClassNotFoundException: org.apache.log4j.Logger

Was mache ich falsch?

+1

Ich frage mich, ob das Hinzufügen von 'Logger.class' in Ihrem' @ Deployment' das Problem lösen kann? Weil Ihre Klasse 'JPAPersonDAO'' Logger.class' verwendet, aber der Logger nicht in Ihrer Bereitstellung geliefert wird. –

+0

Ich füge diese zu meinen Code: \t \t Rückkehr ShrinkWrap.create (WebArchive.class "testSharedlib.war") \t \t \t \t .addClasses (PersonDaoHibernate.class, JPAPersonDAO.class, Person.class, Profiled.class, \t \t \t \t \t \t ProfilingInterceptor.class, Logger.class) und die Fehleränderung verursacht durch: java.lang.RuntimeException: java.lang.ClassNotFoundException: org.apache.log4j.Category –

Antwort

3

Danke Mincong Huang Ihr Vorschlag war grundlegend. Ich habe dies meiner Bereitstellung hinzugefügt .addPackages (true, "org.apache.log4j") und Test bestanden.

@Deployment 
public static WebArchive createDeployment() { 
    return ShrinkWrap.create(WebArchive.class, "testSharedlib.war") 
      .addClasses(PersonDAO.class, JPAPersonDAO.class, Person.class, Profiled.class, 
        ProfilingInterceptor.class) 
      .addPackages(true, "org.apache.log4j") 
      .addAsResource("test-persistence.xml", "META-INF/persistence.xml") 
      .addAsResource("log4j.xml")    
      .addAsWebInfResource("test-beans.xml", "beans.xml"); 

} 

Vielen Dank.

+0

Sie sind willkommen. Happy coding :) –

+0

Andere Option wäre Maven Resolver und ziehen Sie in dieser Abhängigkeit als ein Glas. Dann würden Sie es einfach als Bibliothek zur endgültigen '.war' Datei hinzufügen. –

Verwandte Themen