Translate

lunes, 25 de marzo de 2013

java -classpath alternativa a java -jar

Este post que o pongo hoy es debido a la guerra que me está dando la generación de un archivo JAR ejecutable de tal modo que todas las librerías de las que depende para funcionar estén dentro del JAR.

El programa es un método public static void main() de toda la vida que queremos que se arranque por línea de comandos para realizar una serie de operaciones como un daemon ejecutándose cada cierta periodicidad.

El programa lazado en eclipse se lanza perfectamente y funciona, pero una vez empaquetado con eclipse para ejecutarse como Jar no funciona.

La manera en la que he intentado ejecutarlo es la siguiente:


java -jar DaemonBatch-1.1.0.jar

JAR

y dentro del Jar tenemos su correspondiente archivo de Manifest.MF con todo lo necesario para la ejecución, la clase a ejecutar  las dependencias y el classpath.


Manifest-Version: 1.0
Rsrc-Class-Path:  aspectj-1.6.12.jar
 spring-security-3.1.0.RELEASE-ldap.jar spring-security-3.1.0.RELEASE-
 config.jar httpcore-4.1.jar aopalliance-1.0.jar spring-security-3.1.0
 .RELEASE-core.jar org.springframework-3.1.1.RELEASE-transaction.jar j
 stl-1.2-api.jar blazeds-4.0.0.14931-rds-server.jar javamail-1.4.5.jar
  org.springframework-3.1.1.RELEASE-instrument.jar spring-security-3.1
 .0.RELEASE-acl.jar spring-security-3.1.0.RELEASE-web.jar .............
Class-Path: .
Rsrc-Main-Class: com.antuansoft.batch.main.Main
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader


Lo he exportado de diferentes formas pero siempre me ha dado el mismo error


java.io.FileNotFoundException: URL [rsrc:com/antuansoft/batch/task/] cannot be resolv
ed to absolute file path because it does not reside in the file system: rsrc:com
/antuansoft/batch/task/


Así que he optado por descomprimir el JAR, poner todas las librerias .jar en un directorio lib y ejecutar el siguiente comando para que funcione sin problemas.


