Come caricare i dati da DB all’avvio della web app

Ci troviamo ora nella classe del MODEL della finestra principale di gestione della todolist.
Perchè mettiamo un’ArrayList dentro ListModelList?
Perchè coi beans le entities le prendi sull’oggetto list è un ArrayList
listModelList è una cosa di zk solo per la parte client, quando ci facciamo restituire la lista di entities interroghiamo il server che restituisce una lista di arraylist, quando lo diamo a ZK lo convertiamo in listModelList.
Quando recuperiamo i dati con il bean, otteniamo una List di TodoENT quando lo passiamo a ZK questa lista la mettiamo dentro ad una ListModelList altrimenti ZK non capirebbe. Si potrebbe anche non usare ListModelList ma automatizza parecchie operazioni ad esempio se modifico un record con ListModelList lo vedo subito nello zul, mentre diversamente con la List classica dovrei fare ogni volta refresh.

public class todo_gestioneMODEL { 
//... 
private ListModelList todolist;

@Init
public void init() {	
	//inizializzo la lista vuota 
	todoList = new ListModelList<>(new ArrayList());
}		
//... 

Ora anziché inizializzare una lista vuota, la vogliamo caricare dal DB con già dei dati. In questo modo ogni volta che chiudiamo e riapriamo la nostra web app troviamo l’elenco di righe dei Todo.



public class todo_gestioneMODEL {

	// attributi
	private ListModelList todoList;
	private TodoENT todoSel;
	private int todoListSize;
	private TodoEJB myTodoEJB;

	// costruttori e init
	public todo_gestioneMODEL() {
		//richiamo il bean di gestione delle entità (TodoEJB)
		 myTodoEJB = EJBDispatcher.getTodoEJB();
	}

	@Init
	public void init() {
		
		//ottengo la lista di entità
		List l = myTodoEJB.getTodoENTList();
		
		//inizializzo la lista dei todo 
		todoList = new ListModelList<>(l);	
	}
//... metodi getters and setters etc

La classe EJBDispatcher contiene il metodo getTodoEJB() che mi serve a richiamare il bean di gestione delle entità sul DB.

public class EJBDispatcher {
public static TodoEJB getTodoEJB() {
		TodoEJB myTodoEJB = null;
		try {
			InitialContext ic = new InitialContext();
			myTodoEJB = (TodoEJB) ic
					.lookup(EJBS_BASEPATH + "TodoEJB!base.ejbs.beans.TodoEJB");

		} catch (NamingException e) {
			e.printStackTrace();
		}
		return myTodoEJB;
	}
}

Il metodo getTodoENTList (vedi riferimento alla classe sopra todo_gestioneMODEL) di seguito, esegue la query findAll:

@NamedQueries({
	@NamedQuery(name = "TodoENT.findAll", query = "SELECT p FROM TodoENT p ORDER BY p.creationDate DESC"),

	})

E nel TodoEJB ecco il metodo getTodoENTList:

 
/* LETTURA DI TUTTE LE RIGHE DELLA TABELLA tramite query dell'entità */
	@SuppressWarnings("unchecked")
	public List getTodoENTList() {

		List list;

		Query todoENTQuery = em.createNamedQuery("TodoENT.findAll",
				TodoENT.class);

		list = todoENTQuery.getResultList();

		return list;
	}

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *