Category Archives: Java

Reports molto grandi con Jasper Reports

In caso di report molto grandi è buona norma utilizzare la caratteristica “VIRTUALIZER” che permette di serializzare l’output delle pagine del report su file system, evitando di occupare tutta la memoria disponibile.

Esistono vari tipi di Virualizer

– JRFileVirtualizer, che tiene in memoria solo il numeri di pagine desiderato e conserva le pagine in eccedenza in dei file. In questo caso lo svantaggio è legato all’overhead della gestione dei file. Durante il processo di elaborazione vengono prodotti molti file. Alla fine del processo questi file vengono utilizzati per produrre il file del report finale. Questo virtualizer può essere usato quando si non si hanno sorgenti di dati molto grandi.

РJRSwapFileVirtualizer, che supera lo svantaggio del JRFileVirtualizer utilizzando un unico file in cui memorizzare le pagine in eccedenza. Questo virtualizer ̬ consigliato per sorgenti di dati molto grandi.

– JRGzipVirtualizer, è uno speciale virtualizer che invece di scrivere i dati in dei file, li comprime usando l’algoritmo gzip, riducendo l’uso di memoria.

Esempio:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
JRSwapFile swapFile = null;
JRAbstractLRUVirtualizer vir = null;
 
if (getConfig().getVitualizerType().equalsIgnoreCase("swap")) {
  swapFile = new JRSwapFile(getOutputPath(), getConfig().getVitualizerMaxBlockSize(), getConfig().getVitualizerMinGrow());
  vir = new JRSwapFileVirtualizer(getConfig().getVitualizerMaxPage(), swapFile, true);
} else if (getConfig().getVitualizerType().equalsIgnoreCase("file")) {
  vir = new JRFileVirtualizer(getConfig().getVitualizerMaxPage(), getOutputPath());
}
 
if (vir != null) {
  params.put(JRParameter.REPORT_VIRTUALIZER, vir);
}
 
jp = JasperFillManager.fillReport(reportFilename, params, getDataSource());

Fletto i muscoli e sono nel vuoto.

powered by IMHO 1.3

java.util.zip – Compressing/Decompressing a Byte Array

Ecco un esempio di utilizzo di java.util.zip per la compressione di un array di byte.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
byte[] input = "some some bytes to compress".getBytes(); // Configuriamo il livello di compressione
Deflater compressor = new Deflater();
compressor.setLevel(Deflater.BEST_COMPRESSION); // Inseriamo i dati da comprimere.
compressor.setInput(input);
compressor.finish(); // Creiamo un array espandibile per contenere i dati compressi.
// Non possiamo utilizzare un array delle stesse dimensioni dei dati in
// input perché non è garantito che la i dati compressi abbiano una
// dimensione inferiore all'originale.
ByteArrayOutputStream bos = new ByteArrayOutputStream(input.length); // Avvio compressione
byte[] buf = new byte[1024];
while (!compressor.finished()) {
int count = compressor.deflate(buf);
bos.write(buf, 0, count);
}
try {
bos.close();
} catch (IOException e) {
} // Prelievo dati compressi
byte[] compressedData = bos.toByteArray();

Decompressing a Byte Array

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Inseriamo i dati da decomprimere
Inflater decompressor = new Inflater();
decompressor.setInput(compressedData); // Creiamo un array espandibile per la decompressione dei dati.
ByteArrayOutputStream bos = new ByteArrayOutputStream(compressedData.length); // Avvio decompressione
byte[] buf = new byte[1024];</code>
 
while (!decompressor.finished()) {
try {
int count = decompressor.inflate(buf);
bos.write(buf, 0, count);
} catch (DataFormatException e) {
}
}
try {
bos.close();
} catch (IOException e) {
} // Prelievo dati decompressi.
 
byte[] decompressedData = bos.toByteArray();

Fletto i muscoli e sono nel vuoto.

Fonte: The Java Developers Almanac 1.4

powered by IMHO 1.3

Internet Explorer Attachments Error

Ecco un altro errore di IE.

Quando inviate sulla response un allegato.

response.setHeader(“Content-disposition”,
“attachment; filename=” + outputFilename);

IE vi chiede se volete aprirlo o salvarlo. Se lo salvate non c’è problema. Tuttavia se provate ad aprirlo, molto probabilmente non riuscirete a farlo.

Per ovviare al problema bisogna aggiugere:

response.setHeader(“Expires”, “0”);
response.setHeader(“Pragma”, “cache”);
response.setHeader(“Cache-Control”, “private”);

Fletto i muscoli e sono nel vuoto.

powered by IMHO 1.3

Java String Padding

In Java there’s no built-in method.

You have two choices, follow:

  • Write a method.
  • Use third part library.

First choice, you can try to google.

Second choice, use Jakarta Commons Lang, it provides a host of helper utilities for the java.lang API, notably String manipulation methods, basic numerical methods, object reflection, creation and serialization, and System properties. etc. etc.

Java String Padding

Java non propone un metodo built’in per il paddig di una stringa. O meglio non propone i classici metodi PadLeft, PadRight.

Per ovviare al problema ci sono due possibili alternative:

  • Crearsi da soli i metodi sopracitati.
  • Affidarsi ad una libreria di terze parti.

Nel primo caso basta cercare per internet (ops dovrei dire googlare ?).

Nel secondo caso vi consiglio un ottima libreria Jakarta Commons Lang che offre un insieme di utility per manipolare le core-class.

Fletto i muscoli e sono nel vuoto.