Con poco tempo a disposizione ed Eclipse che dà i numeri con le annotazioni (una sfilza di errori inspiegabili dovuti a qualche conflitto nel classpath), ecco la soluzione rapida per consegnare in tempo il web-service.
Mi si perdoni la tecnica non molto raffinata, ma quando il tempo è poco… l’importante è il risultato. Poi nessuno vieta di capire il perchè dell’errore e passare a metodi più raffinati. Dunque….
In web.xml creare un listener
remote.data.WebServiceStartupper
Il listener:
package remote.data;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class WebServiceStartupper implements ServletContextListener {
static org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(WebServiceStartupper.class);
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
ServletContext context = arg0.getServletContext();
BeanFactory factory = WebApplicationContextUtils.getRequiredWebApplicationContext(context);
GlobalSpring.getInstance().setBeanFactory(factory);
}
}
Il listener instanzia il singleton con la Factory di Spring.
</pre>
package remote.data;
import org.springframework.beans.factory.BeanFactory;
public class GlobalSpring {
private static GlobalSpring instance;
private BeanFactory beanFactory;
private GlobalSpring() {
super();
}
public static GlobalSpring getInstance(){
if (instance == null) {
instance = new GlobalSpring();
}
return instance;
}
public BeanFactory getBeanFactory() {
return beanFactory;
}
public void setBeanFactory(BeanFactory beanFactory) {
this.beanFactory = beanFactory;
}
}
Per implementare il webservice io ho creato un’interfaccia e la sua implementazione.
package remote.data;
import org.springframework.beans.factory.BeanFactory;
import remote.data.GlobalSpring;
public class RemoteVarpLogic implements RemoteVarpLogicIfc {
@Override
public String sayHello(String str) {
GlobalSpring globalSpring = GlobalSpring.getInstance();
BeanFactory factory = globalSpring.getBeanFactory();
myLogic = (MyLogic)factory.getBean("myLogic");
return mylogic.sayHello();
}
}
Per creare il webservice:
Premere il tasto destro sull’implementazione.
Seguire le istruzioni fornite dal wiki di eclipse per creare un WS bottom-up.
NetBeans non fa le bizze con le annotation
ma non vorrei scatenare una guerra di religione…
Ho 5 anni di sviluppi in eclipse… non è così facile ribaltare la frittata!
In questi casi e soprattutto in certi ambienti l’importante è arrivare al tragurado non importa la strada presa. Molte volte, come in questo caso sono le cose poco raffinate che funzionano.