webForumDet fria alternativet

Kolla vilken klass som anroppar

Java

4 svar · 287 visningar · startad av Viktor

Medlem sedan aug. 20021 752 inlägg
Frågan#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

Medlem sedan sep. 2001961 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

Medlem sedan aug. 20021 752 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

Medlem sedan sep. 2001961 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

Medlem sedan sep. 2001961 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

248 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)