mercoledì 11 luglio 2012

Tomcat e JBoss insieme

Può capitare di dover utilizzare web servers diversi per la gestione di una web application.

Questo esempio prende in considerazione JBoss 6.1.0 (l'ultima versione di JBoss supportata da Netbeans) come EJB Server, e Tomcat 6.0.x come Web Server ( Tomcat è molto più leggero ma non è in grado di gestire gli EJB ).

Il problema principale è far comunicare i due Server, problema che può essere risolto così:

1) Innanzitutto le interfacce dei beans in JBoss devono essere dichiarate come remote

2) E' necessario importare determinate librerie in Tomcat, in modo che capisca come comunicare con JBoss. Tra queste c'è sicuramente il progetto dell'EJB Server; cosa molto facile con netbeans : Tasto destro sull'applicazione del web server > proprietà > libraries > add project.
Le altre fanno riferimento ad alcuni Jar di JBoss:

/client/jboss-client.jar
/client/jboss-common-core.jar
/client/jbossall-client.jar
/client/jnp-client.jar
/lib/jboss-loggin

3) Bisogna richiamare i bean remoti. Per semplicità potete creare una classe Utitlity che abbia un metodo simile:

    public Object callRemoteBean(String name) throws NamingException {
        Properties props = new Properties();
        props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
        props.setProperty("java.naming.provider.url", "jnp://localhost:1099");
        props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
        InitialContext ctx = new InitialContext(props);
        return ctx.lookup(name);

e a questo punto per richiamare il gestore di bean associato:

NomeBeanFacadeRemote nomeBeanFacade = (NomeBeanFacadeRemote) utility.callRemoteBean("NomeBeanFacade/remote");

e poi


nomeBeanFacade.find(idBean);

venerdì 6 luglio 2012

[Java] Conteggio di date e giorni lavorativi

Innanzitutto lasciamo perdere le classi Calendar e GregorianCalendar, e usiamo solamente JodaTime.

La mia situazione di partenza è una data salvata in un database (class Date), a cui devo aggiungere alcuni giorni lavorativi.
Converto Date a DateTime (package JodaTime), ecco la funzione che fa a caso nostro, prendendo in considerazione solamente i giorni dal lunedì al venerdì:

    public DateTime addLavorativeDays (DateTime startDate, int lavorativeDays){
       
       
        while (lavorativeDays>0){
           
            System.out.println(startDate.getDayOfWeek());
           
            if (startDate.getDayOfWeek()<6){
               
                startDate = startDate.plusDays(1);
                lavorativeDays--;
            }
            else {
               
                startDate = startDate.plusDays(1);
            }
           
           
        }
        return startDate;
    }

Un controllo utile è sicuramente quello che date 2 date (inizio-fine) ci riporta il numero di giorni lavorativi:


    public int returnWeeklyDays(DateTime first, DateTime second){
       
       int days=0;
       
        while ((Days.daysBetween(first, second)).getDays()!=0){
           
            if (first.getDayOfWeek()<6){
               
                days++;
            }
            first = first.plusDays(1);
       
        }
       
        return days;
    }

venerdì 29 giugno 2012

Button submit image html, struts

<td><input type="image" value="submit" src="/DGestWebServer/images/add.png" width="20" height="20" border="0" alt="SUBMIT!" name="image"> </td>

martedì 12 giugno 2012

[JAVASCRIPT-AJAX] inviare richieste post


 Doppia funzione per inviare richieste POST con JS-AJAX

in url c'è il link a partire dalla root della mia pagina che accetta le richieste
In data ci sono le mie variabili post da inviare


function richiesta(id,tabella){
 // link alla pagina dimanica che opera
  var  url='pages/pagina_richieste_js.php?action=attivita';
  var data="id="+id+"&tabella="+tabella;
 var risposta=invia_richiesta(url, data) ;

 }
// comando che effettua la chiamata alla nostra pagina
function invia_richiesta(url,data){
      var call = $.ajax({
         type: "POST",
         url: url,
                 data: data,
         async: false
        }).responseText;
                return call;
}

venerdì 8 giugno 2012

[JAVA] Download di file da un server con FileInputStream


String path = this.getServlet().getServletContext().getRealPath("/folder" + filename);
           
           
            FileInputStream inputStream = new FileInputStream(path);

            response.setHeader("Content-Disposition","attachment; filename="+filename);
            try {
                int c;
                while ((c = inputStream.read()) != -1) {
                response.getWriter().write(c);
                }
            } finally {
                if (inputStream != null)
                    inputStream.close();
                    response.getWriter().close();
            }

[JS] Come creare una classe javascript



Di seguito un esempio di creazione della classe per js

<script>
  var class_funct = new function (){
   var this.funzione_1 =  function (var1,var2){
 
    alert(var1+" | "+var2);

  }
 }
</script>


Come richiamare la funzione

<a onclick='class_funct.funzione_1(1,2)'></a>

Baci, abbracci dal C....

[Servlet] Ricevere parametri Action>Action e JSP>Action

Doppia variante, nel caso in cui si utilizzi in una action un dato in ingresso come valore passato tramite

<html:link href="" paramId="" paramName="" paramProperty="">

o come

request.getSession().setAttribute....


int id;

try{
     id = Integer.parseInt(request.getParameter("id")); // paramId...
}catch(NumberFormatException nfe){
           
     id = Integer.parseInt(request.getSession().getAttribute("id").toString()); // altra Action


}

[Struts 1] Passaggio di parametri hidden tramite form

Problema: in un form struts devo passare un parametro nascosto alla Action successiva...

Non c'è modo di passare il parametro tramite il classico <html:form hidden ... > in quanto poi nel parametro value"" non posso scrivere <bean:write...>


Soluzione: Definire il parametro nella action che carica la pagina jsp:

request.getSession().setAttribute("idOrder", orderForm.getIdOrdine());

Nella Action successiva poi mi recupero il parametro tramite:
String idReference = request.getSession().getAttribute("idOrder").toString();