This will also not work on EJB containers. For example, in EJB Hello
@Interceptors(MyInterceptor.class)
public Hello implemenet IHello{
public void method1(){
method2();
}
public void method2(){
.......
}
}
@Local
public interface IHello{
public void method1();
public void method2();
}
main(){
IHello proxy = getting from intitial context
proxy.method1();
}
Calling method2() from method1() does not trigger interception. Interceptor is
called ones when client calls method1() on bean proxy. You could try it on
OpenEJB for example
Thanks;
Gurkan
________________________________
From: Mark Struberg <[email protected]>
To: [email protected]
Sent: Tue, May 11, 2010 8:30:15 AM
Subject: Need to switch to subclassing?
Hi!
There is a subtle difference between implementing interceptors via proxy or via
subclasses.
I have the following service which imports data from a legacy system into my
db. Since commits are very performance intense, they should get imported in
packages of 100. So I'll get 100 'Employees' from my legacy system and then
call a @Transactional method to store them in my own database.
public void ImportService() {
public void importEmployee() {
List<LegacyEmployee> les;
while ((les = getNext100EmployeesFromLegacy()) != nul) {
importLegacyEmployees(le);
}
}
@Transactional
protected importLegacyEmployees(List<LegacyEmployee> les) {
for (LegacyEmployee le: les) {
employeeService.store(le);
}
}
}
This would actually _not_ when using proxies for the interceptor handling,
because calling a method on an own class doesn't invoke the proxyhandler.
So is this expected to work?
Sure, I could easily move the importLegacyEmployees() to an own service, but
that would infringe classic OOP heavily imo.
Gurkan, what does the spec say here, I did find nothing. The old spec
explicitly mentioned that we need to use subclassing, but I cannot find this
anymore.
LieGrue,
strub