Changeset 15079


Ignore:
Timestamp:
03/08/10 21:24:12 (2 years ago)
Author:
sys
Message:

OO classLoader : crée un subClassLoader si utile pour Uno et/ou Scenair impl le nécessite.

Location:
trunk/Jav_Transform/src/com/scenari/s/co/transform/oo
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Jav_Transform/src/com/scenari/s/co/transform/oo/HTransformerOo.java

    r15012 r15079  
    5656import eu.scenari.fw.log.TraceMgr; 
    5757import eu.scenari.fw.log.TracePoint; 
     58import eu.scenari.fw.log.ILogMsg.LogType; 
    5859 
    5960/** 
     
    258259 
    259260                //On recherche dans le classLoader en cours : en fonction du mode déploiement, 
    260                 //les classes Oo peuvent etre déclarées dans le classpath de la Jvm de la JVM. 
     261                //les classes Oo peuvent etre déclarées dans le classpath de la Jvm ou pas. 
     262                boolean vSubClassLoaderForUno = true; 
    261263                String vUnoBootstrapClassName = "com.sun.star.comp.helper.Bootstrap"; 
    262264                try { 
    263265                        //On teste le chargement des classes Oo 
    264266                        Class.forName(vUnoBootstrapClassName); 
    265                         //Si c'est bon, on retourne le classLoader en cours. 
    266                         sOoClassLoader = HTransformerOo.class.getClassLoader(); 
    267                         if (sTraceOoClassloader.isEnabled()) sTraceOoClassloader.publishDebug("OO init : no classloader instantiated."); 
     267                        //Si c'est bon, pas besoinde classLoader pour uno. 
     268                        vSubClassLoaderForUno = false; 
     269                        if (sTraceOoClassloader.isEnabled()) sTraceOoClassloader.publishDebug("OO init : no sub-classloader needed for Uno."); 
     270                } catch (Exception e) { 
     271                        //Classe non spécifiée dans le classpath de la jvm. 
     272                } 
     273 
     274                //On recherche dans le classLoader en cours les classses de l'impl Scenari de transformation. 
     275                boolean vSubClassLoaderForImpl = true; 
     276                try { 
     277                        //On teste le chargement des classes Oo 
     278                        Class.forName(OoConnectionPoolLoader.CLASS_CONNECTIONPOOL); 
     279                        //Si c'est bon, pas besoinde classLoader pour l'impl de Scenari. 
     280                        vSubClassLoaderForUno = false; 
     281                        if (sTraceOoClassloader.isEnabled()) sTraceOoClassloader.publishDebug("OO init : no sub-classloader needed for scenari impl."); 
     282                } catch (Exception e) { 
     283                        //Classe non spécifiée dans le classpath de la jvm. 
     284                } 
     285 
     286                if (!vSubClassLoaderForImpl && vSubClassLoaderForUno) { 
     287                        LogMgr.publishException("Oo class loader config will not work : Scenari classes already defined in classLoader without Uno classes.", LogType.Error); 
     288                } 
     289 
     290                if (!vSubClassLoaderForImpl && !vSubClassLoaderForUno) { 
     291                        //Pas besoin de SubClassLoader. 
     292                        try { 
     293                                sOoClassLoader = Thread.currentThread().getContextClassLoader(); 
     294                        } catch (SecurityException e) { 
     295                                sOoClassLoader = HTransformer.class.getClassLoader(); 
     296                        } 
    268297                        return sOoClassLoader; 
    269                 } catch (Exception e) { 
    270                         //Classe non spécifiée dans le classpath de la jvm. 
    271298                } 
    272299 
    273300                //On va chercher l'installation d'Oo sur cette machine. 
    274                 URL[] vLisJars = new URL[9]; 
     301                int vCountUrls = (vSubClassLoaderForImpl ? 1 : 0) + (vSubClassLoaderForUno ? 8 : 0); 
     302                URL[] vLisJars = new URL[vCountUrls]; 
    275303                int vIdx = 0; 
    276                 vLisJars[vIdx++] = HTransformerOo.class.getResource(sPathOoTransformersClasses); 
     304                if (vSubClassLoaderForImpl) { 
     305                        vLisJars[vIdx++] = HTransformerOo.class.getResource(sPathOoTransformersClasses); 
     306                } 
    277307 
    278308                //System.out.println("URL="+vLisJars[0].toExternalForm()); 
    279309 
    280                 //Recherche du dossier program de OpenOffice 
    281                 URL vOoUnoClassFolderUrl = (sOoProgramFolderUrl != null) ? new URL(sOoProgramFolderUrl) : new File(OoFinder.getPath()).toURL(); 
    282  
    283                 //OO3.x 
    284                 String vUreClassPrefix = (ISWIN ? "../URE/java" : "../basis-link/ure-link/share/java"); 
    285                 String vBasisClassPrefix = (ISWIN ? "../Basis/program/classes" : "../basis-link/program/classes"); 
    286                 vLisJars[vIdx++] = new URL(vOoUnoClassFolderUrl, vUreClassPrefix + "/jurt.jar"); 
    287                 vLisJars[vIdx++] = new URL(vOoUnoClassFolderUrl, vUreClassPrefix + "/ridl.jar"); 
    288                 vLisJars[vIdx++] = new URL(vOoUnoClassFolderUrl, vBasisClassPrefix + "/unoil.jar"); 
    289                 vLisJars[vIdx++] = new URL(vOoUnoClassFolderUrl, vUreClassPrefix + "/juh.jar"); 
    290                 //OO2.x 
    291                 vLisJars[vIdx++] = new URL(vOoUnoClassFolderUrl, "classes/jurt.jar"); 
    292                 vLisJars[vIdx++] = new URL(vOoUnoClassFolderUrl, "classes/ridl.jar"); 
    293                 vLisJars[vIdx++] = new URL(vOoUnoClassFolderUrl, "classes/unoil.jar"); 
    294                 vLisJars[vIdx++] = new URL(vOoUnoClassFolderUrl, "classes/juh.jar"); 
     310                if (vSubClassLoaderForUno) { 
     311                        //Recherche du dossier program de OpenOffice 
     312                        URL vOoUnoClassFolderUrl = (sOoProgramFolderUrl != null) ? new URL(sOoProgramFolderUrl) : new File(OoFinder.getPath()).toURL(); 
     313 
     314                        //OO3.x 
     315                        String vUreClassPrefix = (ISWIN ? "../URE/java" : "../basis-link/ure-link/share/java"); 
     316                        String vBasisClassPrefix = (ISWIN ? "../Basis/program/classes" : "../basis-link/program/classes"); 
     317                        vLisJars[vIdx++] = new URL(vOoUnoClassFolderUrl, vUreClassPrefix + "/jurt.jar"); 
     318                        vLisJars[vIdx++] = new URL(vOoUnoClassFolderUrl, vUreClassPrefix + "/ridl.jar"); 
     319                        vLisJars[vIdx++] = new URL(vOoUnoClassFolderUrl, vBasisClassPrefix + "/unoil.jar"); 
     320                        vLisJars[vIdx++] = new URL(vOoUnoClassFolderUrl, vUreClassPrefix + "/juh.jar"); 
     321                        //OO2.x 
     322                        vLisJars[vIdx++] = new URL(vOoUnoClassFolderUrl, "classes/jurt.jar"); 
     323                        vLisJars[vIdx++] = new URL(vOoUnoClassFolderUrl, "classes/ridl.jar"); 
     324                        vLisJars[vIdx++] = new URL(vOoUnoClassFolderUrl, "classes/unoil.jar"); 
     325                        vLisJars[vIdx++] = new URL(vOoUnoClassFolderUrl, "classes/juh.jar"); 
     326                } 
    295327 
    296328                ClassLoader vParentLoader = null; 
  • trunk/Jav_Transform/src/com/scenari/s/co/transform/oo/impl/OoConnection.java

    r14620 r15079  
    153153        /** Mémoire du fExternalUriReferenceTranslator. */ 
    154154        protected XExternalUriReferenceTranslator fExternalUriReferenceTranslator; 
    155          
     155 
    156156        /** Process en cours. */ 
    157157        protected Process fOoProcess = null; 
     
    343343         */ 
    344344        public void freedInPool() throws Exception { 
    345                 if(fAutoLaunch && fHeadless && fOoProcess != null && fUsageCount >= 5) { 
     345                if (fAutoLaunch && fHeadless && fOoProcess != null && fUsageCount >= 5) { 
    346346                        fComponentContext = null; 
    347347                        fServiceMgr = null; 
     
    437437                        String vOfficeExePath = OoFinder.getPath() + "/" + (ISWIN ? "soffice.exe" : (ISMAC ? "soffice.bin" : "soffice")); 
    438438                        File vOfficeExe = new File(vOfficeExePath); 
    439                         if (vOfficeExe == null) throw new Exception("no OpenOffice executable found! (searching for '" + vOfficeExePath + "')"); 
     439                        if (vOfficeExe == null || !vOfficeExe.canRead()) throw new Exception("no OpenOffice executable found! (searching for '" + vOfficeExePath + "')"); 
    440440 
    441441                        if (fMaxCnxAttempts <= 0) { 
Note: See TracChangeset for help on using the changeset viewer.