Hello
I have an code jsp it is ok
On toolbar I have a lot "pageserver.exe" , the memory is high !!
( We have Tomcat )
look my code i clean the memory by dispose it's ok ?? Thanks you
very much michel
<% %><%@ page import = "com.crystaldecisions.sdk.occa.infostore.*, com.crystaldecisions.sdk.plugin.desktop.common.*, com.crystaldecisions.sdk.framework.*, com.crystaldecisions.sdk.occa.security.*, com.crystaldecisions.sdk.exception.SDKException, com.crystaldecisions.sdk.occa.report.exportoptions.*, com.crystaldecisions.sdk.occa.managedreports.IReportSourceFactory, java.util.Locale, java.util.*, java.lang.String, java.io.IOException, java.io.InputStream, java.io.OutputStream, java.util.*, java.util.ArrayList, java.util.Iterator, java.util.List, java.io.*, com.crystaldecisions.sdk.occa.report.data.*, com.crystaldecisions.report.web.viewer.*" %><% String pi_scms = request.getParameter("cms"); String pi_suser = request.getParameter("user"); r String pi_spass = request.getParameter("pass"); String pi_sdocName = request.getParameter("sdoc"); String pi_suserDb = request.getParameter("userdb");exemple rcteaxeriah String pi_spassDb = request.getParameter("passdb"); // **** Récupération des paramétres envoyés par l'URL la premiere Fois // les fois suivantes il faut utiliser le principe de session String[] tab_schamp = request.getParameterValues("schamp"); String[] tab_stype = request.getParameterValues("stype"); String[] tab_svaleur = request.getParameterValues("svaleur"); String[ ] tab_schamp1 = new String[100]; // Tableau des Champs String[ ] tab_stype1 = new String[100]; // Tableau des Types String[ ] tab_svaleur1 = new String[1000]; // Tableau des Valeurs // on Mémorise dans une session pour l'activiewer // pour contourner le probleme lors d'access a la prochaine page sur l'active viewer // les données etaient a vide HttpSession session1 = request.getSession(true); // 1ere CONNECTION (URL) on mémorise dans la session if( session1.isNew() ) { session1.setAttribute ("CMS",pi_scms); // nom cms session1.setAttribute ("USER",pi_suser); // nom user connection cms session1.setAttribute ("PASS",pi_spass); // password cms session1.setAttribute ("SDOC",pi_sdocName); // nom du report Rpt session1.setAttribute ("USERDB",pi_suserDb); // utilisateur base de donne session1.setAttribute ("PASSDB",pi_spassDb); // mot de passe base de donnée // on parcours le tableau des champs type et valeur // pour le stocker dans la session PARAM0,TYPE0,VALEUR0,PARAM1,TYPE1,VALEUR1, String l_s_mot_cle_param ; String l_s_mot_cle_type ; String l_s_mot_cle_valeur ; for (int l_i_Nbr_Champ = 0; l_i_Nbr_Champ < tab_schamp.length; l_i_Nbr_Champ++) { l_s_mot_cle_param = " " ; l_s_mot_cle_type = " " ; l_s_mot_cle_valeur = " "; l_s_mot_cle_param = "PARAM" ; l_s_mot_cle_type = "TYPE" ; l_s_mot_cle_valeur = "VALEUR"; l_s_mot_cle_param = l_s_mot_cle_param + String.valueOf(l_i_Nbr_Champ); l_s_mot_cle_type = l_s_mot_cle_type + String.valueOf(l_i_Nbr_Champ); l_s_mot_cle_valeur = l_s_mot_cle_valeur + String.valueOf(l_i_Nbr_Champ); // Mémorisation en session session1.setAttribute (l_s_mot_cle_param , tab_schamp [l_i_Nbr_Champ]); session1.setAttribute (l_s_mot_cle_type , tab_stype [l_i_Nbr_Champ]); session1.setAttribute (l_s_mot_cle_valeur , tab_svaleur[l_i_Nbr_Champ]); } // Stocke le nombre de champs passés dans l'URL en session session1.setAttribute ("NBRELEM" , String.valueOf(tab_schamp.length-1)); } // fin si nouvelle connection on mémorise dans la session // 1ERE CONNECTION OU CONNECTION SUIVANTES // on récupére les valeurs de la session // Récupération des valeurs de la session String l_s_cms = (String)session1.getAttribute("CMS"); String l_s_user = (String)session1.getAttribute("USER"); String l_s_pass = (String)session1.getAttribute("PASS"); String l_s_sdocname = (String)session1.getAttribute("SDOC"); String l_s_userDb = (String)session1.getAttribute("USERDB"); String l_s_passDb = (String)session1.getAttribute("PASSDB"); // recupération du nombre d'élément String l_s_nbrelem = (String)session1.getAttribute("NBRELEM"); int l_i_nbr = Integer.parseInt(l_s_nbrelem); // Récupération des champs et insertion dans un tableau // de tous les champs mémorisés dans la session String l_s_mot_cle_param1 ; String l_s_mot_cle_type1 ; String l_s_mot_cle_valeur1 ; for (int l_s_cmpt = 0; l_s_cmpt <= l_i_nbr ; l_s_cmpt++) { l_s_mot_cle_param1 = " " ;l_s_mot_cle_type1 = " " ;l_s_mot_cle_valeur1 = " "; l_s_mot_cle_param1 = "PARAM" ; l_s_mot_cle_type1 = "TYPE" ; l_s_mot_cle_valeur1 = "VALEUR"; l_s_mot_cle_param1 = l_s_mot_cle_param1 + String.valueOf(l_s_cmpt); l_s_mot_cle_type1 = l_s_mot_cle_type1 + String.valueOf(l_s_cmpt); l_s_mot_cle_valeur1 = l_s_mot_cle_valeur1 + String.valueOf(l_s_cmpt); tab_schamp1 [l_s_cmpt] = (String)session1.getAttribute(l_s_mot_cle_param1); tab_stype1 [l_s_cmpt] = (String)session1.getAttribute(l_s_mot_cle_type1); tab_svaleur1 [l_s_cmpt] = (String)session1.getAttribute(l_s_mot_cle_valeur1); } // FIN RECUPERATION DES CHAMPS MEMORISES EN SESSION try { // CONNECTION AU CMS IEnterpriseSession enterpriseSession = CrystalEnterprise.getSessionMgr().logon(l_s_user,l_s_pass,l_s_cms,"secEnterprise"); //Grab the InfoStore from the httpsession (Entreprise session) IInfoStore infoStore = (IInfoStore)enterpriseSession.getService("", "InfoStore"); //Query for the report object in the CMS. See the Developer Reference guide for more information the query language. // CI_INFOOBJECTS = TABLES des objets du referentiel BO IInfoObjects oInfoObjects = (IInfoObjects)infoStore.query("SELECT TOP 1 * " + "FROM CI_INFOOBJECTS " + "WHERE SI_PROGID = 'CrystalEnterprise.Report' AND SI_INSTANCE=0 AND SI_NAME='" + l_s_sdocname + "'" ); if (oInfoObjects.size() > 0) { //Recupere la derniere instance du report IInfoObject oInfoObject = (IInfoObject) oInfoObjects.get(0); //Use the PS report factory to obtain a report source that will be processed on the Page Server. IReportSourceFactory factoryPS = (IReportSourceFactory)enterpriseSession.getService("PSReportFactory"); Object reportSource = factoryPS.openReportSource((oInfoObject), Locale.ENGLISH); session.setAttribute("reportSource", reportSource); // FIN CONNECTION AU CMS // CONNECTION A LA BASE DE DONNEE ORACLE ConnectionInfo dbLogonInfo = new ConnectionInfo(); dbLogonInfo.setUserName(l_s_userDb); dbLogonInfo.setPassword(l_s_passDb); ConnectionInfos dbLogonInfos = new ConnectionInfos(); dbLogonInfos.add(dbLogonInfo); //Put this object in session so that it can be retrieved and used by the viewer. session.setAttribute("dbLogonInfos", dbLogonInfos); // INSTANCE DE l'ACTIVE VIEWER DE CRYSTAL REPORT CrystalReportViewer viewer = new CrystalReportViewer(); viewer.setName("CrystalReportViewer"); // Active l'exportation et l'impression sur le visualisateur viewer.setOwnPage(true); //Impression possible sur le mode ActiveX viewer.setPrintMode(CrPrintMode.ACTIVEX); //le rapport sera affiché sur le Viewer //Object reportSource = session.getAttribute("reportSource"); viewer.setReportSource(reportSource); //ConnectionInfos dbLogonInfos = (ConnectionInfos)session.getAttribute("dbLogonInfos"); // affecte la connection au viewer viewer.setDatabaseLogonInfos(dbLogonInfos); // creation champ field pour le report Fields fields = new Fields(); // force le parametre dans le browser viewer.setParameterFields(fields); // prompt du parametre de saisie caché // car on veut que le rapport s'affiche automatiquement viewer.setEnableParameterPrompt(false); // Rafraichissement que la premiere fois if( session1.isNew() ) { viewer.refresh();// desactiver car probleme sur activewiever } // // FORCAGE DES PARAMETRES ENTREES AU REPORT SI TYPE DATE // for (int l_i_Nbr_Champ = 0; l_i_Nbr_Champ <= l_i_nbr ; l_i_Nbr_Champ++) { if (tab_stype1[l_i_Nbr_Champ].equals("DATE")) { // extraction du format JJ/MM/AAAA et déclaration des variables // Année int iannee = Integer.parseInt(tab_svaleur1[l_i_Nbr_Champ].substring(6,10)); // le mois de janvier commence a 0 int imois = Integer.parseInt(tab_svaleur1[l_i_Nbr_Champ].substring(3,5)) -1 ; // Jour int ijour = Integer.parseInt(tab_svaleur1[l_i_Nbr_Champ].substring(0,2)); RC_P_setParameterValueDate(fields,tab_schamp1[l_i_Nbr_Champ],"",iannee,imois,ijour,out); } // FIN FORCAGE DES PARAMETRES ENTREES SI TYPE DATE // FORCAGE DES PARAMETRES ENTREES AU REPORT SI TYPE STR if (tab_stype1[l_i_Nbr_Champ].equals("STR")) { RC_P_setParameterValueStr(fields,tab_schamp1[l_i_Nbr_Champ],"",tab_svaleur1[l_i_Nbr_Champ],out); } // FIN FORCAGE DES PARAMETRES ENTREES SI TYPE STR // FORCAGE DES PARAMETRES ENTREES AU REPORT SI TYPE INT if (tab_stype1[l_i_Nbr_Champ].equals("INT")) { RC_P_setParameterValueInt(fields,tab_schamp1[l_i_Nbr_Champ],"",tab_svaleur1[l_i_Nbr_Champ],out); } // FIN FORCAGE DES PARAMETRES ENTREES SI TYPE INT } //lance le visualiseur dans la fenêtre active du navigateur. viewer.processHttpRequest(request, response, getServletConfig().getServletContext(), null); // Nettoyage viewer.dispose(); } else { out.println("Report " + pi_sdocName + " not found."); } } catch(SDKException sdkEx) { out.println(sdkEx); } // FIN PROGRAMME PRINCIPAL %><%! // Auteur : MM // date : 26/09/2008 // Nom Procedure RC_P_setParameterValueDate // Version 1.0 // Explication : Prépare les paramétres entrées dans le report pour les champs de type Date // se sert de l'objet calendar de java static void RC_P_setParameterValueDate(Fields oFields, String paramName, String reportName,int annee,int mois,int jour,JspWriter out) throws javax.servlet.jsp.JspException { // FORMAT DATE Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DAY_OF_MONTH, jour); calendar.set(Calendar.MONTH, mois); calendar.set(Calendar.YEAR, annee); Object value = calendar.getTime(); ParameterField oParameterField = new ParameterField(); oParameterField.setReportName(reportName); Values oValues = new Values(); ParameterFieldDiscreteValue oParameterFieldDiscreteValue = new ParameterFieldDiscreteValue(); oParameterField.setName(paramName); oParameterFieldDiscreteValue.setValue(value); oValues.add(oParameterFieldDiscreteValue); oParameterField.setCurrentValues(oValues); oFields.add(oParameterField); } %><%! // Auteur : MM // date : 26/09/2008 // Nom Procedure RC_P_setParameterValueStr // Version 1.0 // Explication Prépare les paramétres entrées dans le report pour les champsde type STR private void RC_P_setParameterValueStr(Fields oFields, String paramName, String reportName, Object value,JspWriter out) throws javax.servlet.jsp.JspException { ParameterField oParameterField = new ParameterField(); oParameterField.setReportName(reportName); Values oValues = new Values(); ParameterFieldDiscreteValue oParameterFieldDiscreteValue = new ParameterFieldDiscreteValue(); oParameterField.setName(paramName); oParameterFieldDiscreteValue.setValue(value); oValues.add(oParameterFieldDiscreteValue); oParameterField.setCurrentValues(oValues); oFields.add(oParameterField); } %><%! // Auteur : MM // date : 26/09/2008 // Nom Procedure RC_P_setParameterValueInt // Version 1.0 // Explication Prépare les paramétres entrées dans le report pour les champsde type INT private void RC_P_setParameterValueInt(Fields oFields, String paramName, String reportName, Object value,JspWriter out) throws javax.servlet.jsp.JspException { ParameterField oParameterField = new ParameterField(); oParameterField.setReportName(reportName); Values oValues = new Values(); ParameterFieldDiscreteValue oParameterFieldDiscreteValue = new ParameterFieldDiscreteValue(); oParameterField.setName(paramName); oParameterFieldDiscreteValue.setValue(value); oValues.add(oParameterFieldDiscreteValue); oParameterField.setCurrentValues(oValues); oFields.add(oParameterField); } %><%! // Auteur : MM // date : 26/09/2008 // Nom Procedure RC_P_Affiche // Version 1.0 // Pour Debug affiche les informations // note l'appel se fait par affiche(out,"test") et mettre en commentaire la ligne d'access au viewer viewer.processHttpRequest static void RC_P_Affiche(JspWriter out, String s) throws javax.servlet.jsp.JspException { try { out.println(s); } catch(java.io.IOException e) { throw new javax.servlet.jsp.JspException(e); } return; } %>