ViktorMedlem sedan aug. 20021 710 inlägg
Jag har en DB pool och i den skulle jag vilja kolla vilken klass det är som gör anroppet (den anroppas av flera olika klasser under sitt liv). Finns det något sätt att kolla det på? Jag vill altså kolla det i klassen, inte via något externt debug program.
/Viktor
LimeMedlem sedan sep. 2001837 inlägg
Det uppenbara sättet att göra det på är att alltid kräva att den som anropar metoden i DB poolen skall skicka med referens till sig själv. Då kan man nämeligen göra såhär:
public void whatClass(Object o){
System.out.println("You sent me the class:" + o.getClass() );
}
Om man gör anropet
ClassTester ct = new ClassTester();
ct.whatClass(new ClassA());
ct.whatClass(new ClassB());
Så får man ut :
You sent me the class:class lime.ClassA
You sent me the class:class lime.ClassB
Ska se om det inte går att via Reflection eller liknande få fram vem som anropat metoden. Återkommer imorgon.
/Lime
ViktorMedlem sedan aug. 20021 710 inlägg
Tack för tipset. Tittade lite på Reflection men kunde inte hitta något där men så hittade jag lite på Google och kom på ett smutsigt sätt att göra det på (eller kanske inte så smutsigt :))
StackTraceElement[] ste; // ny klass sedan 1.4
Exception e=new Exception();
ste=e.getStackTrace(); // ny funktion sedan 1.4
System.out.println(ste[1].getFileName());
System.out.println(ste[1].getLineNumber());
System.out.println(ste[1].getMethodName());
System.out.println(ste[1].getClassName());
Då får jag allt som jag behöver, men som sagt vet inte om det är ett bra sätt.
/Viktor
LimeMedlem sedan sep. 2001837 inlägg
Gå in i källkoden för Exception och se hur dom gör för att få tag på alla dom uppgifterna. Det borde ju gå att plagiera metoden.
Jag vet att det skall gå att få reda på vem som anropar en metod... Vet bara inte hur ännu. Återkommer.
/Lime
LimeMedlem sedan sep. 2001837 inlägg
Tjing igen!
Använd inte Exception-metoden. Den tar oerhört mycket kraft i anspråk. Om man har en DB-driver så vill man effektivisera så mycket som möjligt.
Välj om möjligt ansatsen att skicka med Caller i anropet. Väldigt lätt att implementera och oerhört effektivt.
/Lime