java -classpath .;lib/* com.gniux.batch.main.Main

Y ha arrancado sin ningún problema.

Así que si en tu programa no es necesario que este se empaquete todo en un JAR, una alternativa es la que os acabo de proponer.

De todas formas seguiremos investigando.










lunes, 18 de marzo de 2013

Hilos en AS3: Simulación de hilos en action script 3

Para la realización de procesado de datos en cliente que es muy pesado, lo mejor es utilizar hilos, pero Action Script 3 no tiene es capacidad.

Para ello existe una librería que se encarga de simularlos, así que aquí os la dejo para futuros usos, por ahora no he podido hacer ningún ejemplo.

ENDER_LIBhttp://code.google.com/p/ender-lib/

jueves, 14 de marzo de 2013

Recuperar Datos de Disco duro Externo con EASEUS Data Recovery

Creo a que todos nos ha pasado alguna vez que hemos copiado algo en un disco duro externo, de estos que se conectan mediante USB, y vimos como se estaban copiando los datos pero al llegar a nuestro ordenador vemos que no se ha copiado nada.

Es lo típico que suele pasar cuando quitamos el conector USB del ordenador sin seleccionar la opción "Quitar Hardware con seguridad".

Con esta herramienta que os presento he recuperado los datos perdidos en el disco duro, ha sido gratificante porque eran los datos que una amiga había salvado antes de formatear el PC y ya creía que los había perdido.

La herramienta es :

EASEUS Data Recover


Es una herramienta bastante intuitiva, para recuperar la información yo seleccioné la opción  de complete recovery y la herramienta estuvo analizando del disco duro(de 500GB) durante 5 horas para después mostrarme la lista de los archivos que nos da la posibilidad de recuperar.



Importante: No debemos de usar el disco duro para nada desde la pérdida de los datos, ya que podemos perder los datos que están ahí. Sobre todo no debemos de grabar datos ya que los sectores del disco duro podrían sobre escribirse con los  nuevos archivos y entonces la información si que estaría perdida.

La limitación es que sólo te permite recuperara hasta 1GB de datos perdidos, así que si no es mucho la solución ya la tenéis pero para más cantidad de información es necesario poner le Serial Key, que tenemos en este vídeo de You tube.

Serial key

Y en este enlace está todo junto por si acaso desaparecen alguno de los enlaces.

EASEUS Date Recovery + key



lunes, 11 de marzo de 2013

mxmlc Use Flash Text Engine in MX components

En ciertos casos es posible que tengamos ciertos componentes en Flex que no son Sparks y sea necesario skinearlos.

Por ejemplo los tooltips no son skineables, pero se les puede dar estilo gracias al uso de CSS al ser un componente MX.

tooltip

Para que ese estilo de tu CSS funcione con los componentes MX hay que habilitar la siguiente opción del Flex Compiler: Use Flash Text Engine in MX components



El problema es que para hacer la compilación a través del compilador MXMLC esa opción aunque aparece en las opciones de compilación de flex 4  (opción defaults-css-files) parece que al compilar no funciona.

La alternativa para conseguir el mismo efecto en nuestra aplicación es utilizar coger la hoja de estilo que tiene por defecto el flash builder (MXFTEText.css) situada en

[FLEX_4.6_SDK_PATH]\frameworks\projects\spark

Se importa en el mxml principal de nuestro proyecto en combinación con nuestra CSS ya creada y el efecto es el mismo que habilitar la opción.

MainApp.mxml

<fx:Style source="assets/css/MXFTEText.css"/>

<fx:Style source="assets/css/common.css"/>



Common.css
@namespace s "library://ns.adobe.com/flex/spark";

@namespace mx "library://ns.adobe.com/flex/mx";



mx|ToolTip

{

 backgroundColor: #3085B7;

 color: white;

 fontAntiAliasType: advanced;

 fontFamily: "DINPRegular";

 fontSize: 12;

 cornerRadius: 0; 

}


Referencia:

How to use the -fteInMXComponents compiler option with flexmojos











viernes, 8 de marzo de 2013

mxmlc error: Unable to resolve resource package

En español:  [mxmlc] Error: No se puede resolver el paquete de recursos "X".

Este error se produce cuando estamos realizando la compilación de un proyecto a través del comando mxmlc ya se por línea de comandos o a través de ANT, y el compilador no puede compilar uno de nuestros archivos de properties de i18n (intenacionalización).

Para solucionarlo tenemos que añadir la siguiente línea tantas veces sea necesario como idiomas estemos utilizando.


<mxmlc ....
.....
<compiler.source-path path-element='${APP_ROOT}/locale/es_ES'/>

<mxmlc/>

donde ${APP_ROOT} es la ruta donde está nuestro proyecto.


miércoles, 6 de marzo de 2013

Compilación Flex mxmlc con RSL: El orden de compilación de las RSL importa mucho

Cuando compilas tu aplicación Flex y lo haces con RSL externas para que el SWF generado pese lo menos posible (Opciones de compilación MXMLC static-rsls="false") y el orden de las RSL no es el correcto se produce el siguiente error:







VerifyError: Error #1014: flashx.textLayout.container::TextContainerManager is not found

Este error se produce al acceder con tu navegador a la aplicación, el SWF se descarga pero el error que hemos visto.

Esto se produce porque el orden que estableces en las librerías RSL en la compilación de tu SWF es el orden en que estas se descargarán del servidor.

Por lo tantos si ponemos el orden incorrecto de  las librerías al compilar, al descargar y ejecutarse el swf  de la aplicación se descargarán las librerías .swz en el orden incorrecto y el error de que una librería no se encuentra aparecerá.

El orden correcto lo podemos encontrar en nuestra FLEX SDK (en mi caso 4.6) en el archivo flex-config.xml que está en la ruta:

[FLEX_SDK_4.6_PATH]/frameworks/flex-config.xml

A continuación os pongo el comando de apache ANT que utilizo para compilar para que veáis el orden en que hay que poner las librerías .swz para que luego se descarguen correctamente. Se ve en el apartado de las

<runtime-shared-library....

Variables de ANT:

${APP_ROOT} Es la ruta física de la aplicación.
${DirectorioXmlReport} Directorio donde se crea el XML con la dependencias del proyecto.
${FLEX_HOME} Es la ruta donde está instalado el framework de flex ([FLEX_SDK_4.6_PATH])



--
<mxmlc  file="${APP_ROOT}/MyApp.mxml" keep-generated-actionscript="false" 
     output="${APP_ROOT}/${SwfDestination}/${modulo}.swf"
  actionscript-file-encoding="UTF-8"     
  services="${APP_ROOT}/WEB-INF/flex/services-config.xml"
  context-root="MyApp"    
  link-report="${DirectorioXmlReport}/report.xml"
  static-rsls="false"
        incremental="false" warnings="false" fork="true" maxmemory="512m">
  
 <!-- Compilación para la versión de Flash Player -->
 
 <target-player>11.1.0</target-player>
 
 <!-- Get default compiler options. -->
 <load-config filename="${FLEX_HOME}/frameworks/flex-config.xml"/>

 <!-- List of path elements that form the roots of ActionScript
        class hierarchies. -->
        <source-path path-element="${FLEX_HOME}/frameworks"/>
     
 <!-- List of SWC files or directories that contain SWC files. -->
        <compiler.library-path dir="${APP_ROOT}" append="true">
            <include name="libs" />
      </compiler.library-path>  

<!-- Parámetro para modificar el color de fondo al cargar el preloader de la aplicación-->
 <default-background-color>0x252e39</default-background-color>
 
<!-- Parametro adicional al flex compiler para incluir los .properties-->            
 <include-resource-bundles>resources</include-resource-bundles> 

<!-- Asociación de los RSLs para optimización para separar el Framework de flex de nuestros módulos.-->
     
      
<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/framework.swc">
   <url rsl-url="framework_4.6.0.23201.swz"/>
   <url policy-file-url=""/>
   <url rsl-url="framework_4.6.0.23201.swf"/>
   <url policy-file-url=""/>
  </runtime-shared-library-path>

<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/textLayout.swc">
   <url rsl-url="textLayout_2.0.0.232.swz"/>
   <url policy-file-url=""/>
   <url rsl-url="textLayout_2.0.0.232.swf"/>
   <url policy-file-url=""/>
  </runtime-shared-library-path>   
 
<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/spark.swc">
   <url rsl-url="spark_4.6.0.23201.swz"/>
   <url policy-file-url=""/>
   <url rsl-url="spark_4.6.0.23201.swf"/>
   <url policy-file-url=""/>
  </runtime-shared-library-path>    
 
<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/sparkskins.swc">
   <url rsl-url="sparkskins_4.6.0.23201.swz"/>
   <url policy-file-url=""/>
   <url rsl-url="sparkskins_4.6.0.23201.swf"/>
   <url policy-file-url=""/>
  </runtime-shared-library-path>    
 
<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/rpc.swc">
   <url rsl-url="rpc_4.6.0.23201.swz"/>
   <url policy-file-url=""/>
   <url rsl-url="rpc_4.6.0.23201.swf"/>
   <url policy-file-url=""/>
  </runtime-shared-library-path>    

<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/charts.swc">
   <url rsl-url="charts_4.6.0.23201.swz"/>
   <url policy-file-url=""/>
   <url rsl-url="charts_4.6.0.23201.swf"/>
   <url policy-file-url=""/>
  </runtime-shared-library-path>   

<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/spark_dmv.swc">
   <url rsl-url="spark_dmv_4.6.0.23201.swz"/>
   <url policy-file-url=""/>
   <url rsl-url="spark_dmv_4.6.0.23201.swf"/>
   <url policy-file-url=""/>
  </runtime-shared-library-path>    
 
<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/mx/mx.swc">
   <url rsl-url="mx_4.6.0.23201.swz"/>
   <url policy-file-url=""/>
   <url rsl-url="charts_4.6.0.23201.swf"/>
   <url policy-file-url=""/>
  </runtime-shared-library-path>
  
 
<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/advancedgrids.swc">
   <url rsl-url="advancedgrids_4.6.0.23201.swz"/>
   <url policy-file-url=""/>
   <url rsl-url="advancedgrids_4.6.0.23201.swf"/>
   <url policy-file-url=""/>
  </runtime-shared-library-path>

 
  
  <!--Metadatos adicionales a incluir en el proyecto-->
   
 
   <!-- Metadatos dependientes de Parsley-->
   <keep-as3-metadata name="Metadata" />
   <keep-as3-metadata name="DefaultProperty" />
   <keep-as3-metadata name="Required" />
   <keep-as3-metadata name="Event" />
   <keep-as3-metadata name="AssignableTo" />
   <keep-as3-metadata name="Inject" />
   <keep-as3-metadata name="InjectConstructor" />
   <keep-as3-metadata name="Publish" />
   <keep-as3-metadata name="Subscribe" />
   <keep-as3-metadata name="PublishSubscribe" />
   <keep-as3-metadata name="Factory" />
   <keep-as3-metadata name="Init" />
   <keep-as3-metadata name="Destroy" />
   <keep-as3-metadata name="Observe" />
   <keep-as3-metadata name="AsyncInit" />
   <keep-as3-metadata name="ManagedEvents" />
   <keep-as3-metadata name="MessageDispatcher" />
   <keep-as3-metadata name="MessageHandler" />
   <keep-as3-metadata name="MessageBinding" />
   <keep-as3-metadata name="MessageInterceptor" />
   <keep-as3-metadata name="MessageError" />
   <keep-as3-metadata name="Command" />
   <keep-as3-metadata name="CommandComplete" />
   <keep-as3-metadata name="CommandResult" />
   <keep-as3-metadata name="CommandError" />
   <keep-as3-metadata name="CommandStatus" />
   <keep-as3-metadata name="ResourceBinding" />
   <keep-as3-metadata name="Selector" />
   <keep-as3-metadata name="Target" />
   <keep-as3-metadata name="Autoremove" />
   <keep-as3-metadata name="Internal" />
   <keep-as3-metadata name="ObjectDefinition" />
   <keep-as3-metadata name="DynamicObject" />

  
  <!--Localización -->
 
   <locale>es_ES</locale>
   <!--Necesario para las RSLs del framework flex-->
   <locale>en_US</locale>


  <!-- Necesario para el source path del Flex Build Paht-->
  <compiler.source-path path-element='${APP_ROOT}'/>
  <compiler.source-path path-element='${APP_ROOT}/locale/es_ES'/>
 
  <!-- Optimización-->
  <use-network>true</use-network>
     <debug>false</debug>
     <optimize>true</optimize>
  
</mxmlc>  


--