Avatar billede 5floor Nybegynder
12. marts 2004 - 11:11 Der er 18 kommentarer og
1 løsning

RMI og JBuilder.

Hej.
Jeg har lavet et lille lommeregner-eksempel. Compiler og kører jge det fra en kommando-prompt virker det perfekt. Jeg laver først _skel og _stub, starter rmiregistry, starter så serveren og dernæst klienten. Dette virker fint.
Den præcis samme kode har jeg så ville afvikle under JBuilder.
Problemet er, at jeg får denne fejlmeddelelse når jeg forsøger at afvikle serveren. Jeg har generet _skel og _stub via JBuilder, men ved ikke hvad jeg mere skal gøre?
------fejlbesked fra JBuilder--------------
Remote  fjerne exception: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
    java.lang.ClassNotFoundException: rmi.rmiServer_Stub
--------------------------------------------

Nogen der kan hjælpe mig?

Med venlig hilsen

Mads
Avatar billede simonvalter Praktikant
12. marts 2004 - 11:16 #1
lav en konfiguration i run/configuration
i vm parameters skriver du

-Djava.rmi.server.codebase=file:C:\ditprojekt\classes\
Avatar billede simonvalter Praktikant
12. marts 2004 - 11:17 #2
og så kører du bare din main med den

husk at start rmiregistry.
Avatar billede simonvalter Praktikant
12. marts 2004 - 11:17 #3
der er en her der havde samme problem på linux
http://www.eksperten.dk/spm/475944
Avatar billede 5floor Nybegynder
12. marts 2004 - 11:28 #4
Hey loadet.
Tak for det hurtige svar.
Jeg har dog stadig problemer. Følgende streng er hvdjeg har skrevet i VM Parameters

-Djava.rmi.server.codebase=file:C:\Documents and Settings\Clasix\jbproject\School\RMI\classes\rmi\

Når jeg så kører programmet igen fårt jeg denne fejl:

java.lang.NoClassDefFoundError: and
Exception in thread "main"

Hvad gør jeg galt?

MvH

Mads
Avatar billede simonvalter Praktikant
12. marts 2004 - 11:33 #5
jep, det er windows dumme filnavne med mellemrum i

prøv sådan her
-Djava.rmi.server.codebase=file:"C:\Documents and Settings\Clasix\jbproject\School\RMI\classes\rmi\"

hvis det ikke virker så bliver du nok nødt til at
flytte projetet til en sti uden mellemrum
Avatar billede 5floor Nybegynder
12. marts 2004 - 11:49 #6
Hey loaded.
Det andet virkede ikke, så jeg har flyttet mappen.

nu skriver jeg:

-Djava.rmi.server.codebase=file:C:\Java\Calc\RMI\classes\rmi

men får stadig den samme fejl?

Har du andre ideér til hvad der kan være galt?

Mads
Avatar billede simonvalter Praktikant
12. marts 2004 - 11:51 #7
Djava.rmi.server.codebase=file:C:\Java\Calc\RMI\classes\rmi
skal være
Djava.rmi.server.codebase=file:C:\Java\Calc\RMI\classes\rmi\

\ er ret vigtig .. ;)
Avatar billede 5floor Nybegynder
12. marts 2004 - 11:59 #8
Hey loadet.
Det ændrer desværre ikke på de uheldige omstændigheder.
Stien jeg indtaster peget på een mappe der indeholder følgende filer:

interfaceCalculator
rmiServer
rmiServer_skel
rmiServer_stub

Alle disse er CLASS-filer.
Er dette det rigtige sted jeg peger hen?

Mads
Avatar billede simonvalter Praktikant
12. marts 2004 - 12:03 #9
du laver klasse filerne i jbuilder og så højreclicker du på din KlasseImpl og vælger
properties
så trykker du på rmi og sætter den til
-v1.2

så kommer der kun en stub


så browser du til

så sætter du

-Djava.rmi.server.codebase=file:C:\Java\Calc\RMI\classes\

altså ikke med din pakke
som her
Djava.rmi.server.codebase=file:C:\Java\Calc\RMI\classes\rmi\


og så skulle du kunne køre det
Avatar billede 5floor Nybegynder
12. marts 2004 - 12:53 #10
Hey Loadet.
Så virker serveren, tusind tak.
Jeg har dog fået et nyt problem.
Jeg har et projekt til min server og et til klient.
Jeg har kopieret _stub CLASS-filen fra serveren over i klienten(det har jeg fået at vide jeg skal gøre). Men når jeg kører klienten, så siger den fejl. Det ser ud som om, at den prøver at tilgå rmi.rmiServer_stub (rmi er packeche-name) i klienten hedder packeche rmiklient.
(rmi.rmiServer_Stub (no security manager: RMI class loader disabled)) er fejlen jeg får?

