lunedì 26 ottobre 2009

La casa bianca adotta un cms open

Anche se il titolo è un po' troppo altisonante (infatti mi sono permesso di cambiarlo) questa è la notizia.
Anche se non è che Drupal mi esalti tantissimo (ho provato a capirlo, è un po' contorta la gestione e la creazione di un template, preferisco Joomla), mi esalta il fatto.
Finalmente è un dato di fatto che un prodotto open è allo stesso livello di uno closed e che si può fare affidamento su di esso.

domenica 25 ottobre 2009

Spring 3 e i Web Services

Leggendo la documentazione di Spring 3 si dichiara che Spring supporta 2+1 modi di esporre i Web Services:
Ora, io escludo Spring Web Services perchè ha un approccio "Contract-First" alla creazione del webService: cioè prima si crea il wsdl e poi lo si implementa con le classi. Questo è un metodo splendido perchè molto flessibile, ma anche un po' lento nell'implementazione.
Rimangono quindi le altre due strade e fra le due scelgo volentieri quella JAX-WS, una specifica più recente di JAX-RPC, che permette di esporre come Web Services dei semplici POJO.

Per esporli al mondo esterno basta creare una Web Application ed esporre come servlet il POJO.

Vediamo quindi come è la classe che rappresente il Web Service.

@WebService(serviceName="TestService")
public class TestServiceEndpoint {
   
    @WebMethod
    public String sayHello() {
        return "Hello";
    }
}

Questa classe è un banalissimo POJO con 2 annotation una che dichiara che è un webservice, dal nome "TestService" e l'altra che dice che il metodo sayHello è un WebMethod. Ovviamente queste 2 annotations hanno molti altri parametri che permettono una configurazione minuziosa di tutto il Webservice, ma per l'esempio a noi va bene così.

Esponiamo ora il WebService al mondo. Basta creare una WebApplication e nel web.xml, dichiarare il POJO come servlet.



Questo basta per avere un bel WebService. Deploiando ad esempio su JBoss (purtroppo ci vuole un container j2EE per deploiare, ma ormai sono all'ordine del giorno) il gioco è fatto.

Bene, e fin qui abbiamo usato solo J2EE, neanche una traccia di Spring.
Come possiamo fare ad integrare Spring con JAX-WS?

Basta far si che il nostro POJO (o la nostra servlet, se così vogliamo pensarla) estenda SpringBeanAutowiringSupport. Facendo così si può accedere ai bean gestiti da Spring. L'unica limitazione è che queste due "parti" (il POJO e lo Spring context) devono girare nella stessa webApplication.

La classe diventa quindi


@WebService(serviceName="TestService")
public class TestServiceEndpoint extends SpringBeanAutowiringSupport {

   @Autowired
   private HelloService biz;

    @WebMethod
    public String sayHello() {
        return biz.sayHello();
    }
}



L'interfaccia HelloService viene, grazie all'annotation @Autowired, gestita da Spring: questo è il punto di unione tra le due tecnologie.


Per far funzionare il tutto dobbiamo fare una modifica anche al web.xml, aggiungendo la gestione dello SpringContext.


Quindi in fondo al web.xml si aggiunge


Per la parte Spring, basta creare l'xml ApplicationContext.xml (anche qui, si usano i default per velocità)


Qui si dice appunto che la classe che implementa helloService (notare la consonanza di nome tra l'interfaccia e l'id del bean, è uno dei modi in cui Spring ricerca i bean per il metodo @Autowired) è it.ws.test.HelloServiceImpl, che ovviamente implementerà l'interfaccia HelloService.


Tutto qua, nulla di più. Facile vero?

venerdì 16 ottobre 2009

IntelliJ è ora OpenSource!

JetBrains ha finalmente rilasciato il suo famoso IntelliJ anche sotto la community edition.
La notizia qua
Ed ora, usare, usare, usare!