Migración a XL-TXE-J

Desde la versión 6, el compilador XL TXE-J sustituye al intérprete XSLT4J como procesador XSLT predeterminado. Si esta migrando aplicaciones desde versiones anteriores de Java, siga estos pasos para preparar la aplicación para la biblioteca nueva.

Acerca de esta tarea

El compilador XL TXE-J es más rápido que el intérprete XSLT4J cuando se aplica la misma transformación más de una vez. Si sólo realiza cada transformación individual una vez, el compilador XL TXE-J es más lento que el intérprete XSLT4J porque la compilación y la optimización reducen el rendimiento.

Para continuar utilizando el intérprete XSLT4J como procesador XSLT, establezca el proveedor de servicios javax.xml.transform.TransformerFactory en org.apache.xalan.processor.TransformerFactoryImpl.

Para migrar al compilador XL-TXE-J, siga las instrucciones de esta tarea.

Nota: La implementación XML de IBM está en desuso en IBM® SDK, Java™ Technology Edition, Versión 8 y se sustituirá por la implementación XML de Oracle en un futuro release.

Procedimiento

  1. Utilice com.ibm.xtq.xslt.jaxp.compiler.TransformerFactoryImpl al establecer el proveedor de servicios de javax.xml.transform.TransformerFactory .
  2. Vuelva a generar los archivos de clases generados por el compilador XSLT4J. XL TXE-J no puede ejecutar los archivos de clases generados por el compilador XSLT4J.
  3. Es posible que algunos métodos generados por el compilador excedan el límite de tamaño del método de JVM, en cuyo caso el compilador intenta dividir estos métodos en métodos más pequeños
    • Si el compilador divide el método correctamente, recibirá el aviso siguiente:

      Some generated functions exceeded the JVM method size limit and were automatically split into smaller functions. You might get better performance by manually splitting very large templates into smaller templates, by using the 'splitlimit' option to the Process or Compile command, or by setting the 'https://www.ibm.com/xmlns/prod/xltxe-j/split-limit' transformer factory attribute.

      Puede utilizar las clases compiladas, pero es posible que obtenga más rendimiento si controla el límite de división manualmente.
    • Si el compilador no divide el método correctamente, recibirá una de las excepciones siguientes:

      com.ibm.xtq.bcel.generic.ClassGenException: Branch target offset too large for short

      or

      bytecode array size > 65535 at offset=#####

      Intente establecer el límite de división manualmente o reducir el límite de división.
    Para establecer el límite de división, utilice la opción -SPLITLIMIT cuando utilice los mandatos Process o Compile o bien el atributo de TransformerFactory https://www.ibm.com/xmlns/prod/xltxe-j/split-limit cuando utilice TranformerFactory. El límite de división puede estar entre 100 y 2000. Cuando establezca el límite de división manualmente, utilice el límite de división más elevado posible para obtener el máximo rendimiento.
  4. Es posible que XL TXE-J necesite más memoria que el compilador XSLT4J. Si se está quedando sin memoria o el rendimiento parece lento, aumente el tamaño del almacenamiento dinámico utilizando la opción -Xmx .
  5. Migre la aplicación para que utilice las nuevas claves de atributos. Las claves de atributos antiguas de TransformerFactory han quedado obsoletas. Los nombres antiguos se aceptan con un aviso.
    Tabla 1. Cambios en las claves de atributos del compilador XSL4J al compilador XL TXE-J
    Atributo del compilador XSL4J Atributo del compilador XL TXE-J
    translet-name https://www.ibm.com/xmlns/prod/xltxe-j/translet-name
    destination-directory https://www.ibm.com/xmlns/prod/xltxe-j/destination-directory
    package-name https://www.ibm.com/xmlns/prod/xltxe-j/package-name
    jar-name https://www.ibm.com/xmlns/prod/xltxe-j/jar-name
    generate-translet https://www.ibm.com/xmlns/prod/xltxe-j/generate-translet
    auto-translet https://www.ibm.com/xmlns/prod/xltxe-j/auto-translet
    use-classpath https://www.ibm.com/xmlns/prod/xltxe-j/use-classpath
    depurar https://www.ibm.com/xmlns/prod/xltxe-j/debug
    indent-number https://www.ibm.com/xmlns/prod/xltxe-j/indent-number
    enable-inlining Obsoleto en el nuevo compilador
  6. Opcional: Para obtener el mejor rendimiento, asegúrese de que no está recompilando las transformaciones XSLT que se pueden reutilizar.
    Utilice uno de los siguientes métodos para reutilizar las transformaciones compiladas:
    • Si la hoja de estilo no cambia en tiempo de ejecución, compile la hoja de estilo como parte del proceso de compilación y especifique las clases compiladas en la variable CLASSPATH. Utilice el mandato org.apache.xalan.xsltc.cmdline.Compile para compilar la hoja de estilo y establezca el atributo de TransformerFactory https://www.ibm.com/xmlns/prod/xltxe-j/use-classpath en true para cargar las clases desde la classpath.
    • Si la aplicación va a utilizar la misma hoja de estilo durante varias ejecuciones, establezca el atributo de TransformerFactorye https://www.ibm.com/xmlns/prod/xltxe-j/auto-translet en true para guardar automáticamente la hoja de estilo compilada en el disco para su reutilización. El compilador utilizará una hoja de estilo compilada, si está disponible, y la compilará si no está disponible o está desfasada. Utilice el atributo de fábrica de transformadores de https://www.ibm.com/xmlns/prod/xltxe-j/destination-directory para establecer el directorio utilizado para almacenar hojas de estilo compiladas. De forma predeterminada, las hojas de estilo compiladas se almacenan en el mismo directorio que la hoja de estilo.
    • Si su aplicación se ejecuta durante mucho tiempo y reutiliza la misma hoja de estilo, utilice TransformerFactory para compilarla y cree un objeto Templates. Puede utilizar el objeto Templates para crear objetos Transformer sin tener que volver a compilar la hoja de estilo. Los objetos Transformer también se pueden reutilizar pero no ofrecen hebras seguras.
    • Si la aplicación utiliza cada hoja de estilo sólo una vez o pocas veces, o bien no puede realizar ninguno de los otros cambios listados en este paso, es posible que desee seguir utilizando el intérprete XSLT4J estableciendo el proveedor de servicios javax.xml.transform.TransformerFactory en org.apache.xalan.processor.TransformerFactoryImpl.