Vamos a generar las clases necesarias para generar un cliente de un Web Service a partir de su WSDL.
Nos basaremos en el proyecto HelloWorld de hace unas semanas, y aquà le añadimos seguridad. En este proyecto devolvÃamos el saludo según el nombre que nos pasaban como parámetro a través del Web Service.
Read the rest of this entry »
Queremos interceptar el WS en la salida y la entrada. Esto puede ser útil para:
- Hacer log de alguna parte del mensaje
- Llevar registro de mensajes enviados
- Controles de seguridad añadidos
- ….
Hoy vamos a hacer un ejemplo de log de la entrada/salida del WS.
Anotamos el WS con el descriptor de la cadena de manejadores:
@WebService
@HandlerChain(file="src/META-INF/handlerChain.xml")
public class Hello {
@WebMethod
public String sayHello(String name) {
return "Hello, "+name+".";
}
}
Que tendrá el contenido siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
<handler-chain>
<handler>
<handler-class>lebrijo.handlers.WSHandler</handler-class>
</handler>
</handler-chain>
</handler-chains>
La clase WSHandler implementará la interfaz SOAPHandler:
public class WSHandler implements SOAPHandler<SOAPMessageContext> {
public Set<QName> getHeaders() {
return null;
}
public boolean handleFault(SOAPMessageContext context) {
logToSystemOut(context);
return true;
}
public boolean handleMessage(SOAPMessageContext context) {
logToSystemOut(context);
return true;
}
private void logToSystemOut(SOAPMessageContext smc) {
Boolean outboundProperty = (Boolean) smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (outboundProperty.booleanValue()) {
System.out.println("\nOutgoing message:");
} else {
System.out.println("\nIncoming message:");
}
SOAPMessage message = smc.getMessage();
try {
message.writeTo(System.out);
} catch (Exception e) {
System.out.println("Exception in handler: " + e);
}
}
public void close(MessageContext context) {
// TODO Auto-generated method stub
}
Normalmente en todos los proyectos web, queremos que todas las páginas tengan una apariencia coherente en todo nuestro sitio, para mejorar la usabilidad. Lo más habitual en web es poner como parte fija la cabecera (con el login por ejemplo), un menú en la parte superior o lateral, y un pié:
- Y que estas partes (que forman la plantilla) se incluyan en todas las páginas que desarrollemos sin necesidad de volver a repetir todo.
- Que cualquier modificación sobre la plantilla se refleje automaticamente en todo nuestro sitio, sin tocar el resto.
- Y, si es posible, en mi editor WYSIWYG se vea todo (esto en Eclipse no es posible de momento).
Read the rest of this entry »
En este artÃculo crearemos un modelo de persistencia para nuestra pequeña aplicación de gestión de empleados. Basado en un anterior post donde creamos una aplicación básica de JDeveloper.
Sobre el proyecto en el menú contextual, New > EJB > Entities From Tables. Vamos a utilizar la tecnologÃa EJB 3.0, anotando los beans de entidad como JPA 2.0:

Seleccionamos las tablas Departaments y Employees.
Como vimos en un artÃculo anterior, se puede obtener el diagrama de una base de datos ya hecha. Yo me lo he creado en el paquete lebrijo.diagrams:

Podemos crear un New > EJB Diagram, y arrastrando las entidades anteriormente creada, tendremos el dibujo entero:

En los dos beans refactorizaré el atributo employees por manager, ya que define más claramente la relación.

Esto se actualiza automáticamente en el diagrama de EJB (en teoria, en realidad hay que volver a arrastrar las entidades).
Como último ejercicio, podemos crear la consulta de encontrar por nombre, ampliando la anotación de consultas de la entidad Employees:
@Entity
@NamedQueries({
@NamedQuery(name = "Employees.findAll", query = "select o from Employees o")
,
@NamedQuery(name = "Employees.findByName", query = "select o from Employees o where o.firstName like :p_name")
})
Parece una obviedad que la mejor herramienta para desarrollar sobre Weblogic/OracleDB es JDeveloper. Pero para mi, hasta ahora, no era tan obvio, ya que Eclipse es mi IDE preferido, ya que es el estándar para el desarrollo JAVA (Jboss, Spring, Android,…).
Si tu arquitectura es Oracle/Weblogic, no tienes miedo al cambio y tu obsesión es incrementar tu productividad, tu herramienta es JDeveloper. Voy a hacer una serie de artÃculos tratando de demostrar este punto. Pero si quieres ir abriendo boca te recomiendo que veas este video, veras como puede ser realmente sencillo hacer aplicaciones RIA en entornos empresariales muy complejos.
Read the rest of this entry »
Voy a ver como instalar el plugin de GAE en mi Eclipse, y a hacer y subir mi primera aplicación sencilla para ver como gestiona el ciclo de vida básico de las aplicaciones dicho plugin.
Nos basaremos en el paquete Eclipse Galileo R2 para JEE projects de 64 bits. Y en el Google Plugin for Eclipse, que soporta las tecnologÃas GWT y GAE, en su versión para Galileo.
Instalar Eclipse es inmediato, se descarga y se descomprime en la carpeta que gustemos. Luego lo ejecutamos.
Para instalar el plugin de Google, Help > Install New Software … > Add, añadimos la url Google Plugin for Eclipse for Galileo. E instalamos el plugin y las dos SDK.
Creamos la aplicación Web File > New > Web Application Project:

Para probarla en modo local, en el menú conextual Debug As > Web Application. Asà vemos como se debuguea la aplicación con el debuger de Eclipse de forma normal.
Para desplegarla en el servidor tenemos que tener cuenta en https://appengine.google.com, y crear un ID (pe: firstapp-lebrijo). Este lo introduciremos a través del menú contextual Google > App Engine Settings… De esta forma Eclipse sabrá donde desplegarla cuando hagamos Google > Deploy to App Engine.
Tengo mi primera aplicación en: http://firstapp-lebrijo.appspot.com/

Para implementar la capa de servicios y aprovechar su inyección de dependencias vamos a utilizar Spring.
Con Spring 2.5.6, que es la versión soportada por OEPE, para acomodar nuestro desarrollo.
Primero añadimos la Facet de Spring a nuestro proyecto. En el menu contextual del proyecto > Properties… :

Luego generamos las clases ORM. Se generan con el menú contextual del proyecto > Spring > Generate Spring ORM Classes …

Como se observa, sobre las entidades JPA definidas en nuestro paquete de persistencia, se definen las clases de acceso y las de servicio. Os recomiendo echarle un buen vistazo a los paquetes lebrijo.school.services y lebrijo.school.dao.
Lo normal es que debamos limpiar estas clases de métodos, ya que genera todas las posibilidades (remove, persist, findById,…). Por ejemplo, si una entidad de nuestro modelo es una vista, no tendrá sentido mantener un DAO con los métodos persist y remove.
Aquà os dejo el zip del proyecto eclipse tras estas modificaciones.
Veamos como implementar la persistencia en un proyecto de Eclipse con el estándar JPA implementado por EclipseLink.
Nos basaremos en el proyecto de Eclipse creado en el artÃculo anterior. En las propiedades (botón derecho) del proyecto añadimos el “poder” de manejar Entidades JPA, añadiendo el Facet:

Utilizaremos EclipseLink 1.1.2 ya que es la implementación de JPA por defecto en WebLogic 11g.
Generar Entidades desde las tablas
Sobre el proyecto en el menu contextual (botón derecho), JPA > Generate Entities from Tables… Elegimos la conexión SCHOOL creada anteriormente, y las tablas REGISTRY y SCHOOLCERTIFICATES. Generando las entidades en el paquete lebrijo.school.model:

Para mantener la coherencia de JPA debemos añadir un Identificador a todas las clases, Registry lo tiene, pero a SchoolCertificates hay que añadÃrselo:

Es muy interesante observar el fichero src/META-INF/persistence.xml, como se configura la conexión y se mapean las entidades.
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="school" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
 <class>lebrijo.school.model.Registry</class>
 <class>lebrijo.school.model.Schoolcertificate</class>
<properties>
<property name="eclipselink.target-server" value="WebLogic_10"/>
<property name="eclipselink.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
<property name="eclipselink.jdbc.url" value="jdbc:oracle:thin:@192.168.0.7:1521:xe"/>
<property name="eclipselink.jdbc.user" value="school"/>
<property name="eclipselink.jdbc.password" value="school"/>
<property name="eclipselink.logging.level" value="FINEST"/>
</properties>
 </persistence-unit>
</persistence>
Aquà os dejo el zip del proyecto eclipse tras estas modificaciones.
Existe una forma de crear plantillas muy básica con JSP a base de includes, que nos puede servir para salir del paso, para un proyecto muy pequeño, por que no queramos utilizar tecnologÃas más pesadas, o queramos desplegar nuestro proyecto en cualquier servidor de aplicaciones.
La técnica trata de crear pequeños trozos de código en JSP (jsf, tags,…) para cabecera y pie. Y luego crear todas las páginas del proyectos a partir de una plantila.
Read the rest of this entry »
Siguiendo con nuestro objetivo de crear un entorno de desarrollo de software Extremo, hoy añadimos esta herramienta a la caja.
Maven es una herramienta de gestión de proyectos de software con las siguientes caracterÃsticas: Read the rest of this entry »
Eclipse tiene un proyecto llamado EMF (Eclipse Modeling Framework) muy majo para dibujar diagramas UML2. Pero mi objetivo en este artÃculo es dibujar un diagramas de clases UML2 y generar el esqueleto de clases correspondiente.
En la arquitectura de la aplicación se recomienda tener tus modelos de dominio separados de servicio, lógica de negocio etc. EMF te permite crear tu diagrama de clases y luego generarte el código correspondiente.
Read the rest of this entry »
OEPE (Oracle Enterprise Pack for Eclipse), es una distribución de Eclipse afinada por Oracle para conectarse a sus bases de datos y desarrollar con sus tecnologÃas.
- Trae ya configurado el plugin para que la perspectiva de Administración de la BBDD sea capaz de ver todos los tipos de objetos (paqetes, vistas, sinónimos,…).
- Predescargado Weblogic, para instalarlo de un clic. Y con facilidades para desarrollar planes de despliegue sobre el.
- Sus librerÃas de JSF, y los conectores SCA con Spring.
Si desarrollas Java sobre Eclipse, con los productos de Oracle detrás (SGBD y WebLogic), está bien por lo menos conocer que existe esta distro de Eclipse.
Tomcat es un servidor Java de módulos web, es decir, implementa la capacidad de desplegar y servir módulos web basados en las tecnologÃas JSP y Servlets.
Vamos a instalarlo en nuestro Debian Etch.
Read the rest of this entry »