fand ich habe folgendes Problem:org.apache.log4j.Logger Klasse nicht in Integrationstest mit Arquillian
Umwelt:
- Weblogic 12.1.3
- MySQL
- Gradle
- 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?
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. –
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 –