Avatar billede Slettet bruger
27. maj 2003 - 16:10 Der er 8 kommentarer og
1 løsning

ejb via rmi

Jeg henter en Enterprise Java Bean (EJB) fra min Application Server ned på en applikation. Denne EJB vil jeg så sende videre til en anden applikation.

Altså: en EJB fra EJB Contianer til Applikation1 og videre til Applikation 2.

Applikation1 får fint fat i bønnen, og kan anvende denne uden problemer. Jeg kan også via RMI passere referencen til Applikation2. Men ved metodekald på EJB'en i Applikation 2 får jeg flg. runtime exception:

org.omg.CORBA.BAD_OPERATION: The delegate has not been set!  vmcid: 0x0  minor code: 0  completed: No

Så vil jeg gerne vide, om det jeg prøver er umuligt, altså at passere en EJB (eller referencen, som det jo er) gennem en applikation til en anden, eller om jeg har en chance for at løse det?
Avatar billede arne_v Ekspert
27. maj 2003 - 16:21 #1
1)  Du henter ikke en bean implementation. Du henter en home og/eller
    remote interface implementation.

2)  Det er ihvertfald absolut ikke måden det er tiltænkt at blive brugt
    på.

    Applikation 2 bør selv connecte.

3)  Jeg er forbløffet over at du ikke fik en "not serializable"
    error, da der må gemme sig en socket forbindelse et sted
    i de objekter.

Men det er meghet svært at sige præcis hvad der sker, fordi
implementationerne er server specifikke (og du har ikke fortalt
hvilken application server du bruger).

Men uanset hvad: REDESIGN.
Avatar billede arne_v Ekspert
27. maj 2003 - 16:23 #2
Som generel regel: bland aldrig EJB og RMI.
Avatar billede Slettet bruger
27. maj 2003 - 16:41 #3
arne_v:

Vi har valgt arkitekturen udfra mulighed #3 i http://www.eksperten.dk/spm/356064

altså: RMIclient/PDA--(RMI)-->RMIserver/server--(EJB call)-->EJB/server

Der siger du, at man godt kan gøre, som vi har gjort.

Vi må have fået dit svar "galt i halsen" dengang. Hvad har vi misforstået?

En lille "disclamer": spørgsmålet, der refereres til er stillet af "playmo". Jeg arbejder sammen med playmo på dette projekt, og der er derfor en "forbindelse" mellem dette spørgsmål, og det spørgsmål, der henvises til, selvom spørgeren ikke er den samme. Men jeg vil gerne gøre opmærksom på, at "playmo" og "smajli" _ikke_ er den samme person, som har oprettet flere brugere.
Avatar billede arne_v Ekspert
27. maj 2003 - 16:57 #4
Vi har snakket forbi hinanden så.

I den arkititektur er RMIserveren bare et transport led.

Det er ikke engang nogen særlig køn måde at gøre det på.

Men det kunne begrundes med hvsi RMI klasserne allerede var
pÅ PDA'en og EJB client klasserne fyldt adskillige MB.

Men tilbage til hvordan det skal forståes.

En PDA kalder RMIserveren. RMIserveren kan enten returne
direkte eller kalde en EJB først inden den returner.

Der er X PDA'er, 1 RMIserver og 1 EJB container.

Der skal ikke referancer til EJB'ere ud til PDA'erne.

Principielt vil RMIserveren lookup et home interface, create
et remote interface og kalde metoder hvergang der kommer et
kald ind.

I praksis vil man jo nok cache home interfacet.

Hvis jeg stadigvæk snakker sort så må I endelig skrive igen.
Avatar billede arne_v Ekspert
27. maj 2003 - 16:58 #5
En anden måde at formulere det på er at tier 2 i den arkitektur
er både en RMI server og en EJB client.

Den er RMI server på venstre side og EJB client på højre side.

Så ja den blander lidt men holder det alligevel rimeligt adskildt.
Avatar billede Slettet bruger
27. maj 2003 - 17:09 #6
Vi har valgt at lade en session bean indeholde alle entity beans, og så lade denne session bean være funktionslag.

Dette deployer vi så på Application serveren, og lader vores PDA være klient til denne.

Altså et 2 tier system, hvis man ikke tæller databasen med (har ikke helt styr over hvorddan det defineres. Har kun læst om tiers på intruduktionsniveau).

Vi anvender i øvrigt J2EE SDK Reference Implementation af Application Server, da da applikationen "kun" skal bruges som projekt til vores uddannelse (datamatiker).

Jeg vil lige høre, om du, arne_v, får det "dårligt", af den nye idé, eller du mener vi har en chance for at implentere denne.
Avatar billede Slettet bruger
27. maj 2003 - 17:17 #7
... men lige for at høre ad:

I "den gamle" ide, ville RMI Serveren, ved modtagelse af metodekald fra RMI klienten, kalde metoder i remote interfacet EJB'erne, og returnere resultatet deraf til RMI klienten i form af Serializable objekter eller simple datatyper?

Er det rigtig forstået?

Under alle omstændigheder vil jeg hvert fald sige mange tak for din tid og din hjælp. Det er et previlegie, at kunne modtage assistance fra en person med din erfaring, og det har allerede på nuværende tidpunkt været uvurderligt for vores projekt.
Avatar billede arne_v Ekspert
27. maj 2003 - 18:59 #8
2 tier + DB.

Det er formentligt langt det nemmeste at lave og en udmærket
løsning.
Avatar billede arne_v Ekspert
27. maj 2003 - 19:00 #9
client--RMIserver--EJB

Ja det er rigtigt forstået.

RMIserver vil bare fungerer ligesom en servlet i en web-applikation:
bindeled mellem client og EJB.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester