miércoles, mayo 15, 2013

Archivo de configuración en Java similar al App.config de .NET

Luego de replicar mi helper de Sql en Java, el siguiente paso fue utilizar un archivo externo de configuración para guardar el "ConnectionString".

Cómo lo hacemos en .NET


En .NET se encuentra integrado a Visual Studio. En un proyecto de consola simplemente agregamos un "Application Configuration File" que nombra como App.config. Este archivo se renombrará a "NombreDeEjecutable.config" al momento de compilar.

Para leerlo, usamos los métodos estáticos de la clase ConfigurationManager.

Cómo hacer algo similar en Java


Java tiene un objeto llamado "Properties" que gestiona objetos para guardar configuraciones y contiene métodos de escritura y lectura a disco.

Usé este objeto para crear mi helper llamado (obviamente) ConfigurationManager. Lo implementé cómo singleton de modo que la primera vez que lo invocamos lee las configuraciones desde disco y luego revisa todo desde memoria.

Este es el código que agregué a mi librería de helpers:

package ar.com.bdamian.configuration;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

public class ConfigurationManager {

private static Properties p = null;

private static Properties getInstance() {
if (p==null) {
p = new Properties();
try {
p.load(new FileInputStream("config.properties"));
} catch (IOException ex) {}
}
return p;
}

public static String getAppSetting(String appSetting) {
Properties prop = getInstance();
return prop.getProperty(appSetting);
}
}

Luego, para usarlo en un proyecto hay que agregar un archivo de texto llamado "config.properties" a nivel de la carpeta del proyecto conteniendo los datos necesarios.


En mi ejemplo fue un ConnectionString:
connectionString=jdbc\:sqlserver\://localhost\\SQLEXPRESS\:1433;DatabaseName\=Northwind;user\=usuario;Password\=password

Por ultimo, lo llamamos para obtener la configuración de esta forma:
String connString = ConfigurationManager.getAppSetting("connectionString");

No se si esta es la mejor forma, pero como vengo de C# .NET, me resulta cómodo hacerlo así.

jueves, mayo 02, 2013

Java: ¿Cómo referenciar clases de otro proyecto con Eclipse?

Una vez terminado "Eclipse and Java for Total Beginners", lo primero que estoy intentando es traducir mi librería personal de clases .NET.

Creé un nuevo proyecto y comencé a traducir mi clase base (superclass en Java) para conexiones a SQL Server.

Para probar, hice un nuevo proyecto y traté de heredar mi clase con lo que me encontré con el error: "The import xxx cannot be resolved".

(Google "java import other project package cannot be resolved to a type")

¿Cómo es en Eclipse lo que en Visual Studio es click derecho en "References" -> "Add Reference" -> "Projects"?


En Eclipse es "Project" -> "Properties" -> "Java Build Path" -> tab "Projects" -> "Add". Seleccionamos el proyecto donde están las clases que queremos utilizar y le damos "ok".

En este caso estoy heredando una clase abstracta por lo que aprendí dos nuevas cosas:

¿Cómo se indica que estamos heredando de otra clase?
C#
public class Hija : Padre {

Java
public class Hija extends Padre {


¿Cómo se define un método abstracto de la superclase?

C#
protected override String metodo() {

Java
@Override
protected String metodo() {

Continuará...