venerdì 21 ottobre 2011

Appunti di Jabba #2

Verso i session bean. Gli EntityManager.

Stabilito che quindi avremo a che fare con gli entity bean, e che queste sono entry di tabelle relazionali, facciamo un passo oltre e capiamo il modo per arrivare a farci un po' di manipolazione.
La via primaria e' quella di usare dei session bean, che traducono in qualche modo i task che dobbiamo realizzare per il nostro sistema informatico: prenotare un noleggio, effettuare il pagamento, ecc ecc.
Il session bean deve contenere un EntityManager (e' buon uso che lo contenga, diciamo) che si occupi della persistenza (nel DB) dei dati che inseriamo, cancelliamo e modifichiamo.
Gli EntityManager si occupano dei caratteri transazionali delle nostre attivita', che tradotto in soldoni per i piu', significa garantire che accedendo in molti agli stessi dati non ci si pesti i piedi gli uni con gli altri sovrascrivendo modifiche altrui o usufruendo di dati non piu' attuali.
Vediamo, tanto per, la creazione di un nuovo elemento Automobile e la sua ricerca nel DB.

package com.cAR4u.agenzia;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import com.cAR4u.domain.Automobile;

@Stateless

public class AgenziaBean implements AgenziaRemote{
@PersistenceContext
(unitName="cAR$u")

private EntityManager manager;

public void createAutomobile(Automobile auto) {

manager.persist(auto);

}

public Automobile findAutomobile(int pKey) {

return manager.find(Automobile.class, pKey);

}

}

Da usare previa definizione dell'interfaccia opportuna


package com.cAR4u.agenzia;

import javax.ejb.Remote;
import com.cAR4u.domain.Automobile;

@Remote

public interface AgenziaRemote {

public void createAutomobile(Automobile auto);

public Automobile findAutomobile(int id);

}

Sfortunatamente, salendo verso il livello applicativo vero e proprio stiamo tralasciando il mapping della persistenza, mi appunto un'altra volta che dobbiamo farci una tappa presto.

venerdì 14 ottobre 2011

Appunti di jabba #1

Le mie conoscenze non hanno sufficiente spessore per pubblicare manualistica sul tema enterprise javabeans e tecnologia j2ee. Al contrario, ho iniziato da poco a studiare la materia.
Vorrei solo utilizzare questo spazio per scrivermi degli appunti, a partire dai mattoncini con cui sto prendendo confidenza. Se possono essere utili a qualcuno, ben venga. Altrimenti passate oltre, non si offende nessuno. ;)

Gli entity bean.
Nella complessa stratificazione di programmazione che si puo' fare per ottenere applicazioni distribuite per clienti del web (a cui mi piacerebbe arrivare proprio partendo dal basso) comincio con appuntarmi di questi oggetti.
L'individuazione delle entita' di un sistema informativo in generale e' un passaggio fondamentale per introdurre in questo sistema un sistema informatico.
Esempi banali a frotte. Se voglio informatizzare un sistema di turni di lavoro, le persone che ci lavorano, le postazioni sono esempi di entita'. Per un sistema di prenotazione delle crociere, le cabine, le navi sono altri esempi. Per le banche? I conti correnti, i correntisti, le agenzie.
Modellare entita' e relazioni tra le entita' costituisce parte fondamentale della modellazione concettuale del sistema di informazioni.
Tradurre questa modellazione in tabelle, vuol dire scegliere una modellazione logica relazionale.
Ecco cosi' diventare le entita' righe delle tabelle, record.
Chiaramente sto semplificando ed andando a braccio. Ma di tutto cio' esistono ampie trattazioni.
Eccoci quindi con la tabella conti_correnti o con la tabella prodotti di un magazzino.
Somewhere somehow queste informazioni vanno inserite, cancellate o modificate (quindi bisogna prima preparargli lo spazio).

Immaginiamo di dover gestire un servizio di noleggio di auto usate: l'entita' AUTO nel parco macchine e' senz'altro un must.

package com.cAR4u.domain

import javax.persistence.*;

@Entity

@Table(name="AUTO")

public class Automobile implements java.io.Serializable{

private int id;

private String marca;
private String modello;

private int passeggeri;

private int anno_imm;

@Id

@Column(name="ID")
public int getId( ) { return id; }
public void setId(int pk) { id = pk; }

@Column(name="MARCA")
public String getMarca( ) { return marca; }
public void setMarca(String str) {marca = str; }

@Column(name="MODELLO")
public String getModello( ) { return modello; }
public void setModello(String str) {modello = str; }

@Column(name="PASSEGGERI")
public int getPasseggeri( ) { return passeggeri; }
public void setPasseggeri(int psg) { passeggeri = psg; }

@Column(name="ANNO_IMMATRICOLAZIONE")
public int getAnnoImmatricolazione( ) { return anno_imm; }
public void getAnnoImmatricolazione(int am) { anno_imm = am; }



}


Le proprieta' della classe, per cui sono definiti getter e setter sono le colonne della nostra tabella, ecco quindi che un oggetto e' una tupla, un record nella nostra tabella delle AUTO.
Il file .class sara' contenuto in com/cAR4u/domain.

Un file persistence.xml conterra' le informazioni per accedere al Db, e alla tabella le cui righe sono mappate da questi bean. Ma questo lasciamolo per un'altra volta.