mercoledì 20 gennaio 2016

J2EE vs J2SE

J2EE vs J2SE sono prodotti della Oracle.
Java Platform , Standard Edition o Java SE è una piattaforma molto diffusa per sviluppare nel linguaggio Java. E' una piattaforma per realizzare soluzioni di uso generale ad elevata portabilità.
In pratica Java SE consiste della sua Virtual Machine che serve a eseguire i programmi Java, insieme a delle librerie, o pacchetti, che permettono le più elementari operazioni di utilizzo del file system, della rete, delle interfacce grafiche e cosi via.
La Java Platform, Enterprise Edition, o Java EE fornisce un insieme di API e ambienti di runtime per sviluppare ed eseguire software a livello enterprise , includendo web service, elaborazioni multi-tiered, scalabilità, e l'utilizzo di applicazioni sicure a livello di rete.
J2EE estende la J2SE fornendo API per la mappatura di oggetti relazionali, per lo sviluppo di architetture multi-tiered, e la realizzazione di web services. Inoltre fornisce il supporto per la modularizzazione dei componenti che vengono eseguiti su un application server. Permette di configurare le varie parti del software sviluppate attraverso l'ausilio del linguaggio XML.

Sql per estrarre un valore massimo tra quelli presenti in un gruppo

Ieri mi sono scervellato per arrivare ad ottenere l’estrazione del valore massimo tra quelli presenti in una tabella Postgres. In pratica data una tabella A, per alcune righe che non hanno valorizzata una determinata colonna c, voglio trovare data una chiave di 3 valori che in questo caso saranno blocco, loco e data uscita, i valori di una colonna c, data ingresso massima relativi a righe diverse. Come spesso succede in questi casi un esempio vale più di mille parole.
Data la query:

select distinct b.blocco, b.loco, b.data_ora_uscita_programmata, b.data_ora_ingresso_effettiva, c.data_ora_ingresso_effettiva
from matr_dati b, matr_dati c
where
b.blocco = c.blocco and b.loco = c.loco and
c.data_ora_ingresso_effettiva is not null and
c.data_ora_ingresso_effettiva < b.data_ora_uscita_programmata and
b.data_ora_uscita_programmata >= to_date('15102015','ddMMyyyy') and
b.data_ora_uscita_programmata < to_date('22102015','ddMMyyyy') and
b.data_ora_ingresso_effettiva is null  and
b.blocco in ('LM14PXC329','LM10MDT144','LM10MDT143')
order by b.blocco,b.loco, b.data_ora_uscita_programmata asc

ottengo questi valori:
blocco                loco            uscita                        ingresso_a       ingresso_b
LM10MDT143    E464194    2015-10-18 12:22:00    (null)    2015-10-15 15:20:17
LM10MDT143    E464194    2015-10-18 12:22:00    (null)    2015-10-16 09:32:52
LM10MDT143    E464194    2015-10-18 12:22:00    (null)    2015-10-17 15:18:09
LM10MDT143    E464194    2015-10-20 12:22:00    (null)    2015-10-15 15:20:17
LM10MDT143    E464194    2015-10-20 12:22:00    (null)    2015-10-16 09:32:52
LM10MDT143    E464194    2015-10-20 12:22:00    (null)    2015-10-17 15:18:09
LM10MDT143    E464194    2015-10-20 12:22:00    (null)    2015-10-19 15:13:08
LM10MDT144    E464191    2015-10-17 12:22:00    (null)    2015-10-15 09:44:46
LM10MDT144    E464191    2015-10-19 12:22:00    (null)    2015-10-15 09:44:46
LM10MDT144    E464191    2015-10-20 17:04:00    (null)    2015-10-15 09:44:46
LM14PXC329    E464197    2015-10-19 17:31:00    (null)    2015-10-16 11:01:20
LM14PXC329    E464197    2015-10-21 17:31:00    (null)    2015-10-16 11:01:20
Come si vede ad ogni tripletta blocco,loco, ingresso corrispondono più uscite. Per associare ad ogni tripletta blocco,loco, data uscita la data di valore ingresso_b massima modifico la query precedente usando un inner_join nel seguente modo:
select distinct b.blocco, b.loco, b.data_ora_uscita_programmata as uscita, b.data_ora_ingresso_effettiva as ingresso_a, c.data_ora_ingresso_effettiva as ingresso_b
from matr_dati b, matr_dati c inner join (
select c.blocco as blocco, c.loco as loco, max(c.data_ora_ingresso_effettiva) as MaxDataOraIngressoEffettiva from matr_dati c
where c.data_ora_ingresso_effettiva < to_date('22102015','ddMMyyyy')
group by c.blocco, c.loco
) MaxIngresso on (c.loco=MaxIngresso.loco and c.blocco=MaxIngresso.blocco and c.data_ora_ingresso_effettiva = MaxIngresso.MaxDataOraIngressoEffettiva )
where
b.blocco = c.blocco and b.loco = c.loco and
c.data_ora_ingresso_effettiva is not null and
c.data_ora_ingresso_effettiva < b.data_ora_uscita_programmata and b.data_ora_uscita_programmata >= to_date('15102015','ddMMyyyy') and
b.data_ora_uscita_programmata < to_date('22102015','ddMMyyyy') and
b.data_ora_ingresso_effettiva is null and
b.blocco in ('LM14PXC329','LM10MDT144','LM10MDT143')
order by b.blocco,b.loco, b.data_ora_uscita_programmata asc

