Witam,
mam problem z uruchomieniem aplikacji działającej na RMI. Mam gotowy przykład do którego trzeba jedynie dopisać metody set/get dla aktualnej daty. Udaje mi sie uruchomic serwer ale problem juz jest z klientem.
Tak wyglada kod:
...\server\src\rmiTestMeeting\Constatns.java
package rmiTestMeeting;
public class Constatns {
public static final String OBJECT_ID = "Meeting";
public static final int RMI_REGISTRY_PORT = 1099;
}
...\server\src\rmiTestMeeting\IMeeting.java
package rmiTestMeeting;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface IMeeting extends Remote {
public String getDate() throws RemoteException;
public void setDate( String data ) throws RemoteException;
}
...\server\src\rmiTestServer\MeetingImpl.java
package rmiTestServer;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.text.FieldPosition;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import rmiTestMeeting.IMeeting;
public class MeetingImpl extends UnicastRemoteObject implements IMeeting {
private static final long serialVersionUID = 1L;
private Date date = new Date();
private SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "dd-MM-yyyy" );
public MeetingImpl() throws RemoteException {}
public String getDate() throws RemoteException {
return simpleDateFormat.format( date, new StringBuffer(), new FieldPosition( 0 ) ).toString();
}
public void setDate( String date ) throws RemoteException {
try {
this.date = ( Date ) simpleDateFormat.parse( date );
} catch (ParseException e) {
throw new RemoteException( "zly format daty! \npoprawny format: dd-MM-yyyy" );
}
}
}
...\server\src\rmiTestServer\MeetingServer.java
package rmiTestServer;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import rmiTestMeeting.Constatns;
public class MeetingServer {
public static void main( String[] args ) throws Exception {
System.setSecurityManager( new SecurityManager() );
MeetingImpl impl = new MeetingImpl();
Registry registry = LocateRegistry.createRegistry( Constatns.RMI_REGISTRY_PORT );
registry.rebind( Constatns.OBJECT_ID, impl );
System.out.println( "Serwer wystartowal !!! " );
}
}
...\client\src\rmiTestClient\rmiTestClient\MeetingClient.java
package rmiTestClient;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.rmi.Remote;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import rmiTestMeeting.Constatns;
import rmiTestMeeting.IMeeting;
public class MeetingClient {
public static void main( String[] args ) {
try {
System.setSecurityManager( new SecurityManager() );
Registry registry = LocateRegistry.getRegistry( "localhost", Constatns.RMI_REGISTRY_PORT );
Remote remote = registry.lookup( Constatns.OBJECT_ID );
String string = null;
IMeeting meeting;
if( remote instanceof IMeeting ) {
meeting = ( IMeeting )remote;
string = meeting.getDate();
System.out.println( "Data z systemu zdalnego: " + string );
System.out.print( "\n\nPodaj Date (dzien-miesiac-rok): " );
BufferedReader bis = new BufferedReader( new InputStreamReader( System.in ) );
String line = bis.readLine();
meeting.setDate( line );
System.out.println( "\n\nDate zmieniono !!!!\n\n" );
System.out.println( "Data z systemu zdalnego: " + meeting.getDate() + "\n\n" );
bis.readLine();
}
} catch( Exception ioe ) {
ioe.printStackTrace();
}
}
}
Tak wyglada moj plik java.policy:
grant {
permission java.security.AllPermission;
};
Tak uruchamiam aplikacje serwera:
java -Djava.security.policy=java.policy rmiTestServer.MeetingServer
A tak klienta:
java -cp <path>\server\bin -Djava.security.policy=java.policy rmiTestClient.MeetingClient
A oto co dostaje w konsoli - pierw w osobnym oknie startuje serwer, w drugim client juz nie
Wylaczylem wszystkie firewalle aby uprzedzic pytanie, probowalem w plikach .policy dodac permission dla okreslonych portów ale to takze nie poskutkowalo.
Czy ktos bylby w stanie mi pomoc? Mam ten projekt na poniedzialek rano bede bardzo wdzieczny za wszelka pomoc.