Breve repaso a Java para crear servicios web conectables con PHP

Breve repaso a Java para crear servicios web conectables con PHP

Para crear Servicios Web necesitamos tener unas nociones básicas del lenguaje Java a partir de las que accederemos a los elementos que vamos a construir en nuestros ejemplos.

Lanzamos NetBeans, vamos a crear, a partir del proyecto de la lección anterior,

  • clases para construir modelos: elementos, pilotos (elemento), viper(elemento) ,computador y nexus (computador).
  • Clases para excepciones que se generarán en las clases piloto, viper y nexus, lanzadas desde Prueba.

Lo primero es construir el Elemento:

 
// Web 2.0: Arquitectura Orientada a Servicios en Java.
// Introducción a JAVA
// CLASE DEL MODELO Elemento
 
 
package es.ugr.battlegalactica.modelo;
 
 
// Clase Elemento
// @author Juan Belón Pérez
public class Elemento {
// Siguiente elemento
private static long nextId = 0;
// ID del Elemento
protected long id = 0;
// Constructor de Elemento sin argumentos
// @return Elemento
public Elemento() {
this.id = ++Elemento.nextId;
}
//Devuelve el Id de la clase
// @return long
public long getId() {
return id;
}
// Devuelve el contador actual de ID's de Elementos
// @return long
public long getNextId(){
 return Elemento.nextId;
}
 
}

Ahora, podemos ,a partir de este elemento construir Pilotos que hereden de este:

 
// Web 2.0: Arquitectura Orientada a Servicios en Java.
// Introducción a JAVA
// CLASE DEL MODELO Piloto que hereda del Modelo Elemento
package es.ugr.battlegalactica.modelo;
 
// Clase Piloto, hereda de Elemento
// @author Juan Belón Pérez
public class Piloto extends Elemento {
// Nombre del piloto
private String nombre;
// Destreza del piloto
private int destreza;
// Constructor de Piloto
//@param nombre
// @param destreza
public Piloto(String nombre, int destreza) {
this.nombre   = nombre;
this.destreza = destreza;
}
//
// Devuelve el valor de destreza de un piloto
// @return int
public int getDestreza() {
return destreza;
}
 
// Devuelve el nombre de un piloto
// @return String
public String getNombre() {
return nombre;
}
 
}

y lo mismo que para Piloto pero con Viper (que son naves):

// Web 2.0: Arquitectura Orientada a Servicios en Java.
// Introducción a JAVA
// CLASE DEL MODELO Viper que hereda del Modelo Elemento
 
package es.ugr.battlegalactica.modelo;
 
import es.ugr.battlegalactica.modelo.excepciones.NoHayArmamentoException;
 
 
// Clase Viper (naves)
// @author Juan Belón Pérez
public class Viper extends Elemento {
 
// Nombre del Viper
private String nombre;
 
// Cantidad de armamento (nºde proyectiles)
private int armamento;
 
 
// Constructor de Vipers
//@param nombre String
 
public Viper(String nombre) {
this.nombre = nombre;
this.armamento = 0;
}
 
// Devuelve la cantidad de munición del Viper
// @return int
public int getArmamento() {
return armamento;
}
// Devuelve el nombre del Viper
// @return String
public String getNombre() {
return nombre;
}
 
// Pone munición al Viper en la cantidad dada
// @param armamento
public void setArmamento(int armamento) {
this.armamento = Math.abs(armamento);
}
 
// Dispara con la munición disponible, decrementa el armamento
// @throws NoHayArmamentoException
public void disparar() throws NoHayArmamentoException{
--this.armamento; // = (this.armamento==0)?0:(--this.armamento);
if (this.armamento<0){
this.armamento = 0;
throw new NoHayArmamentoException("No queda munición en este viper ("+
this.getId()+")");
}
}
}

Ahora repasaremos lo que es una interfaz o clase abstracta (no se puede instanciar sino que sirve como modelo para tener varias implementaciones distintas, por ejemplo, una clase base de datos con distintas tecnologías: mysql, oracle,etc). Construimos la clase Computador para realizar una implementación más tarde llamada Nexus

 
// Web 2.0: Arquitectura Orientada a Servicios en Java.
// Introducción a JAVA
// CLASE DEL MODELO Computador para el
//  computador de la estrella de combate
 
 
package es.ugr.battlegalactica.modelo;
 
import es.ugr.battlegalactica.modelo.excepciones.PilotoNoEncontradoException;
import es.ugr.battlegalactica.modelo.excepciones.ViperNoEncontradoException;
import java.util.Iterator;
 
 
// Clase Computador
// @author Juan Belón Pérez
//
public interface Computador {
//
//Registra un Viper en el Computador
//@param v Viper
//
void guardarViper(Viper v);
///
//Registra un Piloto en el Computador
//@param p
//
void guardarPiloto(Piloto p);
//////Devuelve el Viper asociado al id especificado
//@param id
//@return Viper
//
Viper obtenerViper(long id) throws ViperNoEncontradoException;
//////Devuelve el Piloto asociado al id especificado
//@param id
//@return Piloto
//
Piloto obtenerPiloto(long id) throws PilotoNoEncontradoException;
//////Devuelve un iterador de los Vipers registrados en el Computador
//@return Iterator
//
Iterator listarVipers();
//////Devuelve un iterador de los Pilotos registrados en el Computador
//@return Iterator
//
Iterator
listarPilotos();
}

Recordar también lo que son los iteradores…ahora vamos a dar el código para implementar la interfaz Computador con la clase Nexus:

//
//Web 2.0: Arquitectura Orientada a Servicios en Java.
//Introducción a JAVA
//CLASE DEL MODELO Nexus que implementa el Computador para el
// computador de la estrella de combate
//
 
package es.ugr.battlegalactica.modelo;
 
import es.ugr.battlegalactica.modelo.excepciones.PilotoNoEncontradoException;
import es.ugr.battlegalactica.modelo.excepciones.ViperNoEncontradoException;
import java.util.ArrayList;
import java.util.Iterator;
 
//////Clase Nexus - un Computador de la estrella de combate
//@author Juan Belón Pérez
//
public class Nexus implements Computador {
//////Pilotos registrados en el Computador Nexus
//
private static ArrayList
pilotos_nexus;
//////Vipers registrados en el Computador Nexus
//
private static ArrayList vipers_nexus;
//////Constructor del Computador Nexus
//
public Nexus() {
init_Nexus();
}
//////Inicializador del Computador Nexus
//
private void init_Nexus(){
pilotos_nexus = new ArrayList
();
vipers_nexus = new ArrayList();
}
public void guardarViper(Viper v) {
vipers_nexus.add(v);
}
 
public void guardarPiloto(Piloto p) {
pilotos_nexus.add(p);
}
 
public Viper obtenerViper(long id) throws ViperNoEncontradoException {
for (Viper v: vipers_nexus)
if (v.getId()==id) return v;
throw new ViperNoEncontradoException("Viper no encontrado: "+id);
//    return null;
}
 
public Piloto obtenerPiloto(long id) throws PilotoNoEncontradoException {
for (Piloto p: pilotos_nexus)
if (p.getId()==id) return p;
throw new PilotoNoEncontradoException("No se ha encontrado el piloto:"
+ id);
//   return null;
}
 
public Iterator listarVipers() {
return Nexus.vipers_nexus.iterator();
}
 
public Iterator
listarPilotos() {
return Nexus.pilotos_nexus.iterator();
}
 
}

Para probar las excepciones haremos que cuando se dispare una viper ,si la cantidad de armamento es 0 lance una excepción de tipo «NoHayArmamentoException»:

//
//Web 2.0: Arquitectura Orientada a Servicios en Java.
//Introducción a JAVA
//CLASE PARA EXCEPCIONES DEL MODELO VIPER -> Disparo
//
package es.ugr.battlegalactica.modelo.excepciones;
 
//////Clase para lanzar excepciones cuando se intenta disparar sin munición
//desde un Viper
//@author Juan Belón Pérez
//
public class NoHayArmamentoException extends Exception {
//////Constructor de Excepción con mensaje
//@param message
//
public NoHayArmamentoException(String message) {
super(message);
}
//////Constructor
//
public NoHayArmamentoException() {
}
 
}

Creamos una clase de excepciones para la clase Piloto, en este caso para cuando se intenta encontrar un Piloto que no existe:

//
//Web 2.0: Arquitectura Orientada a Servicios en Java.
//Introducción a JAVA
//CLASE PARA EXCEPCIONES DEL MODELO Piloto -> busquedas
//
 
package es.ugr.battlegalactica.modelo.excepciones;
 
////////@author Juan Belón Pérez
//
public class PilotoNoEncontradoException extends Exception {
 
//////Constructor con mensaje
//@param message
//
public PilotoNoEncontradoException(String message) {
super(message);
}
//////Constructor
//
public PilotoNoEncontradoException() {
}
 
}

Lo mismo que antes, para Vipers:

//
//Web 2.0: Arquitectura Orientada a Servicios en Java.
//Introducción a JAVA
//CLASE PARA EXCEPCIONES DEL MODELO Viper -> busquedas
//
 
package es.ugr.battlegalactica.modelo.excepciones;
 
////////@author Juan Belón Pérez
//
public class ViperNoEncontradoException extends Exception {
//////Constructor con mensaje
//@param message
//
public ViperNoEncontradoException(String message) {
super(message);
}
 
public ViperNoEncontradoException() {
}
 
}

Por último la clase Prueba para probar todo lo que hemos construido:

//
//Web 2.0: Arquitectura Orientada a Servicios en Java
//Primer Modelo: BSGModelo con la clase Prueba
//@author Juan Belón Pérez
//
 
package es.ugr.battlegalactica;
 
import es.ugr.battlegalactica.modelo.Elemento;
import es.ugr.battlegalactica.modelo.Nexus;
import es.ugr.battlegalactica.modelo.Piloto;
import es.ugr.battlegalactica.modelo.Viper;
import es.ugr.battlegalactica.modelo.excepciones.NoHayArmamentoException;
import es.ugr.battlegalactica.modelo.excepciones.PilotoNoEncontradoException;
import es.ugr.battlegalactica.modelo.excepciones.ViperNoEncontradoException;
import java.util.ArrayList;
import java.util.Iterator;
 
//////Clase con los 3 primeros ejercicios propuestos
//@author Juan Belón Pérez
//
public class Prueba {
private static ArrayList elementos;
private static ArrayList
pilotos;
private static ArrayList vipers;
private static Nexus nexus;
//////Función principal.
//Imprime por pantalla un mensaje fijo.
////@param args la linea de argumentos del programa
//
public static void main(String[] args) throws
 NoHayArmamentoException, PilotoNoEncontradoException,
 ViperNoEncontradoException {
System.out.println("Prueba del modelo de datos BattleStarGallactica");
//crear dos elementos e imprimir sus identificadores en la consola.
//Si todo ha ido bien se deberían escribir los identificadores 1 y 2
init();
System.out.println("Prueba de creación de elementos:");
for (Elemento e: elementos){
System.out.printf("%d,",e.getId());
}
System.out.println("\nPrueba de creación de pilotos:\n");
for (Piloto p: pilotos){
System.out.printf("ID:%d,Nombre:%s,Destreza:%d\n",p.getId(),p.getNombre(),
p.getDestreza());
}
System.out.println("\nPrueba de creación de vipers:\n");
for (int i=0; i<4; i++){ //Disparar 4 veces con todos los vipers:
for (Viper v: vipers){
System.out.printf("#%d# Disparando con el viper ID:%d,Nombre:%s," +
"Armamento:%d\n",(i+1),v.getId(),v.getNombre(),v.getArmamento());
try {
v.disparar();
} catch (NoHayArmamentoException e){
System.err.println("\n\tError al disparar:"+e.getMessage()+"\n");
}
System.out.printf("\tEl nuevo armamento del viper con ID:%d y Nombre: %s"+
" ahora tiene %d unidad/es\n",
v.getId(),v.getNombre(),v.getArmamento());
}
}
System.out.println("\nPrueba de creación de Nexus con Pilotos:\n");
Iterator
iter_piloto = nexus.listarPilotos();
Piloto aux_piloto = null;
while (iter_piloto.hasNext()){
aux_piloto = iter_piloto.next();
System.out.printf("Piloto %s, ID:%d\n", aux_piloto.getNombre(),
aux_piloto.getId());
}
System.out.println("\nPrueba de creación de Nexus con Vipers:\n");
Iterator iter_viper = nexus.listarVipers();
Viper aux_viper = null;
while (iter_viper.hasNext()){
aux_viper = iter_viper.next();
System.out.printf("Viper %s, ID:%d\n", aux_viper.getNombre(),
aux_viper.getId());
}
if (aux_piloto!=null)
System.out.println("\nPrueba de búsqueda (el último:" +
aux_piloto.getId()+") de Pilotos en Nexus:\n" +
nexus.obtenerPiloto(aux_piloto.getId()).getNombre());
if (aux_viper!=null)
System.out.println("\nPrueba de búsqueda de Vipers (el último:"+
aux_viper.getId()+") en Nexus:\n" +
nexus.obtenerViper(aux_viper.getId()).getNombre()
);
System.out.println("\nComprobar que se generan las excepciones "+
"buscando un Piloto falso:23\n");
try {
aux_piloto = nexus.obtenerPiloto(23);
} catch (PilotoNoEncontradoException ex){
System.err.println("\n\t"+ex.getMessage());
}
System.out.println("\nComprobar que se generan las excepciones "+
"buscando un Viper falso:23");
try {
aux_viper = nexus.obtenerViper(23);
} catch (ViperNoEncontradoException ex){
System.err.println("\n\t"+ex.getMessage());
}
}
//Inicializador de elementos, pilotos, vipers y Nexus (vipers y pilotos)
private static void init(){
Viper v_aux;
elementos = new ArrayList();
elementos.add(new Elemento());
elementos.add(new Elemento());
 
pilotos = new ArrayList
();
pilotos.add(new Piloto("Juax",120));
pilotos.add(new Piloto("Sara",110));
 
vipers = new ArrayList();
v_aux = new Viper("Trueno");
v_aux.setArmamento(3);
vipers.add(v_aux);
v_aux = new Viper("Rayo");
v_aux.setArmamento(4);
vipers.add(v_aux);
 
nexus = new Nexus();
nexus.guardarPiloto(new Piloto("Migue",130));
nexus.guardarPiloto(new Piloto("Jesús",130));
v_aux = new Viper("Trueno");
v_aux.setArmamento(4);
nexus.guardarViper(v_aux);
v_aux = new Viper("Fuego");
v_aux.setArmamento(5);
nexus.guardarViper(v_aux);
}
 
}

La salida que debe mostrar es la siguiente:

Prueba del modelo de datos BattleStarGallactica
Prueba de creación de elementos:
1,2,
Prueba de creación de pilotos:

ID:3,Nombre:Juax,Destreza:120
ID:4,Nombre:Sara,Destreza:110

Prueba de creación de vipers:

#1# Disparando con el viper ID:5,Nombre:Trueno,Armamento:3
El nuevo armamento del viper con ID:5 y Nombre: Trueno ahora tiene 2 unidad/es
#1# Disparando con el viper ID:6,Nombre:Rayo,Armamento:4
El nuevo armamento del viper con ID:6 y Nombre: Rayo ahora tiene 3 unidad/es
#2# Disparando con el viper ID:5,Nombre:Trueno,Armamento:2
El nuevo armamento del viper con ID:5 y Nombre: Trueno ahora tiene 1 unidad/es
#2# Disparando con el viper ID:6,Nombre:Rayo,Armamento:3
El nuevo armamento del viper con ID:6 y Nombre: Rayo ahora tiene 2 unidad/es
#3# Disparando con el viper ID:5,Nombre:Trueno,Armamento:1
El nuevo armamento del viper con ID:5 y Nombre: Trueno ahora tiene 0 unidad/es
#3# Disparando con el viper ID:6,Nombre:Rayo,Armamento:2
El nuevo armamento del viper con ID:6 y Nombre: Rayo ahora tiene 1 unidad/es
#4# Disparando con el viper ID:5,Nombre:Trueno,Armamento:0

Error al disparar:No queda munición en este viper (5)

El nuevo armamento del viper con ID:5 y Nombre: Trueno ahora tiene 0 unidad/es
#4# Disparando con el viper ID:6,Nombre:Rayo,Armamento:1
El nuevo armamento del viper con ID:6 y Nombre: Rayo ahora tiene 0 unidad/es

Prueba de creación de Nexus con Pilotos:

Piloto Migue, ID:7
Piloto Jesús, ID:8

Prueba de creación de Nexus con Vipers:

Viper Trueno, ID:9
Viper Fuego, ID:10

Prueba de búsqueda (el último:8) de Pilotos en Nexus:
Jesús

Prueba de búsqueda de Vipers (el último:10) en Nexus:
Fuego

Comprobar que se generan las excepciones buscando un Piloto falso:23

Comprobar que se generan las excepciones buscando un Viper falso:23

No se ha encontrado el piloto:23

Viper no encontrado: 23
BUILD SUCCESSFUL (total time: 0 seconds)

Para descargar el código y probar, hay un comprimido aquí.

« Volver al Curso de Arquitectura de Servicios Java para PHP ó ver más cursos »

Artículos relacionados:

  1. georgers dice:

    sería bueno que documentes un poco más y específiques lo que quieres hacer, y el objetivo principal que quieres llegar, pero referente al ejemplo

 

footer
jbelon © | sitemap.xml