Appel d'un JavaBean (maj de base) par un autre JavaBean

Résolu
Signaler
Messages postés
31
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
24 septembre 2020
-
Messages postés
31
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
24 septembre 2020
-
Bonjour

Je presente le contexte :
2 tables :

Table1:  Identity
private Integer Identifiant;            <--- cle primaire

Table2 : Player
private Integer Idplayer;              <--- cle primaire
private String Nom;
private String Prenom;

J'ai un JavaBean IdentityBean (avec son IdentityRemote dans le meme package identity) qui accede à la table Identity avec pour seule et unique methode de fournir l'identifiant + 1 et de remplacer la valeur en cours par la suivante. Ce Java Bean ne doit JAMAIS etre appele par l'appli client, mais uniquement par des JavaBean. Il n'est la que pour fournir la clé primaire (unique) des autres tables.

J'ai un JavaBean PlayerBean (avec son PlayerBean dans le meme package player) qui cree dans la table Player une nouvelle occurence via une methode public Integer ajoutPlayer(String Nom, String Prenom) je ne veux pas lui passer Idplayer

L'erreur que j'obtient sur IdentityBean.recupereNouvelIdentity() : Cannot make a static reference to the non-static method recupereNouvelIdentity() from the type IdentityBean
Je ne comprend pas trop le message.

Voici mes 2 JavaBean :
<hr size="2" width="100%" />IdentityBean.java :

package identity;

import java.util.Collection;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import data.Identity;

@Stateless
public class IdentityBean implements IdentityRemote
{
    @PersistenceContext(unitName = "identity")
    private EntityManager    manager;

    @SuppressWarnings("unchecked")

    public Identity recupereNouvelIdentity()
    {
        VerifTableIdentityVide();
        return manager.merge((Identity)manager.createQuery("SELECT (MAX(Identity) + 1) FROM Identity").getSingleResult());
    }

    private void VerifTableIdentityVide()
    {
        Identity identityVerif = (Identity)manager.createQuery("SELECT Identity FROM Identity").getSingleResult();
        if (identityVerif == null)
        {
            Identity identityInsert = new Identity();
            manager.persist(identityInsert);
        }
    }

}

<hr size="2" width="100%" />PlayerBean.java

package player;

import identity.IdentityBean;

import java.util.Collection;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import data.Identity;
import data.Player;

@Stateless
public class PlayerBean implements PlayerRemote
{
    @PersistenceContext(unitName = "player")
    private EntityManager    manager;

    @SuppressWarnings("unchecked")
   
    public void ajoutPlayer(Player Player)
    {
        manager.persist(Player);
    }

    public Integer ajoutPlayer(String nom, String password)
    {
        Player p1 = new Player(IdentityBean.recupereNouvelIdentity().getIdentity(),nom, password);
        manager.persist(p1);
        return p1.getIdplayer();
    }

<hr size="2" width="100%" />
Erreur obtenue : Cannot make a static reference to the non-static method recupereNouvelIdentity() from the type IdentityBean

Je suppose que je dois surement ouvrir le context avec le unitName="identity" pour y acceder, mais en dehors du client, je ne vois pas comment.
dans le client, avant d'acceder a ajoutPlayer, j'ai
                            InitialContext ic1 = new InitialContext();
                            PlayerRemote pr1 = (PlayerRemote) ic1.lookup(JNDI_PLAYER);
                            pr1.ajoutPlayer(Nom, Password);

avec comme variable :     private static final String    JNDI_PLAYER            = "PlayerBean/remote";

J'espere avoir exposé correctement mon probleme.

Merci de m'aider

Minos

1 réponse

Messages postés
31
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
24 septembre 2020

J'ai oublié de vous communiquer mon fichier persistence.xml

<?xml version="1.0" encoding="UTF-8"?>

  
      <jta-data-source>java:/DefaultDS</jta-data-source>
     
       
       
     

  

  
      <jta-data-source>java:/DefaultDS</jta-data-source>