giovedì 20 febbraio 2014

Abilitare auto complete su Eclipse Indigo per JSF

Per vedere l'autocomplete sulle pagine .xhtml in JSF 2 su Eclipse occorre andare sul progetto, tasto destro proprietà quindi andare su Project Facets e spuntare la dicitura per JSF 2.0.
La prima volta che si attua questa operazione chiede da dove si desidera prendere i jar necessari, conviene impostare direttamente i jar del progetto, scegliendo l'opzione "Disable library configuration".

Qui vediamo il menu delle facets





martedì 18 febbraio 2014

Impossibile effettuare il download di file con IE7 IE8. Impossibile aprire il sito internet. Sito non disponibile o non trovato.

Sono incappato in questo errore quando in una web application tentavo di scaricare un documento.
L'errore si verificava solo in alcune macchine di un dominio aziendale e solo con i browser IE7 ed IE8.
Con tutti gli altri browser,  Firefox, Chrome, etc.e anche con IE9 e IE10 invece funzionava correttamente.
L'errore effettivamente non è molto parlante e abbiamo perso parecchio tempo prima di capire il reale motivo.
Dal sito della microsoft e da alcuni blog si evince che in presenza di alcuni header nella cache come :

response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control","no-cache,no-store,max-age=0");
response.setDateHeader("Expires", 1);

viene segnalato questo errore.
Il motivo francamente non si capisce bene, e sembrerebbe una sorta di bug visto che anche dal sito della microsoft consigliano di reimpostare il browser oppure di settare un parametro sul regedit di sistema (vedi qui e anche qui ).
Per risolvere noi abbiamo inserito i seguenti header:

response.setHeader("Cache-Control", "cache, must-revalidate");
response.setHeader("Pragma", "public");

martedì 4 febbraio 2014

Tomcat 7 web console

Per attivare la web console di tomcat occorre che siano presenti nel file

[TOMCAT_DIR]/conf/tomcat-users.xml

le seguenti voci:



  <role rolename="tomcat"/>
 <role rolename="manager-gui"/>
  <user username="tomcat" password="tomcat" roles="tomcat,manager-gui,admin-gui"/>


Quindi in console cliccando su Manager App verranno chieste le credenziali (in questo caso tomcat tomcat) in modalità basic (con il pop up sul browser).
E si può accedere e deployare/undeployare le applicazioni.

Alcune accortezze (se il tomcat è su sistemi windows ed è su un server remoto):

1) Modificare il file [TOMCAT_DIR]/conf/context.xml aggiungendo i 2 attributi antiJARLocking e antiResourceLocking a true:


<Context antiJARLocking="true"
      antiResourceLocking="true">


2) Nel file [TOMCAT_DIR]/webapps/manager/WEB-INF/web.xml innalzare il limite del multipart config (il default è 50 MB) per consentire l'upload anche di war più grossi

Es:

 <multipart-config>

            <!-- 90MB max -->

            <max-file-size>91798008</max-file-size>

            <max-request-size>91798008</max-request-size>

            <file-size-threshold>0</file-size-threshold>

          </multipart-config>


Crivello di Eratostene

