webForumDet fria alternativet

Kolla vilken klass som anroppar

4 svar · 287 visningar · startad av Viktor

ViktorMedlem sedan aug. 20021 710 inlägg
#1

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
#2

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
#3

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
#4

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
#5

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

Genererad på 372 ms · cache AV · v20260730165559-full.f96bc7eb