Hvordan løser jeg dette problem?

Mads, der er ultra glad for hjælpen....thx
Avatar billede simonvalter Praktikant
12. marts 2004 - 13:18 #11
hmm det ved jeg ikke
jeg har ikke rodet så meget med security manager
men hvis du har noget ligende dette i din kode
System.setSecurityManager(new RMISecurityManager());

så skal du også køre med
-Djava.security.policy=c:\path\to\client.policy

hvor der kunne stå i client.policy

grant {
    permission java.security.AllPermission;
};
for at tillade alt



det jeg selv gør er at lave en
client pakke
og en
server pakke
i samme projekt

så finder den selv ud af det når du bare have lavet en import til den pakke hvor det interface du skal bruge ligger.

og når jeg laver en jar skal jeg bare sætte filter på så det kun er interface og stub der kommer med.


det er ikke så længe siden jeg selv begyndte at rode med rmi og jeg har brugt en del timer på at finde den rette fremgangs måde så der ikke kommer alle de dumme fejl.
mit råd er at når du først har styr på at lave det uden security manager så kan du begynde at bruge den... for ellers ender det bare med at man kører sur i den ene fejl efter den anden.

men jeg vender tilbage i nat eller imorgen, nu skal jeg sove

smider lige et svar hvis det var hjælp nok :)
Avatar billede 5floor Nybegynder
12. marts 2004 - 14:52 #12
Hej.
Jeg har fjernet Security-Maneger fra koden, for netop at undgå problemer med alt for mange ukendte fejl.
Jeg tror problemet skyldes, at jeg har copy/pate _stub filen fra serveren over i mappen hos klienten. Altså den fil der er genereret via JBuilder(tilsvarende rmic ....) til serveren. Som sagt er dette en fremgangsmode jeg er blevet tilrådet, for at det skal kunne køre.
Det jeg tror den brokker sig over er så, at _stub-filen "hører" til den packache hvorri serveren ligger, men nu er den(altså kopien hos klienten) i den pachache til klienten.....tror det er det den ikke kan finde ud af. Mit problem er så "bare", at jeg ikke ved hvordan jeg skal fx. ændre _stub, henvise på en anden måde i stedet for at kopiere, lave en på  serven der peger til klienten eller hvorledes.

Håber det gav et bedre billede af mine formodede problemer.

God weekend

Mads
Avatar billede simonvalter Praktikant
13. marts 2004 - 02:58 #13
du skal bare bevare den i samme struktur som den lå i forvejen

hvis du har din clientpackage.Client.java som henviser til interfacet serverpackage.Server som er interface for serverpackage.ServerImpl

så skal det set sådan ud
classes/clientpackage/Client.class
classes/serverpackage/Server.class
classes/serverpackage/ServerImpl_stub.class

du skal bevare strukturen, i og med at Client har en import til serverpackage.*
vil den selv finde den.
Avatar billede 5floor Nybegynder
16. marts 2004 - 10:24 #14
Hey Loadet.
Så virker det endelig, perfekt.
Nu sidder jege kun tilbage med et mindre problem.
Jeg har kopieret _stub filen over til klienten(ligger den i classes mappen sammen med de andre .CLASS filer).
Hvis jeg køre klienten så virker det fint, men så snart jeg ændre i koden, altså skal re-compile, da sletter den _stub-filen fra mappen, og laver jo så den sædvanelige fejl.
En fra mit studie kører også med JBuilder, men har ikke samme problem(han kan sagtens ændre mv.). Har ikke kunne finde forskellen,

kender du den???

MvH

Mads
Avatar billede simonvalter Praktikant
16. marts 2004 - 14:21 #15
ja, når du rebuilder projektet vil den slette hele projekt mappen og generere filerne igen.. du skal ikke selv sidde og kopire noget, men gøre som jeg foreslog altså at lade det ligge i den project mappe som du importere fra.
Avatar billede simonvalter Praktikant
16. marts 2004 - 14:21 #16
projekt = package
Avatar billede 5floor Nybegynder
26. marts 2004 - 13:11 #17
Hey Loadet.
x1000 tak for hjælpen. Det virker fint.

God weekend

Mads
Avatar billede simonvalter Praktikant
27. marts 2004 - 01:10 #18
det var så lidt
Avatar billede tagden Nybegynder
27. april 2004 - 12:53 #19
Ja nu er det jo lidt siden, men syntes det var lidt i stil med dette indlæg..

hvordan kan man så sprede klienterne ud på andre maskiner??

jeg har prøvet at kopiere stub filen over samt selve klient filerne, ændret url til rigtig ip, prøvet at kopiere ServerInterface med over også.. men skidtet funger bare ikke.. jeg kunne forestille mig der var en rigtig nem metode hvorpå man kunne få det til at køre, any ideas?
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