venerdì gen 16, 2009

Corsi gratis su Glassfish

Vi vorrei segnalare l'opportunità di training web-based che offriamo a chi si registra scaricando Glassfish. Per 90 giorni sono disponibili i seguenti corsi:

  • GlassFish Application Server: Introduction (WMT-SAS-1536)
  • Designing Java Web Services (WJ-4112-EE5)
  • Adding Quality of Service and .NET Interoperability to Web Services (WMT-SAS-1543)
  • Creating Reliable and Secure Interoperable Web Services (WMT-SAS-2544)
  • Creating Transactional Web Services (WMT-SAS-2545)
  • Working With the Web Services Policy (WMT-SAS-2546)
Per maggiori dettagli qui.


lunedì mag 21, 2007

Applicazioni server-push con Glassfish e Comet

Normalmente una connessione HTTP è eseguita in modalità sincrona.
Per ogni richiesta HTTP, il browser apre una connessione HTTP verso il Web Server e la connessione verrà chiusa non appena il risultato viene fornito. Il problema di questo approccio è che la pagina potrà essere aggiornata soltanto quando l'utente la ricarica. La soluzione migliore sarebbe inviare un messaggio al client quando accade l'evento ed il client, normalmente, non dovrebbe richiedere la pagina. Il server dovrebbe agire in modalità push verso il web browser. Questo è ciò che esattamente fa il supporto Comet da parte di GlassFish. Basato sull' Asynchronous Request Processing (ARP), Glassfish ha un'implementazione nativa di Comet con una elevata scalabilità ed affidabilità.

Per poterlo sfruttare è piuttosto semplice.

Per prima cosa occorre modificate il "domain.xml" nella directory di installazione <glassfish_Installation>/domains/domain1/config.xml

Sotto:


<http-listener acceptor-threads="1" address="0.0.0.0" ......

occorre aggiungere:

<property name="cometSupport" value="true"/>

Fatto questo, all'interno di una servlet che voglia sfruttare l'ottimizzazione introdotta da Comet, nella init() occorre:

.......
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        contextPath = config.getServletContext().getContextPath() + "/chat";
        CometEngine cometEngine = CometEngine.getEngine();        // (1)
        CometContext context = cometEngine.register(contextPath); // (2)
                context.setExpirationDelay(100\*1000);                     // (3)

    }

dove:

  1. occorre inizializzare un engine Comet
  2. registrare solo il contextPath dell'applicazione al fine di condividere le richieste asincrone
  3. settare la durata dell'engine (100 secondi)

Il metodo "doPost" della servlet mostra un altro importante uso di Comet: CometContext è l'oggetto chiave per comunicare con gli altri client della stessa applicazione Comet.

