Hallo Community,
ich arbeite gerade an einer Client /Server Verbindung bei der, der Server Daten mittels EclipseLink in die DB schreibt.
Server
Database
Diese Klasse wird nach dem Server.accept aufgerufen um mehrere Clients afertigen zu können.
Mein Problem ist, dass er nur in die Datenbank schreibt, wenn ich em.transaction.commit(); auch hinzufüge. Leider ist dann aber die Verbindung geschlossen. Ich habe es sowohl mit em.merge() als auch mit em.persist() versucht.
Hat einer eine Idee?
Danke schon im Voraus.
Greets
Sc0rP1En
ich arbeite gerade an einer Client /Server Verbindung bei der, der Server Daten mittels EclipseLink in die DB schreibt.
Server
Java:
ServerBTS() throws IOException
{
EntityManagerFactory factory;
factory = Persistence.createEntityManagerFactory("BTS");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
System.out.println("BTS-Server started!");
while (true)
{
Socket socket = server.accept();
thread = new Database(socket,em);
thread.start();
}
}
public static void main (String[] args)
{
try {
ServerBTS server = new ServerBTS();
}
catch (IOException e)
{
System.out.print(e);
}
}
}
Database
Java:
public class Database extends Thread {
EntityManager _em;
Socket _socket;
double _north;
double _east;
public Database(Socket socket,EntityManager em)
{
this._em = em;
this._socket = socket;
}
public void run(){
int CorHostName=-1;
ArrayList<String> AlHostNames = new ArrayList<String>();
AlHostNames.add("Thimo01");
AlHostNames.add("Thimo02");
AlHostNames.add("LKW01");
AlHostNames.add("LKW02");
InetAddress addr = _socket.getInetAddress();
String hostname = addr.getHostName();
Hostnames:
for (int i =0; i<AlHostNames.size();i++)
{
if (hostname.equals(AlHostNames.get(i)))
{
CorHostName = i;
break Hostnames;
}
}
//Empfang von Doublewerten
DataInputStream input;
try {
input = new DataInputStream(_socket.getInputStream());
_north = input.readDouble();
_east = input.readDouble();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(AlHostNames.get(CorHostName));
System.out.println(CorHostName+" "+_north+" , "+_east);
switch (CorHostName)
{
case 0:
Koordinaten2 koord2 = new Koordinaten2();
koord2.setDate(new Date());
koord2.setNorth(_north);
koord2.setEast(_east);
_em.merge(koord2);
// _em.getTransaction().commit();
break;
case 1:
Koordinaten3 koord3 = new Koordinaten3();
koord3.setDate(new Date());
koord3.setNorth(_north);
koord3.setEast(_east);
_em.merge(koord3);
// _em.getTransaction().commit();
break;
default:
System.out.println("Wrong Hostname");
break;
}
}
}
Diese Klasse wird nach dem Server.accept aufgerufen um mehrere Clients afertigen zu können.
Mein Problem ist, dass er nur in die Datenbank schreibt, wenn ich em.transaction.commit(); auch hinzufüge. Leider ist dann aber die Verbindung geschlossen. Ich habe es sowohl mit em.merge() als auch mit em.persist() versucht.
Hat einer eine Idee?
Danke schon im Voraus.
Greets
Sc0rP1En