/** * JOnAS: Java(TM) Open Application Server * Copyright (C) 1999-2005 Bull S.A. * Contact: jonas-team@objectweb.org * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * * -------------------------------------------------------------------------- * $Id: ServletGeniEnTique.java 17288 2009-05-06 14:01:44Z durieuxp $ * -------------------------------------------------------------------------- */ package genealogie.servlet; import genealogie.entity.gpinterface.gphome.ArbresHome; import genealogie.servlet.actions.Action; import genealogie.servlet.etapes.Etape; import genealogie.servlet.etapes.Etapes; import genealogie.servlet.fonctions.Fonctions; import genealogie.session.stateful.gpinterface.gpbean.GeniEnTique; import genealogie.session.stateful.gpinterface.gphome.GeniEnTiqueHome; import genealogie.to.AncetreTO; import genealogie.to.ArbresTO; import genealogie.to.ArchiveTO; import genealogie.to.ErreurTO; import genealogie.to.PersonneTO; import genealogie.to.SousRegionTO; import genealogie.to.VilleTO; import java.io.IOException; import java.io.PrintWriter; import java.lang.reflect.Method; import java.net.URL; import java.util.Enumeration; import java.util.Hashtable; import java.util.LinkedList; import java.util.Vector; import javax.naming.Context; import javax.naming.InitialContext; import javax.rmi.PortableRemoteObject; import javax.servlet.RequestDispatcher; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.transaction.UserTransaction; import org.objectweb.util.monolog.Monolog; import org.objectweb.util.monolog.api.BasicLevel; import org.objectweb.util.monolog.api.Logger; import org.objectweb.util.monolog.api.LoggerFactory; /** * This servlet is an example to show how to access a EJB from a servlet * @author JOnAS team */ public class ServletGeniEnTique extends HttpServlet { /** * First amount to buy */ private static final int FIRST_BUY_AMOUNT = 10; /** * Second amount to buy */ private static final int SECOND_BUY_AMOUNT = 20; /** * Third amount to buy (will be rollback) */ private static final int THIRD_BUY_AMOUNT = 50; /** * Called by the server (via the service method) to allow a servlet to * handle a GET request. * @param request an HttpServletRequest object that contains the request * the client has made of the servlet * @param response an HttpServletResponse object that contains the * response the servlet sends to the client * @throws IOException if an input or output error is detected when the * servlet handles the GET request * @throws ServletException if the request for the GET could not be handled */ private Fonctions instanceFonctions = null; LoggerFactory loggerFactory = null; Logger logger = null; public void init (ServletConfig config)throws ServletException{ super.init(config); loggerFactory = Monolog.initialize(); logger = loggerFactory.getLogger( "genealogie" ); instanceFonctions = Fonctions.getInstance(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { Context initialContext = null; //ErreurTO erreurTO = new ErreurTO(); Vector v = new Vector(); try { initialContext = new InitialContext(); } catch (Exception e) { //erreurTO.setErreur( "la création context a echoué"); request.setAttribute("erreur", new String("la création context a echoué")); RequestDispatcher disp = this.getServletContext().getRequestDispatcher("/erreur.jsp"); disp.forward(request, response); return; } try{ Enumeration en = request.getParameterNames(); while ( en.hasMoreElements()){ System.out.println( (String) en.nextElement()); } GeniEnTiqueHome geniEnTiqueHome = null; try { geniEnTiqueHome = (GeniEnTiqueHome) PortableRemoteObject.narrow(initialContext.lookup("java:comp/env/ejb/GeniEnTique"), GeniEnTiqueHome.class); } catch (Exception e) { //erreurTO.setErreur( "la recherche ArbresHome a échouée"); request.setAttribute("erreur", new String("la recherche GeniEnTiqueHome a échouée")); RequestDispatcher disp = this.getServletContext().getRequestDispatcher("/erreur.jsp"); disp.forward(request, response); return; } GeniEnTique geniEnTique = null; HttpSession session = request.getSession( true ); LinkedList historiques = (LinkedList) session.getAttribute( "historiques"); logger.log(BasicLevel.DEBUG, "ServletGeniEntique 0 : ") ; //Fonctions instanceFonctions = Fonctions.getInstance(); String actionchaine = (String) request.getParameter("action"); logger.log(BasicLevel.DEBUG, "ServletGeniEntique 0.2 : ") ; Hashtable fonctions = instanceFonctions.getFonctions(); logger.log(BasicLevel.DEBUG, "ServletGeniEntique 0.3 : ") ; Historique historique = null; if ( !( historiques == null ) ) { historique = (Historique) historiques.getLast(); Hashtable etapes = historique.getEnumerationEtapes(); Integer indexEtape = historique.getIndexEtape(); if ( indexEtape.intValue() < etapes.size()){ Etape etape = (Etape) etapes.get( "Etape_" + new Integer( indexEtape.intValue() + 1)); //executer l'action prévue Hashtable actions = (Hashtable)etape.getActions(); Action action = (Action) actions.get( actionchaine ); historique = action.executer(etape, historique, geniEnTiqueHome, request, response, this); //gestion de lhistorique Class[] parameterType = { historiques.getClass() }; Method gestionpile = action.getClass().getMethod( etape.getActionPile(), parameterType); historiques = (LinkedList) gestionpile.invoke(action, (Object[])parameterType); session.setAttribute("historiques", historiques); } } else{ historiques = new LinkedList(); historique = new Historique(); logger.log(BasicLevel.DEBUG, "ServletGeniEntique 1 : "+ actionchaine) ; Enumeration enf = fonctions.keys(); while ( enf.hasMoreElements() ){ logger.log(BasicLevel.DEBUG, "ServletGeniEntique 2: "+ (( String )enf.nextElement()).toString()) ; } Hashtable etapes = (Hashtable) fonctions.get( actionchaine); Integer indexEtape = new Integer(0); int i = indexEtape.intValue(); while ( i < etapes.size()){ logger.log(BasicLevel.DEBUG, "ServletGeniEntique 2.2: "+ (( Etape ) etapes.get( "Etape_" + new Integer(i + 1).toString())) ) ; i++; } i = indexEtape.intValue(); if ( i < etapes.size()){ Etape etape = (Etape) etapes.get( "Etape_" + new Integer(i+1).toString()); logger.log(BasicLevel.DEBUG, "ServletGeniEntique3 : "+ etape.getNomEtape()) ; //executer l'action prévue Hashtable actions = (Hashtable)etape.getActions(); Enumeration ena = actions.keys(); while ( ena.hasMoreElements()){ logger.log(BasicLevel.DEBUG, "ServletGeniEntique4 : "+ (String) ena.nextElement()) ; } Action action = (Action) actions.get( actionchaine ); logger.log(BasicLevel.DEBUG, "ServletGeniEntique5 : "+ action.toString()) ; historique = action.executer(etape, historique, geniEnTiqueHome, request, response, this); //gestion de lhistorique Class[] parameterType = { historiques.getClass(), historique.getClass() }; logger.log(BasicLevel.DEBUG, "ServletGeniEntique6 : "+ etape.getActionPile().toString()) ; Method gestionpile = action.getClass().getDeclaredMethod( etape.getActionPile(), parameterType); logger.log(BasicLevel.DEBUG, "ServletGeniEntique7: "+ gestionpile.toString() + ", " + action.getClass().toString()) ; Class[] parametreTypeMethod = gestionpile.getParameterTypes(); for ( int j = 0; j < parametreTypeMethod.length; j++){ logger.log(BasicLevel.DEBUG, "ServletGeniEntique7.1: "+ parametreTypeMethod[j].toString() + ", " + action.getClass().toString()) ; } historiques = (LinkedList) gestionpile.invoke( (Object) action, (Object[]) parametreTypeMethod); //gestionpile.invoke( (Object) action, (Object[]) parameterType); logger.log(BasicLevel.DEBUG, "ServletGeniEntique8 " ) ; session.setAttribute("historiques", historiques); logger.log(BasicLevel.DEBUG, "ServletGeniEntique9: ") ; request.setAttribute("historique", historique); RequestDispatcher disp = this.getServletContext().getRequestDispatcher( historique.getVue()); disp.forward(request, response); return; } } } catch (Exception e) { //erreurTO.setErreur( "la création context a echoué"); logger.log( BasicLevel.DEBUG, e.toString()); request.setAttribute("erreur", new String("erreur dans ListePersonneByNumero" + e.getMessage() + ", "+ e.getClass() )+ "," + e.getCause()); RequestDispatcher disp = this.getServletContext().getRequestDispatcher("/erreur.jsp"); disp.forward(request, response); return; } request.setAttribute("erreur", new String("le parametre action est mal rensigné")); RequestDispatcher disp = this.getServletContext().getRequestDispatcher("/erreur.jsp"); disp.forward(request, response); return; } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { Context initialContext = null; //ErreurTO erreurTO = new ErreurTO(); try { initialContext = new InitialContext(); } catch (Exception e) { //erreurTO.setErreur( "la création context a echoué"); request.setAttribute("erreur", new String("la création context a echoué")); RequestDispatcher disp = this.getServletContext().getRequestDispatcher("/erreur.jsp"); disp.forward(request, response); return; } try{ Enumeration en = request.getParameterNames(); while ( en.hasMoreElements()){ System.out.println( (String) en.nextElement()); } String action = (String) request.getParameter("ACTION"); if ( (action.equals( "action")) ){ GeniEnTiqueHome geniEnTiqueHome = null; try { geniEnTiqueHome = (GeniEnTiqueHome) PortableRemoteObject.narrow(initialContext.lookup("java:comp/env/ejb/GeniEnTique"), GeniEnTiqueHome.class); } catch (Exception e) { //erreurTO.setErreur( "la recherche ArbresHome a échouée"); request.setAttribute("erreur", new String("la recherche GeniEnTique a échouée")); RequestDispatcher disp = this.getServletContext().getRequestDispatcher("/erreur.jsp"); disp.forward(request, response); return; } } } catch (Exception e) { //erreurTO.setErreur( "la création context a echoué"); request.setAttribute("erreur", new String("la recherche de action a échouée")); RequestDispatcher disp = this.getServletContext().getRequestDispatcher("/erreur.jsp"); disp.forward(request, response); return; } } /* response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println(""); out.println(""); out.println("Servlet GeniEntique qui accede a la facade GeniEnTique"); out.println(""); out.println(""); out.println("

Servlet GeniEntique qui accede a la facade GeniEnTique"); out.println("

\"Tomcat"); out.println("\"Jetty"); out.println("\"JOnAS"); out.println("

Initial context / UserTransaction

"); out.println("
"); out.println("

Actions realized by the servlet and the EJB

"); out.println("

With remote interface

"); out.println("
"); out.println("

"); out.println("Resource Adapter Properties"); out.println("

"); out.println("