Di seguito una implementazione in Java del metodo del crivello di Eratostene per trovare dato un numero n la lista dei numeri primi fino ad n (http://it.wikipedia.org/wiki/Crivello_di_Eratostene ).

package it.test;
import java.util.*;
public class CrivelloEratostene {
 public static void main(String[] args) {
   System.out.println("Inserire il numero di interi desiderato: ");
         Scanner scan = new Scanner(System.in);
         int num = scan.nextInt();
         List<Integer> listNumbers=new ArrayList<Integer>();
         List<Integer> numbersToExclude=new ArrayList<Integer>();
         for(int i=2;i<num;i++){
          int mul=i;
          if(numbersToExclude.contains(i))
        break;
          if(i==2 || !isPrime(i)){
           for(int j=i;j<num;){
            numbersToExclude.add(j);
            j=j+mul;
           }
          }
         }
         for(int i=2;i<num;i++){
          if(!numbersToExclude.contains(i)){
           listNumbers.add(i);
          }
         }
         System.out.println(String.format("Lista numeri primi fino ad %d  : %s", num,listNumbers));
 }
 public static boolean isPrime(int n){
    for(int i=2;i<n;i++) {
          if(n%i==0)
              return false;
      }
      return true;
 }

}




.BAT per cancellare vecchi file di log


Un piccolo script .bat per cancellare tutti i file più vecchi di una certa data:

set log_path="c:\tomcat\logs"
set numDays= 7
forfiles /p %logPath% /s /d -%numDays% /c "cmd /c del @FILE"

lunedì 3 febbraio 2014

JDBC 4.0 utilizzo WebRowSet

L'interfaccia WebRowSet eredita da CachedRowSet e rappresenta una vista disconnessa dai dati del db.
Produce un output in formato xml dei risultati e della struttura delle tabelle coinvolte.
Es:

package it.rowsetTest;
import java.sql.Connection;
import java.sql.DriverManager;
import javax.sql.rowset.WebRowSet;
import com.sun.rowset.WebRowSetImpl;
public class XmlRowSet {
 public static void main(String[] args) throws Exception {
  String urlConn="";
  
  WebRowSet p= new WebRowSetImpl();
  String select="select top 5 id,descrizione from S_ATECO2007";
  p.setCommand(select);
  p.setUrl("jdbc:sqlserver://127.0.0.1:1433;databaseName=test;selectMethod=cursor");
  p.setUsername("test");
  p.setPassword("test"); 
  p.execute();
  java.io.FileOutputStream oStream =new java.io.FileOutputStream("test.xml");
  p.writeXml(oStream);
 }

}


In questo modo avremo un output di questo tipo:

<?xml version="1.0"?>
<webRowSet xmlns="http://java.sun.com/xml/ns/jdbc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/jdbc http://java.sun.com/xml/ns/jdbc/webrowset.xsd">
  <properties>
    <command>select top 5 id,descrizione from S_ATECO2007</command>
    <concurrency>1008</concurrency>
    <datasource><null/></datasource>
    <escape-processing>true</escape-processing>
    <fetch-direction>1000</fetch-direction>
    <fetch-size>0</fetch-size>
    <isolation-level>2</isolation-level>
    <key-columns>
    </key-columns>
    <map>
    </map>
    <max-field-size>0</max-field-size>
    <max-rows>0</max-rows>
    <query-timeout>0</query-timeout>
    <read-only>true</read-only>
    <rowset-type>ResultSet.TYPE_SCROLL_INSENSITIVE</rowset-type>
    <show-deleted>false</show-deleted>
    <table-name>S_ATECO2007</table-name>
    <url>jdbc:sqlserver:gianos_professionisti</url>
    <sync-provider>
      <sync-provider-name>com.sun.rowset.providers.RIOptimisticProvider</sync-provider-name>
      <sync-provider-vendor>Oracle Corporation</sync-provider-vendor>
      <sync-provider-version>1.0</sync-provider-version>
      <sync-provider-grade>2</sync-provider-grade>
      <data-source-lock>1</data-source-lock>
    </sync-provider>
  </properties>
  <metadata>
    <column-count>2</column-count>
    <column-definition>
      <column-index>1</column-index>
      <auto-increment>true</auto-increment>
      <case-sensitive>false</case-sensitive>
      <currency>false</currency>
      <nullable>0</nullable>
      <signed>true</signed>
      <searchable>true</searchable>
      <column-display-size>11</column-display-size>
      <column-label>id</column-label>
      <column-name>id</column-name>
      <schema-name></schema-name>
      <column-precision>10</column-precision>
      <column-scale>0</column-scale>
      <table-name>S_ATECO2007</table-name>
      <catalog-name></catalog-name>
      <column-type>4</column-type>
      <column-type-name>int</column-type-name>
    </column-definition>
    <column-definition>
      <column-index>2</column-index>
      <auto-increment>false</auto-increment>
      <case-sensitive>false</case-sensitive>
      <currency>false</currency>
      <nullable>1</nullable>
      <signed>false</signed>
      <searchable>true</searchable>
      <column-display-size>250</column-display-size>
      <column-label>descrizione</column-label>
      <column-name>descrizione</column-name>
      <schema-name></schema-name>
      <column-precision>250</column-precision>
      <column-scale>0</column-scale>
      <table-name>S_ATECO2007</table-name>
      <catalog-name></catalog-name>
      <column-type>12</column-type>
      <column-type-name>varchar</column-type-name>
    </column-definition>
  </metadata>
  <data>
    <currentRow>
      <columnValue>1</columnValue>
      <columnValue>AGRICOLTURA, SILVICOLTURA E PESCA                                                                                                                                                                                                                         </columnValue>
    </currentRow>
    <currentRow>
      <columnValue>2</columnValue>
      <columnValue>COLTIVAZIONI AGRICOLE E PRODUZIONE DI PRODOTTI ANIMALI, CACCIA E SERVIZI CONNESSI                                                                                                                                                                         </columnValue>
    </currentRow>
    <currentRow>
      <columnValue>3</columnValue>
      <columnValue>COLTIVAZIONE DI COLTURE AGRICOLE NON PERMANENTI                                                                                                                                                                                                           </columnValue>
    </currentRow>
    <currentRow>
      <columnValue>4</columnValue>
      <columnValue>Coltivazione di cereali (escluso il riso), legumi da granella e semi oleosi                                                                                                                                                                               </columnValue>
    </currentRow>
    <currentRow>
      <columnValue>5</columnValue>
      <columnValue>Coltivazione di cereali (escluso il riso)                                                                                                                                                                                                                 </columnValue>
    </currentRow>
  </data>
</webRowSet>