Hallo Forum!
Ich habe folgendes Problem:
Wenn ich Date-Objekte am Client erzeuge (OS: WindowsXP) und mittels RMI übertrage (OS: Linux) bekomme ich unterschiedliche Ergebnisse.
Hier das Testprogramm:
Folgende Ergebnisse kommen z.B. zurück:
Thu Sep 29 00:00:00 CEST 1949 Wed Sep 28 23:00:00 CET 1949
Fri Sep 30 00:00:00 CEST 1949 Thu Sep 29 23:00:00 CET 1949
Sat Oct 01 00:00:00 CEST 1949 Fri Sep 30 23:00:00 CET 1949
Sun Oct 02 00:00:00 CEST 1949 Sat Oct 01 23:00:00 CET 1949
Das Problem tritt jedoch nur auf wenn ich den Server unter Linux laufen lasse (jdk 1.4.2_08)
Ich bin für jeden Tipp dankbar!
Ich habe folgendes Problem:
Wenn ich Date-Objekte am Client erzeuge (OS: WindowsXP) und mittels RMI übertrage (OS: Linux) bekomme ich unterschiedliche Ergebnisse.
Hier das Testprogramm:
Code:
package rmidatetest;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Session extends Remote {
public String sendObject(Object o) throws RemoteException;
public void stop() throws RemoteException;
String SERVICE_NAME = "Session";
}
package rmidatetest;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class SessionImpl extends UnicastRemoteObject implements Session {
public SessionImpl() throws RemoteException{
}
public String sendObject(Object o) throws RemoteException {
return o.toString();
}
public void stop() throws RemoteException {
new Thread(new Runnable(){
public void run(){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
System.exit(0);
}
}).start();
}
}
package rmidatetest;
import java.io.Serializable;
import java.util.Date;
public class Person implements Serializable {
private Date gebdat = null;
public Person(Date gd) {
this.gebdat = gd;
}
public Date getGebdat() {
return gebdat;
}
public void setGebdat(Date gebdat) {
this.gebdat = gebdat;
}
public String toString() {
return gebdat.toString();
}
}
package rmidatetest;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Server {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
if(args.length != 1) {
System.out.println("usage: java -cp [classpath] rmidatetest.Server [port]");
return;
}
Session s = new SessionImpl();
Registry reg = null;
int port = Integer.parseInt(args[0]);
try {
System.out.println("try to locate registry at port " + port);
reg = LocateRegistry.getRegistry(port);
reg.rebind(Session.SERVICE_NAME, s);
} catch (RemoteException e) {
System.out.println("registry wasn't located, try to create registry at port " + port);
reg = LocateRegistry.createRegistry(port);
reg.rebind(Session.SERVICE_NAME, s);
}
System.out.println("server started");
while(true){
System.gc();
Thread.sleep(10000);
}
}
}
package rmidatetest;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Client {
private static final SimpleDateFormat FORMATTER = new SimpleDateFormat(
"ddMMyyyy");
/**
* @param args
*/
public static void main(String[] args) throws Exception {
if (args.length < 2) {
System.out
.println("usage: java -cp [classpath] rmidatetest.Client [server] [port] <optional:stop>");
return;
}
String host = args[0];
int port = Integer.parseInt(args[1]);
System.out.println("connecting to " + host + ":" + port);
Registry reg = LocateRegistry.getRegistry(host, port);
Session session = (Session) reg.lookup(Session.SERVICE_NAME);
if (args.length == 3 && "stop".equals(args[2])) {
session.stop();
System.exit(0);
}
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String von = null;
String bis = null;
do {
System.out.println("Datumsformat: ddMMyyyy");
System.out.println("von:");
von = in.readLine();
if ("quit".equalsIgnoreCase(von)
|| "exit".equalsIgnoreCase(von))
break;
System.out.println("bis:");
bis = in.readLine();
if ("quit".equalsIgnoreCase(bis)
|| "exit".equalsIgnoreCase(bis))
break;
Date d_von = FORMATTER.parse(von);
Date d_bis = FORMATTER.parse(bis);
while(d_von.before(d_bis)){
Person p = new Person(d_von);
String vorher = p.toString();
String nachher = session.sendObject(p);
if(!vorher.equals(nachher))
System.out.println(vorher + " " + nachher);
Calendar cal = Calendar.getInstance();
cal.setTime(d_von);
cal.add(Calendar.DAY_OF_MONTH, 1);
d_von = cal.getTime();
}
} while (true);
}
}
Folgende Ergebnisse kommen z.B. zurück:
Thu Sep 29 00:00:00 CEST 1949 Wed Sep 28 23:00:00 CET 1949
Fri Sep 30 00:00:00 CEST 1949 Thu Sep 29 23:00:00 CET 1949
Sat Oct 01 00:00:00 CEST 1949 Fri Sep 30 23:00:00 CET 1949
Sun Oct 02 00:00:00 CEST 1949 Sat Oct 01 23:00:00 CET 1949
Das Problem tritt jedoch nur auf wenn ich den Server unter Linux laufen lasse (jdk 1.4.2_08)
Ich bin für jeden Tipp dankbar!