EJB 3.0 persistence

Bonjour a tous !

Je suis en train de bosser sur le developpement de composants ejb.
Pour les HelloWorld je n’ai pas de problème, mais quant il est question de sauvegarde dans une base de données, c’est pas top.
Je m’explique :

Je travaille sous eclipse J2EE, avec glassfish.
J’ai créé une base de donnée derby, configurer le driver.
Je developpe mon composant qui devrait mettre en place la gestion de comptes bancaires. On y trouve donc :

  • un entity bean Acount
  • un stateless AccountManager
  • et deux interface, pour les applications locales et distantes.
    Mon application se deploie correctement.

J’ai developpé un client qui se connectera a mon application déployée, et tentera de creer un compte dans ma base de donnée derby.

Le soucis c’est que je me retrouve avec pleins d’erreurs lors de l’execution de mon client, du genre “La transaction a été marquée comme devant être annulée.”
En analysant les logs, je me rend compte que ça vient du fait que ma table account n’est pas créée, mais pourtant il me semble que je n’est pas a le faire moi, mais que c’est le composants (ou plutot le container) qui s’en charge. Je pense pour cela lui avoir mis les droits via le fichier persistence.xml.

J’ai testé de nombreux exemples, plus ou moins différents, mais sans succès.
Si quelqu’un s’y connait, ou a deja pratiqué, je ne serais pas contre un peu d’aide…
Edité le 23/11/2008 à 14:15

Peut-on avoir un aperçu de ton bean Account stp?

Comme demandé, voila la classe Account :

public class Account implements Serializable {
@Id
@GeneratedValue
// @Column(name=“ACCOUNT_PK”)
public int accountNb;
@Version
int oplock;

// Persistance Implicite même sans annotation
public double balance;

// Obligatoire pour la création
protected Account() {
}

protected Account(double balance) {
	this.balance = balance;
}

public void credit(double amount) {
	balance += amount;
}

public void debit(double amount) {
	balance -= amount;
}

@Override
public String toString() {
	return "Account(" + accountNb + "," + balance + "€)["
			+ super.toString() + "]";
}

}

Tu l’as annoté ?
@Entity
public class Account implements Serializable {

}

Oui pardon, j’ai pas englobé le début :

@Entity
@Table(name=“ACCOUNT”)
public class Account implements Serializable {…}

Un entity bean doit être un POJO, il doit avoir un constucteur par défaut et des getter/setter.
Mets tes variables en private déja et défini leurs des getter/setter (pour chaque attribut persistant) :

@Id
@GeneratedValue
private int accountNb;

private double balance;

public int getAccountNb()
{
return this.accountNb;
}

public void settAccountNb(int nb)
{
this.accountNb = nb;
}

Et ainsi de suite!
Met aussi tes constructeurs en public, je vois pas pourquoi ils sont protected.

PS: Grenoble, projet ecom? :wink:

Merci pour ton aide.
Tout d’abord non je ne suis pas de Grenoble désolé lol.

Pour le constructeur par défaut il y est :
protected Account() {
}

De plus, je ne suis pas sur que le problème de persistence vienne de l’accessibilité de mes attributs.
Je te copie l’erreur :

javax.ejb.EJBException: nested exception is: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.RemoteException: null; nested exception is:
Exception [TOPLINK-4011] (Oracle TopLink Essentials - 2.0 (Build b58g-fcs (09/07/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Exception Description: Error preallocating sequence numbers. The sequence table information is not complete.(…)

Une autre idée ?
Edité le 19/11/2008 à 19:59

Je ne suis pas un expert mais je pense que tu devrais quand même essayé la solution des getter/setter :wink:
Si c’est un problème de BD ou de configuration serveur, j’ai bien peur de t’être inutile…

Peut-être un problème avec le persistence.xml ou de JNDC, je laisse ça aux experts!
Bon courage.

Merci je testerais. Si j’ai une solution je viendrais la poster.

Finalement ça a marché, je cherchais trop a compliquer mon fichier persistence.xml.

Maintenant ça fonctionne, avec mysql et postgresql.

Merci encore de m’avoir aidé tr00per. Bye