martes, 28 de diciembre de 2010

Java System.getProperty(String key) System.SetProperty(String key, String value)

Muchas veces resulta útil poder enviar información desde afuera de la aplicación, como por ejemplo en los scripts que se hacen para levantar las aplicaciones, Java nos permite enviar valores que la aplicación puede recuperar y utilizar según sea el caso, estas son propiedades de la forma clave=valor del tipo String.
 se pueden definir en dos lugares diferentes, el primero es donde se llama a Java cuando se levanta la aplicación agregando -D
Por Ej.:
java -Dlogfile="\home\tomcat\log" nombreDelaClaseMain en cuyo caso se le envía a la VM como argumento una propiedad del tipo String llamada "logfile" y cuyo valor es otro String "\home\tomcat\log".

El otro lugar en que se puede definir estas propiedades es dentro del programa, invocando al método estático setProperty de la clase System,
System.setProperty("propiedad","valorDeLaPropiedad");

 Acá hay un ejemplo de cómo se definen y se  recuperan esas propiedades:

public class SystemPropertiesTest {

    public static void main(String[] args) {
      
       //getting the value setted in the jvm launch
        String value = System.getProperty("key");
        System.out.println(value);

        System.out.println("Setting system property in the class : key + value");
        System.setProperty("key", "valueTwo");
        value = System.getProperty("key");
        System.out.println(value);
    }
}

La llamada desde línea de comando sería la siguiente



En este link http://download.oracle.com/javase/1.4.2/docs/tooldocs/windows/java.html  hay información sobre las opciones del aplication launcher de java (dentro de ellas esta las que vimos en este post)

Saludos y espero que les haya sido de utilidad
Nacho.-

lunes, 20 de diciembre de 2010

Crear y borrar Sinónimos en tablas de base de datos Oracle - Create and Drop SYNONYM in oracle data base

Si queremos acceder a una tabla pero sin referenciar a su nombre ( schema.nombre de la tabla) lo que debemos hacer es crear un Sinonimo, con el cual haremos referencias a dicha tabla.

La sintaxis para hacer eso es la siguiente:
CREATE PUBLIC SYNONYM [NombredelSinónimo] FOR [schema].[nombreDeLaTabla]

Al no ser una operacion transaccional, esta no requiere commit

Ej:
CREATE PUBLIC SYNONYM autos FOR ORACLE.MODELOSLATAM;

Como vemos en este ejemplo a la tabla ORACLE.MODELOSLATAM. se le creo un sinonimo, con el cual van a poder acceder (finalmente a la tabla ORACLE.MODELOSLATAM)

Ahora bien, si por el contrario, lo que necesitamos es borrar el sinónimo, todo lo que deberemos hacer es un DROP del sinonimo de dicha tabla.

La sintaxis es:

DROP PUBLIC SYNONYM [NombredelSinonimo] ;

Ej:
DROP PUBLIC SYNONYM autos;

viernes, 17 de diciembre de 2010

Arreglo en Java de los nombres de los pasados 12 meses, en formato MMM-AA

Buenas a todos, debajo les dejo un algoritmo que está hecho en base a uno que hizo un compañero de trabajo, devuelve un arreglo de Strings de los pasados 12 meses respecto del actual (el cual no está incluido) en formato MMM-AA.

[Nov-10,Oct-10...]

Me pareció interesante el manejo del offset ya que para la correspondencia de los meses con sus respectivos nombres, los índices deben estar dentro de los límites del arreglo a fin de que el código funcione bien y evitar un java.lang.ArrayIndexOutOfBoundsException.
Sin más preámbulos acá esta el código java:
/**
     *This method returns an array with the names of the past 12 months prior to
     *the current month, MMM-YY format.
     *@author nachojava
     */
    public String[] headers() {
        String[] months = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
                "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
        String[] headers = { "", "", "", "", "", "", "", "", "", "", "", "" };
        int yearOffset = 2000;
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR) - yearOffset;
        int previousMonths = c.get(Calendar.MONTH) - 1;
        int monthOffset = 12;

        for (int index = 0; index <= 11; index++) {
            if (year < 10) {               
                headers[index] = months[previousMonths] + "-" + "0" + year;
            } else {               
                headers[index] = months[previousMonths] + "-" + year;
            }
            previousMonths--;

            if (previousMonths < 0) {
                previousMonths = previousMonths + monthOffset;
                year -= 1;
            }
        }
        return headers;
    }

Espero les haya interesado, saludos!
Nacho.-

lunes, 14 de junio de 2010

javax.net.ssl.SSLHandshakeException - Instalar certificados en la Maquina Virtual Java

Tuve este inconveniente con la aplicacion en la que trabajo, este es parte del trace y debajo esta la solucion:

AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target


Eventualmente cuando queremos acceder a un servicio web atraves de nuestra aplicacion Java, necesitemos instalar un certificado a nuestra maquina virtual, para ello primero necesitaremos bajar dicho certificado en nuestra pc y luego instalarlo en la JVM


Para guardar el el certificado en la pc

Acceder a traves de un IE al wsdl del web services, una vez abierto ir a
file-> properties -> General tab -> certificates ->details tab ->copy to file ->aparece un wizard y luego presionar next-> ahi seleccionar el formato DER encoded binary -> ponerle algun nombre significativo al certificado y luego finish

una vez que tengo el certificado en la pc, ahora que hago?
Yo luego de guardarlo en la pc, copie los certificados a un directorio cercano al root
una cosa asi c:\directorio

Luego de eso procederemos a instalar el certificado con el Keytool en el cacerts

Aqui esta el comando ejemplo para instalar el certificado

C:\Program Files\Java\jre6\lib\security>keytool -import -alias webc -file "C:\certificates\webc.cer"
-keystore "C:\Program Files\Java\jre6\lib\security\cacerts"

donde webc es el nombre significativo de este ejemplo pero puede ser el que cada uno quiera y webc.cer es el certificado que bajamos con el wsdl

una vez que le damos enter a ese comando se nos va a requerir la password del keystore, la cual por defecto es changeit

Enter keystore password: changeit
Owner: CN=ebosi.vzbi.com, OU=VBP Cert, O=Verizon Business, L=Boston, ST=MA, C=US
Issuer: CN=VBP Certificate Authority, OU=VBP CA, O=Verizon Business, L=Boston, ST=MA, C=US
Serial number: 49
Valid from: Mon Feb 22 17:03:19 GMT-03:00 2010 until: Tue May 22 17:03:19 GMT-03:00 2018
Certificate fingerprints:
MD5: CC:0B:73:44:67:74:85:06:F2:82:57:D9:BA:53:A1:C4
SHA1: A2:3E:2C:E9:EB:A8:71:14:2C:4E:D9:1D:7B:06:6B:DF:54:29:8F:F6
Trust this certificate? [no]: yes
Certificate was added to keystore

Espero que les haya servido, hasta la proxima!