JAVA

[java] Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(…) returned error code 5.

To solve this type of error, to to this post http://stackoverflow.com/a/37896799/4677155

Or create a file (e.g. fix.reg) and put this content

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs]

This work for windows 10, 64bit

 

Annunci
Eclipse, Maven

[maven] errore durant mvn install -> com.google.inject.ProvisionException: Guice provision errors

Eseguendo il comando mvn install su di un progetto su eclipse, capita di avere questo errore:

[ERROR] Error executing Maven.
[ERROR] com.google.inject.ProvisionException: Guice provision errors:

1) Error in custom provider, java.lang.TypeNotPresentException: Type javax.enterprise.inject.Typed not present
at ClassRealm[plexus.core, parent: null]

Questo errore nel caso più semplice è dovuto al fatto che il vostro progetto gira su di una jre vecchia o comunque inferiore alla versione 1.6.

Per risolvere il problema controllate la JRE di default del vostro progetto e portatela ad una versione 1.6 oppure superiore.

Eclipse, Maven

[Maven] Aggiunge archetype repository maven JBOSS a eclipse

Per aggiungere il repository maven di jboss, in eclipse basterà seguire la seguente guida

https://docs.jboss.org/author/display/AS7/Creating+your+own+application?_sscc=t

Dove al minuto 00:43 si chiede di inserire la seguente url https://repository.jboss.org/nexus/content/groups/public/archetype-catalog.xml , che nel video non si riesce a notare chiaramente.

Subito dopo si avranno a disposizione i repo maven di jboss.

POI

[POI Excel] column index (256). Allowable column range for BIFF8 is (0..255) or (‘A’..’IV’) then you must use the XSSF implementation

Utilizzando POI per la generazione dei file excel, quando si ci imbatte in questo errore:

column index (256). Allowable column range for BIFF8 is (0..255) or (‘A’..’IV’) then you must use the XSSF implementation

La motivazione è molto semplice, si è utilizzata l’implementazione HSSF per la generazione di file con estensione xls, questa implementazione è molto semplice e veloce ma ha come limite di colonne 256 e di righe 65000. Perciò l’errore è legato al superamento di uno dei due vincoli.

Se la nostra casistica supera questi numeri, bisogna passare all’implementazione di XSSF, per generare un file con estensione xlsx che sarà più lenta è pesante, ma ci permette di aggirare il problema.

Per maggiori informazioni leggere questi due post fantastici:

http://www.mysamplecode.com/2011/08/generate-excel-in-java-using-apache-poi.html

http://www.mysamplecode.com/2011/08/generate-excel-in-java-using-apache-poi_29.html

 

JAVA, Maven, Spring

Maven per usare Spring con la JSR-330

Per utilizzare Spring con le annotazioni standard JSR 330 e gestire il tutto tramite Maven è sufficente aggiungere le rispettive dipendenze prese da qui e qui, che, al momento, corrispondono a quanto segue.

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId>
   <version>3.1.3.RELEASE</version>
</dependency>
<dependency>
   <groupId>javax.inject</groupId>
   <artifactId>javax.inject</artifactId>
   <version>1</version>
</dependency>
Datanucleus, Maven

[maven + datanucleus] Standard error from the DataNucleus tool + org.datanucleus.enhancer.DataNucleusEnhancer

Questo mitico errore che blocca tutto il ciclo di installazione del progetto tramite maven nei sistemi WINDOWS e solo nei sistemi windows.

Per effettuare un workaround sporco bisogna modificare il codice in questo modo:


<plugins>
 <plugin>
 <groupId>org.datanucleus</groupId>
 <artifactId>maven-datanucleus-plugin</artifactId>
 <version>${org.datanucleus.core.enhancerplugin}</version>
 <configuration>
 <fork>false</fork>
 <api>JDO</api>
 <verbose>true</verbose>
 <enhancerName>ASM</enhancerName>
 <detachListener>true</detachListener>
 </configuration>
<......>

Il tag magico che risolve il problema è <fork>false</fork> (di default questo tag è impostato a true e non è presente) all’interno del tag <configurations>.

Riferimenti:

http://support.microsoft.com/kb/830473

http://stackoverflow.com/questions/8353855/the-command-line-is-too-long-standard-error-from-the-datanucleus-tool

Eclipse, JAVA

Dire addio alle NullPointerException velocemente e semplicemente

Uno tra i peggiori e maggiormente insidiosi nemici del buon codice è il lancio di una NullPointerException. Peggiori perché molto frequente e insidiosi perché molto difficile da prevedere se non applicando una buona dose di attenzione durante la scrittura del codice.
Nel tempo sono state proposte varie soluzioni: si va dall’utilizzo di tipi cuscinetto (Optional<T>) alla scrittura di nuovi linguaggi (Ceylon) o di costrutti zuccherosi (Groovy ‘?’), ma nulla di applicabile velocemente e semplicemente al linguaggio Java.

A dire il vero la soluzione era già stata proposta con la JSR-305 il cui processo di inclusione nella specifica Java è attualmente ad un punto morto.
Fortunatamente la comunità di sviluppatori è più rapida ed è presente un’implementazione ospitata su Google Code e presente anche sui repository Maven.

La soluzione proposta sarebbe questa: si applica l’annotazione @Nullable alle variabile che ci si aspetta possano essere null, mentre si usa @Nonnull per quelle che ci si aspetta non possano mai essere null. Semplice e veloce. Ci penserà poi il compilatore/analizzatore statico di codice a verificare che non rischiamo di incorrere nell’odiata eccezione senza volerlo.
Nella versione ottimizzata vi è anche la possibilità di annotare il package per definire una semantica predefinita ed annotare solo le variabili nulle o viceversa.

Si dia il caso che questa sia proprio la soluzione ideale per Java. È infatti sufficiente configurare il proprio IDE per utilizzare queste annotazione nella fase di compilazione del codice ed impedirci così di incorrere in NullPointerException indesiderate. Senza contare che i principali software di analisi statica del codice utilizzano o possono utilizzare queste semplici annotazioni per metterci in guardia da accessi non controllati.