[.NET Remoting] Nagaan 'hoe' een method aangeroepen wordt.

Pagina: 1
Acties:

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:00
Ik heb ff een kort vraagje:

Is het mogelijk om na te gaan of een bepaalde method van een class die remote-able is (inherit van MarshallByRefObj) aangeroepen werd via remoting of 'gewoon' gecalled werd ?

Voorbeeldje:

code:
1
2
3
4
5
6
7
8
9
class MyRemObj : MarshalByRefObj
{

    public void Miep()
    {
         //
    }

}

Stel bovenstaande class.
Nu wil ik in de method 'Miep' checken of die method via een remote call aangeroepen werd, of gewoon aangeroepen werd...

https://fgheysels.github.io/


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Misschien kan je zo`n noodoplossing gebruiken (alleen voor het debuggen)
code:
1
2
3
4
5
try{
   throw new Exception();
}catch(Exception ex){
   ex.printStacktrace();
}

[ Voor 10% gewijzigd door Alarmnummer op 19-05-2005 09:44 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:00
Alarmnummer schreef op donderdag 19 mei 2005 @ 09:43:
Misschien kan je zo`n noodoplossing gebruiken (alleen voor het debuggen)
code:
1
2
3
4
5
try{
   throw new Exception();
}catch(Exception ex){
   ex.printStacktrace();
}
Hmm, niet echt.
Als m'n method via remoting aangeroepen werd, dan wil ik nl. iets extra's ondernemen....

https://fgheysels.github.io/


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

whoami schreef op donderdag 19 mei 2005 @ 09:44:
[...]
Hmm, niet echt.
Als m'n method via remoting aangeroepen werd, dan wil ik nl. iets extra's ondernemen....
Je hebt toch controle als een remote call bij je objecten aankomt? Eventueel met een proxy/decorator of anders gewoon een parameter: remote

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:00
Alarmnummer schreef op donderdag 19 mei 2005 @ 09:49:
[...]

Je hebt toch controle als een remote call bij je objecten aankomt? Eventueel met een proxy/decorator of anders gewoon een parameter: remote
Mja, voorlopig heb ik het gewoon met een parameter opgelost, maar, indien het mogelijk is, zou ik het graag achter de schermen kunnen doen.

https://fgheysels.github.io/


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Ergens heb ik het gevoel dat je dat niet moet willen. Als een functie twee verschillende effecten heeft, dan zouden het twee functies moeten zijn.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

whoami schreef op donderdag 19 mei 2005 @ 09:50:
Mja, voorlopig heb ik het gewoon met een parameter opgelost, maar, indien het mogelijk is, zou ik het graag achter de schermen kunnen doen.
Kan je niet een principal binden aan de threadlocal en daar een LocalPrincipal en een RemotePrincipal van aan koppelen. Bij een remoteverbiding staat dan een RemotePrincipal klaar en bij een locale verbinding een LocalPrincipal.
MSalters schreef op donderdag 19 mei 2005 @ 09:55:
Ergens heb ik het gevoel dat je dat niet moet willen. Als een functie twee verschillende effecten heeft, dan zouden het twee functies moeten zijn.
Ik weet niet precies wat zijn eisen zijn, maar soms is het handig dat dit transparant gebeurt.

[ Voor 42% gewijzigd door Alarmnummer op 19-05-2005 10:07 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:00
MSalters schreef op donderdag 19 mei 2005 @ 09:55:
Ergens heb ik het gevoel dat je dat niet moet willen. Als een functie twee verschillende effecten heeft, dan zouden het twee functies moeten zijn.
Mja, eigenlijk heb je gelijk.
Echter, 'verschillende effecten' is in dit geval misschien een beetje 'overdreven'.
Als die method via een remote-call aangeroepen wordt, dan wil ik gewoon dat de taak die die method moet uitvoeren op een andere thread gestart wordt.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:00
Alarmnummer schreef op donderdag 19 mei 2005 @ 10:04:
[...]

Kan je niet een principal binden aan de threadlocal en daar een LocalPrincipal en een RemotePrincipal van aan koppelen. Bij een remoteverbiding staat dan een RemotePrincipal klaar en bij een locale verbinding een LocalPrincipal.
Nee, dat zal ik niet kunnen doen.
De 'WindowsPrincipal' wordt al doorgegeven, en die heb ik nodig.

https://fgheysels.github.io/


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

whoami schreef op donderdag 19 mei 2005 @ 10:07:
[...]


Mja, eigenlijk heb je gelijk.
Echter, 'verschillende effecten' is in dit geval misschien een beetje 'overdreven'.
Als die method via een remote-call aangeroepen wordt, dan wil ik gewoon dat de taak die die method moet uitvoeren op een andere thread gestart wordt.
Kan je dan niet gewoon die call helemaal ontkoppelen van de implementatie? Zo los ik dit soort dingen wel op.. met asynchrone communicatie zijn er andere mogelijkheden en daar wil ik dan ook gebruik van kunnen maken en dat zijn mogelijkheden die een synchrone interface me niet bied.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
interface AsynchronousFooService{
     Future execute(FooJob job);
}

interface FooService{
     void execute(FooJob job);
}

class AsynchronousFooServicImpl implements AsynchronousFooService{


     AsynchronousFooServicImpl (ExecutorService executorService, FooService fooService){
           _fooService= fooService;
           _executorService= executorService;
     }

     Future execute(FooJob job){
        return  _executorService.submit(new RunnableImpl(job));
     }

    class RunnableImpl implements Runnable{
       RunnableImpl(FooJob job)
          _job =job;
       }

        void run(){
              _fooService.execute(job);
         }
     }
}


Op deze manier (via de ExecutorService) hou je ook controle hoeveel threads er woren opgestart.. Als jij zo maar threads opstart bij iedere remote call kun je diep in de problemen komen.

[edit]
En voor de liefhebbers: dit is weer een prachtig voorbeeldje van Inversion of Control (IOC) :)

[ Voor 61% gewijzigd door Alarmnummer op 19-05-2005 10:36 ]


  • dotcode
  • Registratie: Augustus 2003
  • Laatst online: 19-04 14:26

dotcode

///\00/\\

Volgens mij moet je even kijken in:

System.Diagnostics.Debug

Namespace, met de debugger kan je zo de call stack ophalen. En nog meer info...
Pagina: 1