Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue with audit4j 2.5.0 using embedded DatabaseAuditHandler #14

Open
franck-benault opened this issue Jan 13, 2018 · 3 comments
Open

Comments

@franck-benault
Copy link

The following test fails

@Test
public void testSendEvents() {
    Configuration conf = new Configuration();
    List<Handler> handlers = new ArrayList<Handler>();
    DatabaseAuditHandler handler = new DatabaseAuditHandler();
    handlers.add(handler);
    conf.setHandlers(handlers);
    conf.setLayout(new SimpleLayout());
    conf.setMetaData(new DummyMetaData());
            
    AuditManager manager = (AuditManager) AuditManager.startWithConfiguration(conf);
    AuditEvent auditEvent = new EventBuilder().addActor("Init Actor").addAction("Init").addField("Init Param", "Init")
            .build();
    manager.audit(auditEvent);
    
    AuditManager.shutdown();				
}

The log contains the error
[ringBuffer-18] ERROR reactor.core.action.CallbackAction - org.audit4j.core.handler.Handler.handle(Lorg/audit4j/core/dto/AuditEvent;)V
java.lang.AbstractMethodError: org.audit4j.core.handler.Handler.handle(Lorg/audit4j/core/dto/AuditEvent;)V
at org.audit4j.core.AuditEventProcessor.executeHandlers(AuditEventProcessor.java:73)
at org.audit4j.core.AuditEventProcessor.process(AuditEventProcessor.java:47)
at org.audit4j.core.io.AuditProcessOutputStream.write(AuditProcessOutputStream.java:55)
at org.audit4j.core.io.AuditProcessOutputStream.write(AuditProcessOutputStream.java:31)
at org.audit4j.core.io.AsyncAuditOutputStream$1.accept(AsyncAuditOutputStream.java:81)
at org.audit4j.core.io.AsyncAuditOutputStream$1.accept(AsyncAuditOutputStream.java:78)
at reactor.function.support.Boundary$1.accept(Boundary.java:67)
at reactor.core.action.CallbackAction.doAccept(CallbackAction.java:36)
at reactor.core.action.Action.accept(Action.java:52)
at reactor.core.action.Action.accept(Action.java:32)
at reactor.event.routing.ArgumentConvertingConsumerInvoker.invoke(ArgumentConvertingConsumerInvoker.java:73)
at reactor.event.routing.ConsumerFilteringEventRouter.route(ConsumerFilteringEventRouter.java:78)
at reactor.event.dispatch.AbstractLifecycleDispatcher.route(AbstractLifecycleDispatcher.java:64)
at reactor.event.dispatch.AbstractSingleThreadDispatcher$SingleThreadTask.run(AbstractSingleThreadDispatcher.java:50)
at reactor.event.dispatch.RingBufferDispatcher$3.onEvent(RingBufferDispatcher.java:115)
at reactor.event.dispatch.RingBufferDispatcher$3.onEvent(RingBufferDispatcher.java:112)
at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:128)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

There is no problem with ConsoleAuditHandler
There was no problem with the version 2.4.1 of audit4j

Could you please help me ?

Regards Franck

@franck-benault
Copy link
Author

add conf.setCommands("-batchSize=4");

@franck-benault
Copy link
Author

With the code

@Test
public void testSendEvents() {
    Configuration conf = new Configuration();
    List<Handler> handlers = new ArrayList<Handler>();
    DatabaseAuditHandler handler = new DatabaseAuditHandler();
    handlers.add(handler);
    conf.setHandlers(handlers);
    conf.setLayout(new SimpleLayout());
    conf.setMetaData(new DummyMetaData());
    conf.setCommands("-batchSize=4");
            
    AuditManager manager = (AuditManager) AuditManager.startWithConfiguration(conf);
    AuditEvent auditEvent = new EventBuilder().addActor("Init Actor").addAction("Init").addField("Init Param", "Init")
            .build();
    manager.audit(auditEvent);
    
    AuditManager.shutdown();				
}

now I have a NullPointerException on AuditManager.shutdown();

java.lang.NullPointerException
at org.audit4j.handler.db.DatabaseAuditHandler.handle(DatabaseAuditHandler.java:269)
at org.audit4j.core.AuditEventProcessor.executeHandlers(AuditEventProcessor.java:96)
at org.audit4j.core.AuditEventProcessor.processBatch(AuditEventProcessor.java:57)
at org.audit4j.core.io.AuditProcessOutputStream.writeBatch(AuditProcessOutputStream.java:61)
at org.audit4j.core.io.BatchProcessStream.writeBatch(BatchProcessStream.java:59)
at org.audit4j.core.io.BatchProcessStream.close(BatchProcessStream.java:66)
at org.audit4j.core.io.AsyncAuditOutputStream.close(AsyncAuditOutputStream.java:137)
at org.audit4j.core.io.MetadataLookupStream.close(MetadataLookupStream.java:77)
at org.audit4j.core.io.AuditEventOutputStream.close(AuditEventOutputStream.java:113)
at org.audit4j.core.Context.stop(Context.java:251)
at org.audit4j.core.AuditManager.shutdown(AuditManager.java:214)
at org.audit4j.benchmark.DatabaseHandlerEmbededBenchmarksTest2.testSendEvents(DatabaseHandlerEmbededBenchmarksTest2.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

Could you please help me ?

Regards Franck

@janithb
Copy link
Contributor

janithb commented Jan 15, 2018

First error is due to different compiled versions of Handler Abstract class, specially in overloaded handle methods.
https://docs.oracle.com/javase/7/docs/api/java/lang/AbstractMethodError.html

To fix this, you need to re-compile the latest version(2.6.0) of audit4j-core then refer 2.6.0 in audit4j-db handler then recompile audit4j-db handler.

Because of this issue, I'm worrying that audit4j-core will not have backward compatibility with handler plugins after 2.6.0.

I agree with your second fix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants