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

Please type the characters of this captcha image in the input box

Por favor escriba los caracteres de la imagen captcha en el cuadro de entrada

footer
jbelon © | sitemap.xml