.......

 
public void doPost(HttpServletRequest request, HttpServletResponse response)
                                        throws ServletException, IOException {
       String action = request.getParameter("action");
       CometEngine cometEngine = CometEngine.getEngine();
       CometContext cometContext = cometEngine.getCometContext(contextPath);

    ..........

e per notificare un messaggio a tutti i client connessi:

cometContext.notify("Messaggio da " +request.getRemoteAddr(),CometEvent.NOTIFY, +request.getRemoteAddr(),CometEvent.NOTIFY,inServlet);                 
      
    ..........

Se a questo punto si desidera che sia il server a fare push delle informazioni  verso il browser in maniera continuativa senza richiesta occorre registrare il  CometRequestHandler all'oggetto CometContext (1):

  CometRequestHandler handler = new CometRequestHandler();
   handler.clientIP = request.getRemoteAddr();
   handler.attach(response.getWriter());
   cometContext.addCometHandler(handler);         //(1)
   return;

 Per saperne di più: http://weblogs.java.net/blog/jfarcand/

martedì gen 23, 2007

jMaki: Ajax made simple

Ajax rappresenta un fattore abilitante per il Web 2.0, ma per chi sviluppa normalmente in Java EE non è semplice affrontare la scrittura di molto codice JavaScript per poterne sfruttare appieno le potenzialità, per non parlare della varietà di framework disponibili che, se da un lato offrono tanti widget pronti, dall'altro espongono interfacce spesso diverse tra loro.

Per semplificare l'uso della tecnologia Ajax nasce jMaki, un wrapper Open Source per offrire nelle JSP/JSF delle librerie di tag come interfaccia univoca verso i più popolari framework Ajax, come Dojo, Prototype, Yahoo e tanti altri. Con la possibilità di espanderlo, inoltre, si candida a fare da wrapper anche per collezioni di widget disponibili nel futuro.


Ma come posso usarlo facilmente? Ecco un esempio di codice JSP che lo include:
 

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<link rel="stylesheet" href="jmaki-standard-no-sidebars.css" type="text/css"></link>
<%@ taglib prefix="a" uri="http://java.sun.com/jmaki" %> <!-- vedi nota (1)->

<html>
    <head>
        <title>Page Title</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <body>
        <div class="outerBorder">
          
            <div class="header">
                <div class="banner">Application Name</div>
              
                <div class="subheader">
                    <div>
                        <a href="mailto:feedback@youraddress">Feedback</a> |
                        <a href="#">Site Map</a> |
                        <a href="#">Home</a>
                    </div>
                </div> <!-- subheader  -->
            </div> <!-- header -->


            <div class="main">
              
                <div class="content" style="height:400px">
                  
                    Main Content Area
                  <a:ajax name="yahoo.map" args="{centerLat:41.9, mapType:'REGULAR', centerLon:12.59}"/>  <!-- vedi nota (2)->
                  
                </div> <!-- content -->
            </div> <!-- main -->
    
        </div> <!-- outerborder -->
    </body>
</html>

dove:
(1) si dichiara la tag library JMaki
(2) si usa il widget Yahoo Map, incluso nella libreria

 
La JSP in questione viene poi trasformata in HTML dall'engine jsp per includervi i JavaScript, i CSS ed i template HTML che costituiscono gli elementi base di jMaki. Nella fase di scrittura del codice posso impostare i parametri che caratterizzano i widget usati.

Ma come posso sfruttare questo framework in modo più produttivo?

Semplice, credetemi!!

Installato NetBeans 5.5, posso procedere alla ricerca dei nuovi plug-in e scaricare quello per jMaki.

Da Tools/Update Center, connettetevi e selezionate dalla lista dei plug-in offerti, quelli elencati nell'Ajax Update Center, ed in particolare jMaki Ajax Support plug-in. Dopo il restart dell'IDE sarete pronti allo sviluppo con il framework in questione.

Create un progetto di tipo Web -> Web Application. Quando il wizard vi chiederà di selezionare un framework, scegliete jMaki Ajax Framework, con configurazione CSS Layout: Standard No Sidebars.

Fatto questo, vi basterà aprire la pagina index.jsp e fare il drag&drop di:

- jMaki->Library Definition, prima del codice HTML;

- jMaki Yahoo-> Map, sotto la scritta "Main Content Area", così come mostrato in figura:

NetBeans Code

il risultato, a livello di codice, dovrebbe essere esattamente quanto visto precedentemente.

A questo punto possiamo personalizzare le properties del widget inserito nella pagina JSP, e lo facciamo semplicemente selezionando "yahoo.map" e settando le coordinate per far centrare la mappa, ad esempio, su Roma, e scegliendo di non avere le immagini da satellite, ma solo la cartina stradale:

  jMaki Properties

Per Roma le coordinate saranno:

centerLat= 41.9

centerLon=12.59

mapType=Regular

...ed il gioco è fatto.

Dal menù, con Run/Run Main Project o F6, se preferite fare alla svelta, potrete vederne il risultato, con la mappa ottenuta direttamente da Yahoo nella vostra applicazione Web.

Nelle prossime settimane altri trucchi e possibilità di jMaki. Nel frattempo, buon divertimento.



 
 
About

cdb

Search

Categories
Archives
« aprile 2014
lunmarmergiovensabdom
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    
       
Today