Herr_M
Erfahrenes Mitglied
Hallo Zusammen,
auch wenn es wohl eher unwahrscheinlich ist, das jemand hier die Lösung für mein Problem kennt (ist in Relation zu den Themen die hier meistens angesprochen werden etwas exotisch) werd ichs trotzdem mal schildern. Eine blinde Henne findet ja schließlich auch mal ein Korn.
Die Kurzfassung: Die Updates/Inserts/Deletes in meiner Client Server Anwendung werden nicht nach (vermeintlichem) Ende der Transaktion in die Datenbank geschrieben, sondern erst beim herunterfahren/neustarten des Servers.
Langfassung:
Ich entwickle zusammen mit einem Kollegen an einer Client Server Application, wobei der Client eine auf Swing basierende GUI Anwendung ist.
Der Serverteil der Anwendung wird via RMI angesprochen und setzt in der Realisierung auf EJB 3.0.
Die Datenbankzugriffe und damit auch die Transaktionssteuerung finden alle durch den Serverseitigen Teil der Anwendung statt. Dafür setzen wir auf JPA und eben besagte EJB 3.0 Beans.
Das Problem dabei ist, startet man den Client kann dieser wie erwartet auf den Server zugreifen, man kann Änderungen an den Daten vornehmen etc. Meldet man sich ab, und später wieder an sind die Änderungen vorhanden, werden angezeigt etc.
Wirft man allerdings mit einem Datenbanktool einen Blick auf die Datebank, sieht man das die Änderungen nicht wie erwartet in die Datenbank übernommen worden sind.
Erst nach dem herunterfahren des Servers landen diese dort.
Woran könnte das liegen?
Eckdaten des Projets:
Client mit Swing
Zugriff auf den Server via RMI
Serverseite:
Server: Geronimo 2.1.1
Programm verwendet JPA und EJB 3.0
Hier eine Beispiel für den Einsatz eines der Beans:
Hier der Code des Beans
auch wenn es wohl eher unwahrscheinlich ist, das jemand hier die Lösung für mein Problem kennt (ist in Relation zu den Themen die hier meistens angesprochen werden etwas exotisch) werd ichs trotzdem mal schildern. Eine blinde Henne findet ja schließlich auch mal ein Korn.
Die Kurzfassung: Die Updates/Inserts/Deletes in meiner Client Server Anwendung werden nicht nach (vermeintlichem) Ende der Transaktion in die Datenbank geschrieben, sondern erst beim herunterfahren/neustarten des Servers.
Langfassung:
Ich entwickle zusammen mit einem Kollegen an einer Client Server Application, wobei der Client eine auf Swing basierende GUI Anwendung ist.
Der Serverteil der Anwendung wird via RMI angesprochen und setzt in der Realisierung auf EJB 3.0.
Die Datenbankzugriffe und damit auch die Transaktionssteuerung finden alle durch den Serverseitigen Teil der Anwendung statt. Dafür setzen wir auf JPA und eben besagte EJB 3.0 Beans.
Das Problem dabei ist, startet man den Client kann dieser wie erwartet auf den Server zugreifen, man kann Änderungen an den Daten vornehmen etc. Meldet man sich ab, und später wieder an sind die Änderungen vorhanden, werden angezeigt etc.
Wirft man allerdings mit einem Datenbanktool einen Blick auf die Datebank, sieht man das die Änderungen nicht wie erwartet in die Datenbank übernommen worden sind.
Erst nach dem herunterfahren des Servers landen diese dort.
Woran könnte das liegen?
Eckdaten des Projets:
Client mit Swing
Zugriff auf den Server via RMI
Serverseite:
Server: Geronimo 2.1.1
Programm verwendet JPA und EJB 3.0
Hier eine Beispiel für den Einsatz eines der Beans:
Code:
@Stateless
@Remote(AccessRemote.class)
@Local(Access.class)
public class AccessSessionBean implements Access {
@PersistenceContext(unitName = "FMDBPU")
EntityManager manager;
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void updateUserPassword(UserValueObject uservo)
throws NotFoundException, Exception {
BenutzerBean bb = manager.find(BenutzerBean.class, uservo.getUserId());
bb.setPass(uservo.getPass());
manager.flush();
}
}
Hier der Code des Beans
Code:
package ...
import javax.ejb.Stateless;
import javax.persistence.*;
/**
* @author liangs $Revision: $ $Modtime: $
* @since 3.0
*/
@Entity
@Table(name = "BENUTZER")
// @NamedQuery(name = "findAllBenutzer", query = "SELECT benutzer FROM
// BenutzerBean benutzer")
@NamedQueries( {
@NamedQuery(name = "findAllBenutzer", query = "SELECT benutzer FROM BenutzerBean benutzer"),
@NamedQuery(name = "findBenutzerById", query = "SELECT benutzer FROM BenutzerBean benutzer WHERE benutzer.userId =:userId") })
@SequenceGenerator(name = "USERID_SEQUENCE", sequenceName = "SEQ_BENUTZER_USERID")
// TODO Sequenz in DB erstellen und Name vergeben
public class BenutzerBean implements java.io.Serializable {
private int userId;
private String userName;
private String pass;
private int boacForm;
private int boacMeng;
private int boacVerw;
private int boacXtra;
private int gesperrt;
private int errLogins;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USERID_SEQUENCE")
@Column(name="USERID")
public int getUserId() {
return this.userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
@Column(name="BOACFORM")
public int getBoacForm() {
return this.boacForm;
}
public void setBoacForm(int boacForm) {
this.boacForm = boacForm;
}
@Column(name="BOACMENG")
public int getBoacMeng() {
return this.boacMeng;
}
public void setBoacMeng(int boacMeng) {
this.boacMeng = boacMeng;
}
@Column(name="BOACVERW")
public int getBoacVerw() {
return this.boacVerw;
}
public void setBoacVerw(int boacVerw) {
this.boacVerw = boacVerw;
}
@Column(name="BOACXTRA")
public int getBoacXtra() {
return this.boacXtra;
}
public void setBoacXtra(int boacXtra) {
this.boacXtra = boacXtra;
}
@Column(name="ERRLOGINS")
public int getErrLogins() {
return this.errLogins;
}
public void setErrLogins(int errLogins) {
this.errLogins = errLogins;
}
@Column(name="GESPERRT")
public int getGesperrt() {
return this.gesperrt;
}
public void setGesperrt(int gesperrt) {
this.gesperrt = gesperrt;
}
@Column(name="PASS")
public String getPass() {
return this.pass;
}
public void setPass(String pass) {
this.pass = pass;
}
@Column(name="USERNAME")
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}