Remote methods

0

Witam

mam pewien problem z programem bazującym na zdalnych metodach. Niby wszystko jest ok, odpalam rmiregistry i rmic obiekt, ale gdy chce odpalić serwer otrzymuje taki błąd:

Exception occurred: java.security.AccessControlException: access denied (java.ne
t.SocketPermission 127.0.0.1:1099 connect,resolve)

kombinowałem już różnie, wiem że chodzi o security policies [ przynajmniej tak wyniknęło z mojego googlania ] nie jest to program mojego autorstawa, tylko jakiś tutek z neta więc powinno śmigać. Teoretycznie. Prosiłbym o jakąś w miarę przejrzystą odpowiedź, bo nie jestem orłem w javie

0

Skompiluj kod, zapakuj do Jara, podpisz jara. Zazwyczaj jeżeli masz zonka z securitate to należy w pierwszej kolejności podpisać jara. Java przy starcie powie, że wystawca niezaufany i tym podobne. Akceptujesz i już SecurityManager nie czepia się.
Oczywiście problem będzie jeżeli próbujesz użyć jakiejś funkcji systemowej bez uprawnień. Wtedy manual systemu i nadaj je sobie.

0

sorry za lamowatą odpowiedź/pytanie ale jak zapakować do jara? Czy muszę całość przerobić na aplet? Korzystam z netbeansa jeżeli to coś da

Edyt

znalazłem na 4programmersach takie oto polecenie
jar cf moj_jar.jar *.class

ale coś nie paca

edyt 2

udało się :), ale nie wiem teraz jak podpisać :(

0

spakowałem, podpisałem jak próbuje włączyć to słyszę jakieś errorowe pierdnięcie i koniec. Wypakowałem i dalej ten sam błąd

0

Jak się kiedyś bawiłem z rmi, to musiałem gdzieś do pliku ...jre/lib/security/java.policy wrzucić

permission java.net.SocketPermission "*:1024-", "connect,accept";

0

panie bogdansie_niezalogowany ruszyło, teraz tylko nie wiem czemu ten badziewny gotowiec [ program ] nie działa, ale tak czy inaczej dziękuję bardzo za helpa! Koziołkowi również :)

0

Witam ponownie :)

trzy kody, wyklepane na szybko dla testu:

interface:

import java.rmi.*;

public interface ss extends Remote{
    public int Sum(int a, int b) throws Exception;

}

impl+server

import java.net.MalformedURLException;
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ssimpl  extends UnicastRemoteObject implements ss{
    ssimpl() throws RemoteException{
        super();
    }
    public int Sum(int a,int b) throws RemoteException{
        return a+b;
    }
    public static void main(String [] args){
        try{
            ssimpl server =new ssimpl();
            Naming.rebind("sample", server);
            System.out.println("Server is listening");
        }
        catch (MalformedURLException ex) {
            Logger.getLogger(ssimpl.class.getName()).log(Level.SEVERE, null, ex);
    }        catch (RemoteException e){
            System.out.println("error" + e);
        }
    }

}

cli:

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

public class sc {
    public static void main(String[] args) throws NotBoundException, MalformedURLException, Exception{
        try{
            String URL="//localhost/ss";
            ss RemoteObject =(ss)Naming.lookup(URL);
            System.out.println("got obj");
            System.out.println("1+2" + RemoteObject.Sum(1,2));

        }
        catch(RemoteException e){
            System.out.println("error "+ e);
        }
    }

}

i niby wszystko cacy, najpierw rmiregistry, potem rmic ssimpl, potem odpalam kulturalnie server, server słucha, no i klient się wywala z błędem takim:

Exception in thread "main" java.rmi.NotBoundException: ss
        at sun.rmi.registry.RegistryImpl.lookup(RegistryImpl.java:106)
        at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
        at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:386
)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
        at sun.rmi.transport.Transport$1.run(Transport.java:159)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:5
35)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTranspor
t.java:790)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport
.java:649)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExec
utor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:908)
        at java.lang.Thread.run(Thread.java:619)
        at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Stream
RemoteCall.java:255)
        at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:
233)
        at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:359)
        at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
        at java.rmi.Naming.lookup(Naming.java:84)
        at sc.main(sc.java:20)

problem występuje przy każdym programie typu klient wykorzystującym remote methods.

0

Zly URL.

0

a jak podać dobry? Próbowałem podać całą ścieżkę np:

C:\Documents and Settings\*****\Moje dokumenty\NetBeansProjects\RMI_sample\src

ale błąd był ten sam

0

W przykladzie ktory podales robisz rebind na nazwie "sample", a pozniej wyszkujesz "localhost/ss". Ponadto, z tego co pamietam url dla rmi wyglada tak: rmi:<host>:<port>/nazwa. Ty nie masz rmi:// wiec system mysli ze //localhost/ss to jest nazwa szukanego obiektu. Wpisz po prostu "sample" i zobacz czy dziala.

0

@::

masz u mnie ołtarzyk

= )

1 użytkowników online, w tym zalogowanych: 0, gości: 1