ottenendo quindi il risultato riportato:
blocco               loco               uscita                 ingresso_a    ingresso_b
LM10MDT143    E464194    2015-10-20 12:22:00    (null)    2015-10-19 15:13:08
LM10MDT144    E464191    2015-10-17 12:22:00    (null)    2015-10-15 09:44:46
LM10MDT144    E464191    2015-10-19 12:22:00    (null)    2015-10-15 09:44:46
LM10MDT144    E464191    2015-10-20 17:04:00    (null)    2015-10-15 09:44:46
LM14PXC329    E464197    2015-10-19 17:31:00    (null)    2015-10-16 11:01:20
LM14PXC329    E464197    2015-10-21 17:31:00    (null)    2015-10-16 11:01:20
In questo modo ad ogni tripletta blocco,loco,data uscita ho associato la data di ingresso_b relativa al valore massimo.

Comandi fondamentali per gestire Glassfish su server Unix

Dopo un po’ di tempo torno a scrivere su questo blog.Si dovrei essere più assiduo….ma chissenefrega.
Spesso mi capita di dover fare delle operazioni di stop/start di Glassfish su macchine Unix, in quanto a volte capita che il server si impalli o non risponda come dovuto.
Qui vi elenco i principali comandi per l’avvio/stop standard dell’application server Glassfish.
Per avviare un server glassfish bisogna entrare nella console Unix ( o collegarsi in remoto tipicamente con Putty) e nella root del server posizionarsi nella cartella bin.
E’ buona norma assicurarsi di essere l’unico ad accedere alla console Unix della macchina, in quanto il lancio di più comandi simultaneamente da spesso problemi.
Per esempio un percorso classico è questo:
cd  opt/glassfish4/glassfish/bin
una volta qui si può lanciare il comando di start:
sudo ./asadmin start-domain domain1
va lanciato in modalità super user.
A questo punto il server dovrebbe avviarsi velocemente.
Per fermare il server il comando è invece:
sudo ./asadmin stop-domain domain1
Nel caso in cui questo non risponda a tali comanti, solitamente allo stop, si può uccidere il processo “zombie” del Glassfish e poi riavviarlo con il comando di start.
Per cercare il processo relativo al Glassfish si lancia da console il comando
ps -ef | grep java 
che mostra i processi java attivi sulla macchina. Come riportato quello di nostro interesse è il processo che nella descrizione ha il percorso del server Glassfish sulla macchina Unix.
console
A questo punto lanciamo una kill sul numero di processo relativo e saremo sicuri di aver fermato il Glassfish.
sudo kill -9 14253
Dopo di chè riavvieremo Glassfish con il comando start dalla cartella bin precedentemente descritto.
Presto farò un post analogo per le macchine Windows.
Roberto
Per esigenze
di lavoro oggi mi sono trovato ad utilizzare questo software per operare su un DB Oracle. L’interfaccia è chiara e pulita. La configurazione delle connessioni verso una nuova sorgente dati, è semplice. L’SQL editor è assistito tramite il suggerimento dei metadati. E’ uno strumento dotato di una versione free e una a pagamento con delle funzionalità aggiuntive in cambio. In rete, MA NON QUI, è facile trovare il modo di “sbloccare” la versione Pro. Se siete stanchi del solito Ranocchio (Toad) questo ve lo consiglio. Per maggiori info