I am trying to log exceptions, some entry and exit parameters for certain
function calls in my implementation, hence I have defined beans to intercept in
the following way. Please let me know if you need more inputs on this.
I have used spring core jars :
=====================
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
ApplicationContext definitions :
===========================
<bean id=" fileSplitter" class="com.package.SimpleService"/>
<bean id="secondServiceBean" class="com.package.SecondService"/>
<bean id="logEntryBean" class="com.package.LogEntry" />
<bean id="logExitBean" class="com.package.LogReturn" />
<bean id="logExceptionBean" class
="com.package.logging.ExceptionLogger"/>
<bean id="secondServiceProxy"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target" ref="secondServiceBean" />
<property name="interceptorNames">
<list>
<value>logEntryBean</value>
<value>logExitBean</value>
<value>logExceptionBean</value>
</list>
</property>
</bean>
Application.java
===============
ConfigurableApplicationContext context = new
ClassPathXmlApplicationContext("ApplicationContext.xml");
FileSplitter call =(FileSplitter) context.getBean("fileSplitter");
SecondService secondService =(SecondService)
context.getBean("secondServiceProxy");
FileSplitter fileSplitter = dag.addOperator("FileSplitter", call);
SecondService reader=dag.addOperator("reader", secondService);
ConsoleOutputOperator cons = dag.addOperator("console", new
ConsoleOutputOperator());
dag.addStream("blockin", fileSplitter.blocksMetadataOutput,
reader.blocksMetadataInput);
dag.addStream("randomData", reader.batchData, cons.input);
LogEntry :
=========
package com.package.logging;
import java.lang.reflect.Method;
import org.apache.log4j.Logger;
import org.springframework.aop.MethodBeforeAdvice;
public class LogEntry implements MethodBeforeAdvice {
private final static Logger logger = Logger.getLogger(LogEntry.class);
public void before(Method method, Object[] args, Object target) throws
Throwable {
if(logger.isDebugEnabled())
logger.info("logged entry for method : " + method.getName());
}
}
SecondService does not implement any interface, it extends CSVBlockReader class
which again extends AbstractBlockReader class.
=========================================================================
Exception while running Junit :
===========================
java.lang.ClassCastException: com.sun.proxy.$Proxy11 cannot be cast to
com.package.filesplitterimpl.SecondService
at
com.package.filesplitterimpl.Application.populateDAG(Application.java:28)
at
com.datatorrent.stram.plan.logical.LogicalPlanConfiguration.prepareDAG(LogicalPlanConfiguration.java:1191)
at com.datatorrent.stram.LocalModeImpl.prepareDAG(LocalModeImpl.java:57)
at
com.dtv.myapexapp.ApplicationTest.testApplication(ApplicationTest.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
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.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:675)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
regards,
Venkatesh.
-----Original Message-----
From: Chandni Singh [mailto:[email protected]]
Sent: Tuesday, November 03, 2015 2:46 PM
To: [email protected]
Subject: Re: Regarding logging and exception handling framework
Hi Venkatesh,
Can you please provide a small code snippet or example which shows what you
want to do?
If you want to find out any validation exception during preparation of logical
plan, then you can take a look at the LogicalPlanTest in Apache Apex repository.
Thanks,
Chandni
On Tue, Nov 3, 2015 at 2:37 PM, Kottapalli, Venkatesh <
[email protected]> wrote:
> Hi,
>
> With the framework malhar has, Can we use AOP
> interception technique for logging and exception handling? I have
> tried but unable to proxy Operator classes to intercept during DAG
> preparation. Please suggest.
>
> Regards,
> Venkatesh.
>