venerdì 20 luglio 2012

Eclipse Indigo scegliere Jboss 6.1

Di default Indigo ha il supporto fino a Jboss 5.0 ( da Windows/Preferences/Server/Runtime Environments ).
Per aggiungere il supporta  a versioni successive occorre effettuare un update sw.
L'url è http://download.jboss.org/jbosstools/updates/development/indigo/

Bisogna selezionare la voce Abridget Jboss Tools

giovedì 12 luglio 2012

Transaction Timeout

Il Transaction Timeout serve a specificare il tempo massimo di esecuzione di una singola transazione.
Il valore di default cambia a secondo dell' AS utilizzato.
Esempio: in Jboss è 300 secondi (su JBOSS 5.1 si può impostare in deploy/transaction-jboss-beans.xml)

Usando un bean BMT (la transazione gestita da codice e non demandata all'AS), è possibile cambiare questo valore utilizzando setTransactionTimeout(int seconds) dell'interfaccia UserTransaction.

Invece per i bean CMT (transazione gestita dall'AS) non si ha a disposizione un metodo simile; questo vuol dire che se si ha la necessità di modificare il transaction timeout bisogna necessariamente agire a livello di configurazione dell'AS.

lunedì 9 luglio 2012

Java pass by value

Il linguaggio Java utilizza solo la metodologia "pass by value".
E' una delle prime nozioni che si apprendono ai corsi di Java ma spesso capita di trovare errori in merito.
Nel  caso di semplici variabili è tutto molto chiaro, esempio classico:

public void badSwap(int var1, int var2)
{
  int temp = var1;
  var1 = var2;
  var2 = temp;
}

Chiamando questo codice non si effettuerà mai lo scambio di variabile perchè i parametri passati in input sono delle copie degli originali.

Quindi facendo

....
int a=5;
int b=6;
badSwap(a,b);
System.out.println(a);
System.out.println(b);
.....

Sarà stampato sempre 5 per a e 6 per b.

Per gli oggetti vale lo stesso principio, ossia il puntatore passato è una copia di quello originale, solo che, essendo oggetti, la modifica si rifletterà sull'oggetto sottostante , a meno di reinizializzazioni dell'oggetto nel metodo.

Vediamo un esempio:

private void alterList1(ArrayList l)
{
        l.add("a");
        l.add("e");
        l.add("i");
        l.add("o");
        l.add("u");
}

Se lo chiamiamo da questo main:

public static void main(String[] args) {
        TestPassByVal t=new TestPassByVal();
        ArrayList l=new ArrayList();
        l.add("b");
        l.add("c");
        t.alterList1(l);
        System.out.println(l);

    }

Il risultato sarà:

[b, c, a, e, i, o, u]

Se invece nel metodo si reinizializza l'oggetto allora le cose cambiano.

private void alterList2(ArrayList l)
{
        l=new ArrayList();
        l.add("a");
        l.add("e");
        l.add("i");
        l.add("o");
        l.add("u");
}

In questo caso lo stesso main, se chiamasse il metodo alterList2 avrebbe come risultato
[b,c].
E' evidente il motivo, essendo Java sempre pass by value il puntatore all'oggetto ArrayList nel metodo è una copia dell'originale; se non è reinizializzato allora i 2 puntatori sono legati allo stesso oggetto e le modifiche nel metodo si ripercuotono nell'oggetto stesso, altrimenti no.

martedì 3 luglio 2012

Javascript focus automatico su textbox successiva


Script js per ottenere che dopo aver digitato i caratteri necessari in una textbox ci sia il passaggio del focus alla textbox successiva.
Esempio : textbox per l'ora e textbox per i minuti

Il metodo da utilizzare è l'onkeyup.

function verificaFocus(){
var ora=document.getElementById("txtOra");

 if(ora.value.length==2){
 document.getElementById("txtMinuto").focus();
 }
}

Qui sotto si può testare il codice
Ora:    Minuti:

Jquery autocompletamento


Per ottenere l'autocompletamento Jquery dispone di funzioni built-in.
L'implementazione è molto semplice:

<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
<script>
  $(document).ready(function() {
    $("input#autoritaRilascio").autocomplete({
    source: ["COMUNE", "PREFETTURA", "MOTORIZZAZIONE", "MINISTERO DEGLI INTERNI","PROVINCIA","REGIONE","STATO ESTERO"]
});
  });
</script>


In questo caso su un campo di tipo textbox con id=autoritaRilascio sono precaricati dei valori (lato js) che compaiono come suggerimenti.
E' possibile (devo vedere come) anche effettuare il caricamento di questi dati tramite chiamata server.
Qui sotto un esempio di funzionamento:

Autorità di rilascio documento:

Java metodo clone ArrayList

Con questo metodo , che torna un Object , è possibile effettuare una cosiddetta "shallow copy" (copia superficiale) di un oggetto.
Quindi, in una situazione di questo tipo:

ArrayList<Person> lp=new ArrayList<Person>();
Person p=new Person("mario", "rossi");
Person p1=new Person("gino", "bianchi");
lp.add(p);
lp.add(p1);
ArrayList<Person> lp2=(ArrayList<Person>)lp.clone();
stampaPersone(lp);
stampaPersone(lp2);
p.setNome("Ermenegildo");
stampaPersone(lp);
stampaPersone(lp2);


Dove stampaPersone è un semplice metodo che stampa nome e cognome dell'oggetto Person, nella seconda tornata di stampe il nome della persona p sarà modificato per entrambe le liste, questo appunto perchè la copia è superficiale, non sono quindi ricreati gli oggetti.
Se dobbiamo quindi effettuare copie complete (deep copy) è necessario implementarci i nostri metodi ad hoc.
Da notare che per le Stringhe, che pure sono oggetti ma in java hanno un trattamento particolare (essendo immutabili), quanto visto non vale.

Quindi con il seguente codice:

ArrayList<String> l=new ArrayList<String>();
String u="uno";
l.add(u);
l.add("due");
l.add("tre");
ArrayList<String> clonata=(ArrayList<String>)l.clone();
clonata.add("quattro");
System.out.println("Stampa lista originale");
stampa(l);
System.out.println("Stampa lista clonata");
stampa(clonata);
u="akdajjda";
System.out.println("Stampa lista originale");
stampa(l);
System.out.println("Stampa lista clonata");
stampa(clonata);

Il fatto di aver assegnato un nuovo valore alla variabile u è ignorato dalle liste