SwingX è una libreria open source di componenti Java, molto utile, che mette a disposizione degli sviluppatori la possibilità di utilizzare una versione "estesa" dei componenti Swing, sviluppata dal laboratorio Open Source SwingLabs per permettere uno sviluppo di applicazioni Swing più veloce, performante e con un look accattivante.
giovedì 30 aprile 2009
SwingX - utilissimi componenti Java
SwingX è una libreria open source di componenti Java, molto utile, che mette a disposizione degli sviluppatori la possibilità di utilizzare una versione "estesa" dei componenti Swing, sviluppata dal laboratorio Open Source SwingLabs per permettere uno sviluppo di applicazioni Swing più veloce, performante e con un look accattivante.
Netbeans - come aggiungere Componenti alla Palette
Per creare una palette di componenti in NetBeans 6.5:
- Creare una libreria per i componenti:
- selezionare "Tools | Library | New Library" dal menu
- settare il nome della libreria (es. 'MyLibrary') e click OK
- quando la nuova libreria è selezionata, click 'Add Jar/Folder'
- selezionare i files jar della libreria e click 'Add jar/folder'
- chiudere il library manager.
- Installare i componenti di MyLibrary:
- selezionare 'Tools | Palette | Swing/AWT Components' dal menu per aprire il Palette manager
- creare una nuova categoria col bottone 'New Category'
- selezionare la categoria creata e click su 'Add From Library'
- selezionare la libreria 'MyLibrary' e click Next
- selezionare tutti i components disponibili e click Next
- selezionare la categoria 'MyLibrary', click su Finish e chiudi il palette manager.
- Aggiungere la libreria ad un progetto. (Right-click sul nodo Libraries e selezionare 'Add Library').
mercoledì 29 aprile 2009
Message dialogs in Java
Illustriamo di seguito alcuni esempi:
-
showMessageDialog
- Esempio in cui viene creato un message dialog contenente un pulsante OK, una icona, il messaggio e l'intestazione del messaggio. Ecco alcuni esempi di utilizzo di
showMessageDialog
://default title and icon
JOptionPane.showMessageDialog(frame,
"Eggs are not supposed to be green.",
"Message");//custom title, warning icon
JOptionPane.showMessageDialog(frame,
"Eggs are not supposed to be green.",
"Inane warning",
JOptionPane.WARNING_MESSAGE);//custom title, error icon
JOptionPane.showMessageDialog(frame,
"Eggs are not supposed to be green.",
"Inane error",
JOptionPane.ERROR_MESSAGE);//custom title, no icon
JOptionPane.showMessageDialog(frame,
"Eggs are not supposed to be green.",
"A plain message",
JOptionPane.PLAIN_MESSAGE);//custom title, custom icon
JOptionPane.showMessageDialog(frame,
"Eggs are not supposed to be green.",
"Inane custom dialog",
JOptionPane.INFORMATION_MESSAGE,
icon); -
showOptionDialog
- Esempio in cui viene creato un modal dialog specificandone buttoni, icone, messaggio, titolo. Con questo metodo è possibile cambiare il testo che appare sui bottoni standard dei dialogs. Puoi anche effettuare molte altre personalizzazioni.
//Custom button text
Object[] options = {"Yes, please",
"No, thanks",
"No eggs, no ham!"};
int n = JOptionPane.showOptionDialog(frame,
"Would you like some green eggs to go "
+ "with that ham?",
"A Silly Question",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
options,
options[2]);
JPA - esempi di utilizzo
- Storing di un oggetto
private void saveButtonActionPerformed(ActionEvent evt) {
Address address = new Address();
address.setCustomerNo( customerNoText.getText() );
address.setLastname( lastnameText.getText() );
address.setFirstname( firstnameText.getText() );
address.setStreet( streetText.getText() );
address.setPostcode( postcodeText.getText() );
address.setCity( cityText.getText() );
EntityManagerFactory emf = Persistence.createEntityManagerFactory(
"JPATutorialPU" );
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
try {
em.persist( address );
em.getTransaction().commit();
} catch (Exception e) {
System.out.println( e.getMessage() );
em.getTransaction().rollback();
} finally {
em.close();
}
}
- Lettura di un oggetto
private void loadButtonActionPerformed(java.awt.event.ActionEvent evt) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory(
"JPATutorialPU" );
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
String customerNo = JOptionPane.showInputDialog(
null,
"Enter customer number",
"Input",
JOptionPane.QUESTION_MESSAGE);
try {
Query query = em.createQuery(
"SELECT a FROM Address a WHERE a.customerNo = :customerNo");
query.setParameter(
"customerNo",
customerNo);
Address address = (Address) query.getSingleResult();
customerNoText.setText( address.getCustomerNo() );
lastnameText.setText( address.getLastname() );
firstnameText.setText( address.getFirstname() );
streetText.setText( address.getStreet() );
postcodeText.setText( address.getPostcode() );
cityText.setText( address.getCity() );
} catch (Exception e) {
System.out.println( e.getMessage() );
em.getTransaction().rollback();
} finally {
em.close();
}
}
martedì 28 aprile 2009
Java Persistence Query Language (JPQL) - Query Language ad oggetti
Sintassi completa: JPQL BNF
Esempi
- SELECT
SELECT employee FROM Employee employee JOIN employee.address address WHERE address.city = :city AND employee.firstName LIKE :name ORDER BY employee.firstName- FROM
FROM Employee employee JOIN FETCH employee.address LEFT OUTER JOIN FETCH employee.phones JOIN employee.manager manager, Employee ceo- WHERE
WHERE employee.firstName = :name AND employee.address.city LIKE 'Ott%' ESCAPE '/' OR employee.id IN (1, 2, 3) AND (employee.salary * 2) > 40000- GROUP BY
GROUP BY employee.address.country, employee.address.city HAVING COUNT(employee.id) > 500- ORDER BY
ORDER BY employee.address.country, employee.address.city DESC- Subquery
WHERE employee.salary = (SELECT MAX(wellPaid.salary) FROM Employee wellPaid)- UPDATE
UPDATE Employee SET salary = salary * 2 WHERE address.city = :city- DELETE
DELETE FROM Employee WHERE address.city = :city
Esempio in Java
Query query = entityManager.createQuery("SELECT a FROM Address a WHERE a.customerNo = :customerNo");con operatore:
query.setParameter("customerNo",customerNo);
Query query = entityManager.createQuery("SELECT a FROM Address a WHERE a.customerNo = ?1 OR a.customerNo = ?2");
query.setParameter(1,customerNo1).setParameter(2,customerNo2);
Java Persistence API
- le API, definite nel package javax.persistence
- il Java Persistence Query Language (JPQL)
- metadati oggetto/relazione
Una Persistence Entity è una classe Java che tipicamente rappresenta una tabella in un database relazionale. Le istanze della Entity corrispondono a righe individuali sulla tabella. Le Entities hanno tipicamente relazioni con altre Entities, e queste relazioni sono espresse attraverso metadati oggetto/relazione. Questi metadati possono essere specificati direttamente nella classe della Entity utilizzando le annotations, oppure in un descrittore XML distribuito con l'applicazione.
- Java Persistence Query Language
Il Java Persistence Query Language (JPQL) è utilizzato per effettuare interrogazioni (query) su delle Entities memorizzate in un database relazionale. Le query hanno una sintassi simile ad SQL, ma operano su oggetti entità piuttosto che con tabelle di un database. Vedi Wikibooks:Java persistence:JPQL
- Motivazioni della Java Persistence API
Molti sviluppatori Java hanno utilizzato oggetti persistenti forniti da frameworks open source invece degli entity beans perchè gli entity beans e gli enterprise beans erano considerati troppo pesanti e complicati, e potevano essere utilizzati solo con application servers Java EE. Molte caratteristiche dei framework sono state incorporate in Java Persistence API, e progetti come Hibernate e TopLink Essentials Open-Source sono ora implementazioni delle Java Persistence API.
venerdì 24 aprile 2009
Guadagnare e Risparmiare Online col tuo Centro Commerciale
Come Aumentare il segnale radio WiFi a costo zero
Qualsiasi sia il router WiFi o Access point che utilizzi, avrai già scoperto che la trasmissione del segnale radio é molto condizionata dagli elementi architettonici presenti nell'ambiente, e questo influenza la diffusione del segnale irradiato, creando spesso zone d'ombra dove la connessione internet risulta difficile se non impossibile.
Il segnale WiFi viene irradiato dall'antenna standard a 360°, quando invece nella maggioranza dei casi sarebbe preferibile poter direzionare a piacere il segnale in una determinata direzione, con un doppio beneficio: si aumenta il segnale in quella direzione e contemporaneamente lo si scherma in quella opposta, utile per circoscrivere l'invio del segnale in direzioni indesiderate come ad esempio verso l'appartamento del vicino di condominio...
La soluzione piú semplice e contemporaneamente molto efficace nonostante le apparenze, é quella di migliorare il sistema di antenna, utilizzando uno o due "riflettori a parabola" autocostruiti, da posizionare sulle stesse antenne del router WiFi.
In questo modo concentri e dirigi in una sola direzione il segnale ricevuto e irradiato, con il risultato di avere connessioni stabili anche in presenza di segnali radio molto deboli.
Passando alla fase pratica, guarda il video nell'immagine sopra per capire meglio come si realizza l'antenna, poi scarica e stampa da qui il cartamodello, incolla su cartoncino, ricopri la sola parabola di alluminio, ritaglia, componi e installa !
Se stampi il cartamodello cosi come é nell'immagine otterrai un guadagno di circa 9 dBi, se invece raddoppi l'immagine prima della stampa il guadagno salirà a circa 12 dBi, ovviamente l'uso di due riflettori aumenterà ulteriormente il guadagno.
Per controllare e regolare l'orientamento ottimale dei riflettori puoi utilizzare NetStumbler, osservando sul monitor la variazione di intensità del segnale ricevuto con diversi orientamenti.
giovedì 23 aprile 2009
MySql Trigger - una importante funzionalità avanzata
CREATE TRIGGER nome_del_trigger
{ BEFORE | AFTER }
{ INSERT | UPDATE | DELETE }
ON nome_della_tabella
FOR EACH ROW
codice_SQL_da_applicare_con_il_trigger
- La prima linea indica il nome del trigger
- La seconda linea determina il tempo di esecuzione del trigger
- La terza linea introduce il tipo di query SQL che genererà l'esecuzione del trigger. La query può essere solo di tipo esecutivo quindi INSERT, UPDATE, DELETE ma non SELECT. In base al tipo di query ci troveremo a poter intervenire sul record già presente nel database (nel caso ad esempio di una query UPDATE o DELETE) oppure sul record nuovo che andremo ad inserire o a sostituire (query UPDATE o INSERT). Da notare che INSERT non rappresenta soltanto le query di tipo INSERT, bensì tutte le query che inseriscono dati ex-novo come LOAD DATA o REPLACE in caso di un record nuovo. Allo stesso modo vanno interpretati UPDATE e DELETE
- La quarta linea specifica la tabella da monitorare per attivare il trigger
- La quinta linea illustra l'individualità del trigger che infatti si applica ad ogni riga singolarmente e non a tutta la tabella nel suo insieme
- La sesta linea infine rappresenta il codice SQL da eseguire all'attivazione dell'evento
mercoledì 22 aprile 2009
Oracle acquisisce SUN
Sun dispone di molti prodotti, che se la politica di Oracle sarà quella di mantenerli Open Source potrebbero dargli ottimi risultati, tra cui un sistema operativo come Solaris, un’Application Server come Glassfish e tanti altri prodotti per ogni settore. Da non dimenticare infine il supporto della comunità di cui gode oggi Sun.
Per quanto riguarda gli uffici Sun porta in dote OpenOffice che negli ultimi anni è cresciuto esponenzialmente come numero di utenze.
Sul lato dello sviluppo, Sun è proprietaria di Java che nonostante sia anche esso aperto resta comunque la punta di diamante della società e ad esso accompagna l’ottimo IDE NetBeans.
Quindi quale sarà il futuro di Sun con Oracle? Continuerà sulla propria strada Open Source e quindi avrà sempre affianco la comunità, oppure richiuderà piano piano tutti i propri prodotti e vedremo nascerà decine di fork degli attuali prodotti?
venerdì 10 aprile 2009
Java Web Start - avviare applicazioni da web senza installazione
Il software Java Web Start permette di scaricare ed eseguire le applicazioni Java dal web. Vediamone le caratteristiche:
- Permette una facile attivazione delle applicazioni mediante un clic
- Garantisce che venga sempre eseguita l'ultima versione dell'applicazione
- Elimina le complicate procedure d'installazione e di aggiornamento
Java Web Start è incluso in JRE (Java Runtime Environment) come parte della versione 5.0. Java Web Start viene, pertanto, installato automaticamente durante l'installazione di JRE.
- Da un browser: fate clic su un collegamento da una pagina Web.
- Dall'icona del desktop: se utilizzate un'applicazione di frequente, potete creare un collegamento sul desktop o nel menu Start. Java Web Start potrebbe chiedervi se desiderate creare un collegamento o una voce nel menu Start. Rispondendo in modo affermativo alla domanda visualizzata sullo schermo, in futuro potrete avviare l'applicazione senza utilizzare un browser.
- Dal visualizzatore cache dell'applicazione Java: Java Web Start fornisce anche un visualizzatore cache dell'applicazione che potete avviare dal Pannello di controllo Java. Il visualizzatore cache vi consente di avviare direttamente le applicazioni scaricate.
Istruzioni per l'avvio dal visualizzatore cache dell'applicazione- Da Start > Impostazioni > Pannello di controllo, fate doppio clic sull'icona Java. Viene avviato il Pannello di controllo Java.
- Fate clic sulla scheda Generale.
- Fate clic sul pulsante Impostazioni nella sezione File temporanei Internet.
- Fate clic sul pulsante Visualizza applicazioni.
- Fate doppio clic sull'applicazione che desiderate avviare nell'elenco.
- Dal prompt dei comandi: potete avviare un'applicazione anche dal prompt dei comandi digitando javaws jnlp_url dove jnlp_url rappresenta l'URL del file jnlp dell'applicazione.
- Da Start > Esegui, digitate "command". Viene visualizzata la finestra del prompt dei comandi.
- Digitate "javaws url_of_jnlp".
Documentazione Java Web Start per sviluppatori
venerdì 3 aprile 2009
giovedì 2 aprile 2009
Toplink.jdbc - connessione a server remoto dietro proxy
Siccome ero dietro un proxy, il problema era dovuto proprio ad esso. Ho risolto aggiungendo un'eccezione per l'indirizzo del db server sui settaggi del proxy in Windows XP.