Java

99 51132
OpenBravo POS Logo
OpenBravo POS Logo

En uno de los proyectos que tengo actualmente me pidieron instalar un punto de venta, por lo cual opte por instalar OpenBravo POS y en este post mostraré como instalarlo con soporte MySQL para la Base de Datos que maneja el Sistema.

Requerimientos:

Servidor

Bases de datos soportadas:

  • MySQL 5.0/MySQL Enterprise 5.1 or better (Certified by Sun)
  • Apache Derby release 10.4.2 or better
  • Oracle 10g release 2 (Express, Standard and Enterprise editions)
  • PostgreSQL 8.1.4 or better
  • HSQLDB 1.8.0 or better

Cliente

Sistemas Operativos:

  • Microsoft Windows 2000, XP, Vista.
  • Linux.
    • Ubuntu.
    • Debian.
    • OpenSuse.
    • Red Hat.
    • Fedora.
    • CentOS.
  • Mac OSX

Stack requerida

Java 2 Platform Standard Edition 6.0 or higher.

Hardware POS Soportado

  • Las pantallas táctiles. Configurada para emular un ratón.
  • Escáneres de códigos de barras. Configurado para emular un teclado estándar.
  • Recibo de impresoras. Configurado como una impresora estándar, o con soporte del protocolo ESC/POS, o con soporte JavaPOS. Si soporta el protocolo ESC/POS se debe conectar a un puerto serie o paralelo.
  • Las impresoras fiscales. Con soporte JavaPOS.
  • Pantallas del cliente. Con soporte del protocolo ESC/POS, o con soporte JavaPOS. Si soporta el protocolo ESC/POS se debe conectar a un puerto serie o paralelo.
  • Cajones de efectivo. Conectado a la impresora de recibos o con soporte JavaPOS.
  • Datos coleccionistas. Metrologic Scanpal 2 conectado a un puerto serie.
  • Escalas. Con el protocolo de Samsung o la compatibilidad con el protocolo Dialog1. Conectado a un puerto de serie del terminal punto de venta.
  • Lectores de tarjeta magnética (MSR). Configurado para emular un teclado estándar.

Tecnologías usadas

  • Java/Swing.
  • SQL.
  • XML.
  • Web Services.

Instalación

Una vez que cumplimos con los requerimiento previos, procedemos instalar nuestro POS.

NOTA: La instalación, configuración y comandos son para instalar POS en Ubuntu.

Instalación de Java

Para que funcione correctamente OpenBravo POS tenemos que instalar Java, para eso en Ubuntu debemos poner el siguiente comando:

 admin@k4ch0.org:$ sudo aptitude install sun-java6-jre sun-java6-fonts

Instalación de MySQL

Queremos que nuestra base de datos sea gestionada por MySQL, por lo cual debemos de tenerlo instalado en nuestro sistema, o si vamos a tener nuestra base de datos alojada en un servidor externo dicho servidor debe contar con MySQL.
Para instalarlo en Ubuntu hacemos:

admin@k4ch0.org:$ sudo aptitude install mysql-server libmysql-java mysql-admin mysql-query-browser

Esto nos instalará el conector de mysql con java en la ruta /usr/share/java/mysql.jar, ese conector lo usaremos más adelante dentro de la configuración. La cual copiamos o hacemos un link hacia /opt/openbravopos-2.30/mysql.jar.

Instalar OpenBravo POS

Lo primero que hay que hacer es descargar el archivo de instalación desde OpenBravo POS en sourceforge. Y nos descargará un archivo instalable.
Para instalarlo hacemos:

admin@k4ch0.org:$ sudo chmod +x openbravopos-2.30-linux-installer.bin
admin@k4ch0.org:$ sudo ./openbravopos-2.30-linux-installer.bin

Y seguimos las instrucciones del wizard:
1.- Seleccionamos el idioma en el que llevaremos a cabo la instalación

OpenBravo POS Language Selection
OpenBravo POS Language Selection

2.- Damos click en siguiente al puro estilo de las ventanas.

OpenBravo POS Setup
OpenBravo POS Setup

3.- Aceptamos la licencia

OpenBravo POS Setup
OpenBravo POS Setup

4.- Escogemos la ruta donde queremos que se instale:

OpenBravo POS Setup
OpenBravo POS Setup

5.- Y terminamos la instalación:

OpenBravo POS Setup
OpenBravo POS Setup

OpenBravo POS Setup
OpenBravo POS Setup

Con esté último paso tendremos lista nuestra terminal punto de venta OpenBravo POS, ahora nos falta configurarlo para que funcione con la base de datos MySQL, para eso, vamos a iniciar nuestro programa desde el icono que nos crea en el escritorio, o en su defecto desde la terminal.

admin@k4ch0.org:$ /usr/bin/openbravopos

Y tendremos una pantalla parecida a la siguiente:

Openbravo POS MySQL
Openbravo POS MySQL

Donde los datos para configurar correctamente el OpenBravo POS son los siguientes:

Driver library: /opt/openbravopos-2.30/mysql.jar
Driver class: com.mysql.jdbc.Driver
URL: jdbc:mysql://localhost:3306/openbravo_pos
User: openbravo_user
Password: el_passwdord_del_usuario
Openbravo POS Final[/caption]

1 1605

Una de los posibles usos de el modificador static es compartir el valor de una variable miembro entre objetos de una misma clase. Si declaramos una variable miembro de una clase, todos los objetos que declaremos basándonos en esa clase compartirán el valor de aquellas variables a las que se les haya aplicado el modificador static, y se podrá modificar el valor de este desde todas.
Un caso en el que nos podría ser muy útil este modificador, es en una clase que nos diga la cantidad de objetos que se han creado basándose en ella. Podemos meter una linea de código en el constructor que incremente la variable contador con el modificador static, y así cada vez que se declare un objeto el contador se incrementará. Desde cualquier objeto podremos consultar el valor del contador. El codigo sería algo así:

class Clase {
static int contador;
Clase() {
contador++;
}
int getContador() {
return contador;
}
}

class Codigo {
public static void main(String[] args) {
Clase uno = new Clase();
Clase dos = new Clase();
Clase tres = new Clase();
Clase cuatro = new Clase();
System.out.println("Hemos declarado " + uno.getContador() + " objetos.");
}
}

Esto tiene varias ventajas, porque además de ahorrarnos algunas posiciones de memoria (porque todos objetos comparten la misma) podemos crear variables compartidas, cosa que abre la puerta a suculentas posibilidades.

2 2406

Para todos aquellos que nos iniciamos en el mundo de la programación orientada a objetos y en especial en el mundo de Java, hay tres vocablos técnicos que oímos hasta la saciedad en los manuales, tutoriales y cursos, pero que tanto para quien empiezan en el mundo de la programación como para aquellos que vienen del paradigma de la programación estructurada son un tanto difíciles de entender; las clases, objetos y métodos. Por esta razón intentaré explicar por encima “quien es quien” en el mundo de la POO, y como podemos implementarlo en Java, ya que son la espina dorsal de este lenguaje de programación.

Clases

Las clases son declaraciones o abstracciones de objetos, lo que significa, que una clase es la definición de un objeto. Cuando se programa un objeto y se definen sus características y funcionalidades, realmente se programa una clase. Se puede visualizar como un contenedor de uno o más datos (variables o propiedades miembro) junto a las operaciones de manipulación de dichos datos (funciones/métodos). Las clases pueden definirse como estructuras (struct), uniones (union) o clases (class) pudiendo existir diferencias entre cada una de las definiciones según el lenguaje. Además las clases son agrupaciones de objetos que describen su comportamiento.

Métodos

Un método es parecido a lo que, en programación estructurada se llama función. Es decir, un fragmento de código al que se llama, acompañado de unos datos de entrada, y produce una determinada salida. Para esto tenemos que indicar el tipo de los primitivos de entrada, el tipo de los de salida, el nombre del método y el trabajo que realizara.

[tipoPrimitivoSalida] [nombreMétodo] ([tipoPrimitivoEntrada] [nombrePrimitivoEntrada]) {
//Código del método
return primitivoSalida;
}

Para ser más explícitos, vamos a poner un ejemplo porque no creo que me haya explicado demasiado bien. Imagina que queremos hacer un método al que le pasamos un parámetro determinado (un primitivo tipo int) y devuelva el resultado del primitivo de entrada más 5. Primero definimos el tipo del primitivo de entrada y el de salida (en nuestro caso ambos serán tipo int). Seguidamente, le damos un nombre (en este caso lo he bautizado como sumaCinco) y lo escribimos :

int sumaCinco(int entrada) {
return entrada + 5;
}

Para usar este método, podemos hacer lo siguiente

int numero;
numero = sumaCinco(10);
System.out.println("El resultado es " + numero + ".");

Como puedes imaginar, el resultado es, efectivamente, 15.

Un detalle importante que me he olvidado comentar es el tema de los modificadores. No entraré demasiado en detalle con esto, pero debemos saber que para usar un método desde otro método tipo static (como el método main, que se declara como public static void main(String[] args)). Otro tipo de modificador es el public, que permite que el método sea usado desde otro paquete. Pero como en nuestros pequeños programas aún no usamos paquetes, lo dejaremos para otro día. Para terminar con esto, una cosa muy importante, debo decir que los modificadores se especifican justo antes de poner el tipo del primitivo de salida. Completando el esquema de un método estándar que había empezado antes, nos queda esto

[modificadores] [tipoPrimitivoSalida] [nombreMétodo] ([tipoPrimitivoEntrada] [nombrePrimitivoEntrada]) {
//Código del método
return primitivoSalida;
}

Clases

Ahora que ya sabemos lo que son los primitivos y los métodos, podemos crear una clase. Como he dicho al principio, una clase es un conjunto de primitivos y métodos, así que también podemos hacer un esquema de como será una clase estándar.

class NombreClase {
//Primitivos

//Métodos
}

Así como los nombres de los primitivos empiezan con una minúscula por convención, los nombres de clases empiezan con una mayúscula por el mismo motivo.
Para dejarlo claro, hagamos un ejemplo. Queremos crear una clase que nos permita “simular” un disco de música. Los parámetros que definen un disco son su título, el nombre del grupo que lo edita, el estilo de música de sus canciones, el número de canciones, el nombre de la productora, y demás. Estos serían los primitivos de la clase. ¿Y que pasa con los métodos? Pues en nuestra clase DiscoMusica podrían ser métodos que especificaran estos valores (los primitivos) para cada cd de nuestra colección. Un método llamado definirEstilo, al que le pasaremos un string con el nombre del estilo de música, y un método para definir cada primitivo. Para ponernos lo sencillo y no complicarnos con el uso de strings o arrays, solo trabajaremos con enteros, y simplificaremos mucho la clase. También pondré un método que nos devuelva el número de componentes del grupo, mediante un return. El código sería así

class DiscoMusica {
int numeroCanciones;
int numeroComponentesGrupo;
int anioPublicacion;

void definirNumeroCanciones(int numero) {
numeroCanciones = numero;
}

void definirNumeroComponentes(int num) {
numeroComponentesGrupo = num;
}

void definirAnio(int anio) {
anioPublicacion = anio;
}

int devolverNumeroComponentes() {
return numeroComponentesGrupo;
}
}

¡Hecho, una clase que pseudo define un disco! Tenemos primero los tres primitivos, y luego sus métodos que los definen. Muy bien, pero esto define un disco genérico. Imaginemos que queremos hacer una clasificación de 3 discos, ¿tengo que hacer una clase diferente para cada uno de ellos? ¡Pues claro que no, porque aquí entran en juego los famosos objetos! Un objeto no es más que una personificación de una clase, el conjunto de primitivos y métodos definidos en la clase, que ahora definen un objeto determinado (por ejemplo, disco1, disco2, disco3 …). Para definir un objeto, debemos especificar en que clase se basará, con la siguiente sintaxis:

[nombreClase] [nombreObjeto] = new [nombreClase]();

Por ejemplo, para crear un objeto llamado disco1 basado en la clase que creamos anteriormente, hacemos
DiscoMusica disco1 = new DiscoMusica();
Ahora que ya tenemos el objeto disco1, podemos asignar un valor a sus primitivos. Podemos usar los métodos del objeto disco1 que hemos creado usando la clase DiscoMusica (como ves, en esta frase se resumen los 3 conceptos que quiero dejar claros) usando el nombre del objeto junto con el nombre del método a usar, separados por un punto entre ellos

[nombreObjeto].[nombreMétodo]([primitivosEntrada]);

En nuestro caso, vamos a especificar el número de componentes, canciones y el año publicación del disco1

disco1.definirNumeroCanciones(14);
disco1.definirNumeroComponentes(3);
disco1.definirAnio(2005);

También podemos usar el método que nos devuelve el numero de componentes del objeto disco1
System.out.println(“Hay ” + disco1.devolverNumeroComponentes() + ” músicos.”);
Con esto imprimimos por pantalla la cadena “Hay “, concatenada (el operador + suma números, pero también sirve para unir dos o más cadenas) con el resultado de disco1.devolverNumeroComponentes(), y también lo concatena con la cadena ” músicos.”. El resultado es “Hay 3 músicos.”, que es impreso en pantalla.

Si has llegado aquí, espero que te haya quedado claro todo lo explicado.

2 5597

Una de las características de los lenguajes de programación orientada a objetos (POO) es la herencia. La herencia es un mecanismo que nos permite crear nuevas clases basándonos en clases ya creadas, y nos ayuda a evitar la repetición de código.

EJEMPLO:

Imaginemos que que necesitamos crear una aplicación que nos ayude a catalogar los animales que nos encontremos cuando paseemos por el bosque. Todos tendrán elementos en común (todos tendrán patas, así como todos tendrán un nombre científico, etc …), que podremos establecer como variables en la clase principal, que llamaremos Animal. Pero también tendrán peculiaridades dependiendo de si son mamíferos u otros, así que tendremos que hacer subclases que contengan las peculiaridades de los insectos y demás, además de las própias de todos los animales. Aquí es cuando entra en juego la herencia, ya que gracias a ella podemos crear subclases que heredaran las variables y los métodos de su clase “padre”, además de poder añadir nuevos métodos y nuevas variables a la nueva subclase.

En Java especificamos cual es la clase de la que debe heredar variables y métodos mediante inclusión de la palabra reservada extends seguida del nombre de la clase padre, justo después de el nombre de la subclase.

class nombreSubclase extends clasePadre {
/*Variables y métodos própias de la subclase*/
}

En este caso la clase nombreSubclase heredaría las variables y los métodos de la clase clasePadre.

Un pequeño ejemplo de código que ejemplifica el uso de la herencia de manera muy básica. Ya sabes que para compilar el código le debes dar el nombre de la clase en la que este el método main seguido de la extensión .java (en este caso seria Herencia.java).

class Animal { //La clase padre
String nombre;
byte numeroPatas;
}

class Mamifero extends Animal {  /*Toma Animal como clase padre*/
byte mesesGestacion;
void nombreAnimal() {
System.out.println(nombre);
}
}

class Herencia {
public static void main(String[] args) {
Mamifero humano = new Mamifero(); //Creamos el objeto humano
humano.nombre = "Homo Sapiens";
humano.numeroPatas = 2;
humano.mesesGestacion = 9;
humano.nombreAnimal();
}
}

Fuente: http://aprendiendojava.blogspot.com/2005/05/qu-es-esto-de-la-herencia.html