session and entity bean

J2EE Session and Entity Bean primi dettagli annotazioni ecc.

Alcuni esempi

Notazione @EJB

Vediamo l'inizio di un bean

@Stateless
public class ContactSessionBean implements ContactSessionRemote 
{
 
    /**
     * <p>
     * Local facade for Contact.
     * </p>
     */
    @EJB private ContactFacadeLocal _contactFacade;
    @EJB private ContactGroupFacadeLocal _contactGroupFacade;
    @EJB private UserFacadeLocal _userFacade;
    @EJB private ContactOptOutFacadeLocal _contactOptOutFacade;
 
    /**
     * {@inheritDoc}
     */
    @Override
    public Contact addContact(Long userId, Contact contact) throws InvalidUserException, PersistenceException 
    {
        User user;

Ci sono delle variabili definite con la notation @EJB. Queste non vengono instanziate nella classe, ma è l'application server (JBoss nel mio caso) che crea una istanza di quel session bean , fa un cast all'interfaccia specificata e l'assegna alla variabile.

Capire meglio la frase sotto:
l'altro tipo è trasparente , riguarda l'Entity bean che è una classe POJO semplice, dati e campi accessori. Poi si decora questa classe con la notation.

Notazione @MappedSuperclass
@MappedSuperclass
public abstract class AbstractContact implements Serializable
{
    private static final long serialVersionUID = 1L;
    // Fields

@MappedSuperclass
Questa notazione indica che la classe AbstractContact non è un entity bean ma ce ne sarà uno nella classe da questa derivata.

Notazione sui metodi accessori
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "UserId", nullable = false)
    public User getUser()
    {
        return this.user;
    }

@ManyToOne indica la relazione molti a uno dell'user, fetch invece è un opzione a caricamento
Il metodo getUser fa il mapping sulla rispettiva entità del database.
@JoinColumn indica il campo con cui si fa la join quindi la chiave esterna che in questo caso è il campo UserID

Injection code

Al deploy l'application server inietta del codice per "sistemare" l'entity bean ma non funziona se l'entity bean esce dalla virtual machine, un entity bean può trovarsi in attached (si può accedere a tutti i campi) e detached (no si può accedere perchè fuori dalla Virtual Machine quindi i riferimenti non funzionano).

Se si ottiene un entity bean si può usare in due modi. Se si usa con interfaccia locale questo è sempre attached.
Se invece si usa con interfaccia remota restituisco l'entity bean a qualcuno che ha chiamato con un interfaccia remota. Quindi il bean viene serializzato e ricreato dall'altra parte. In questo passaggio si perde il codice iniettato dall'AS . Perchè riferimenti esterni non funzionano. L'interfaccia remota

- quando si definiscono gli entity bean ci sono campi dove non è necessario di mettere annotazioni. L'AS tutti i get sono visti come campi del db, se @Transient

Salvo diversa indicazione, il contenuto di questa pagina è sotto licenza Creative Commons Attribution-ShareAlike 3.0 License