Java EE
Pasos para crear un EJB Stateless con Web Service:
1. Crear Enterprise Application:
File / New Project... -> Java EE -> Enterprise application (desmarcar Create EJB module y Create Web Application Module)
2. Crear EJB Module
File / New Project... -> Java EE -> EJB Module
Elegir el enterprise application creado en el paso 1, y GlassFish como servidor
3. Crear aplicación java para contener las interfaces Remotas
File / New Project... -> Java -> Java Application
(Desmarcar la opción Create Main Class)
[TODAVIA NO PONER EL CODIGO DE LA INTERFAZ, 1RO CREAR EL SESSION BEAN, Y VINCULARLO CON LO CREADO EN EL PASO 3]
4. Crear un Stateless Session Bean
Click derecho sobre el package del EJB creado en el paso 2, New / Session Bean...
Marcar Stateless
Definir el nombre del package (ej, org.empresa.prueba)
Elegir como Remote in Project: Interfaces (o como se nombró en el paso 3)
Agregar este código:
package com.paquete1.interfaces;
import javax.ejb.Stateless;
@Stateless
public class SessionBean1 implements Temperatura {
@Override
public int obtenerTemperatura()
{
return 23;
}
}
5. Este es el código de la interfaz:
@Remote
public interface Temperatura {
public int obtenerTemperatura();
}
6. Crear el Cliente Remoto:
- Crear una aplicación java y marcar la opción Create Main Class
- Sobre la carpeta Libraries, agregar el JAR gf-client.jar que está en c:\glassfish3\glassfish\lib
- Sobre la carpeta Libraries, Add Project y luego seleccionar la ubicacion del proyecto de interfaz, creado en el punto 3
Agregar este código en el cliente remoto:
package cliente;
import org.empresa.prueba.Temperatura;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class Cliente {
public static void main(String[] args) throws NamingException {
try {
Properties prop = new Properties();
prop.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
prop.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
InitialContext ctx = new InitialContext(prop);
Temperatura temp = (Temperatura)ctx.lookup("java:global/EnterpriseApplication1/EJBModule1/SessionBean1");
int t = temp.obtenerTemperatura();
System.out.println("Temperatura: " + t);
} catch (Exception e)
{
System.out.println("error!");
}
}
}
7. Asegurarse que está corriendo GlassFish
8. Botón derecho sobre el Enterprise Application / Deploy
[SI NO FUNCIONA EL DEPLOY, verificar en la ficha "services" en netbeans, que no haya ninguna conexión rota a Java DB]
9. Seleccionar el proyecto del cliente remoto, y luego poner play [el PLAY se ejecuta siempre sobre lo que esté seleccionado. Si se elije el EBJ por ej, y se da PLAY, da error!]
PASOS PARA CONVERTIR EL SESSION BEAN EN UN WEBSERVICE
1. Cambiar el código del session bean para que quede así:
package org.empresa.prueba;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService;
@Stateless
@WebService
public class SessionBean1 implements Temperatura {
@Override
public int obtenerTemperatura()
{
return 34;
}
@WebMethod
public String sayHello(String name) {
return "HELLO!!";
}
}
2. Hacer deploy del enterprise application.
3. Para testear el webservice:
abrir el admin de GlassFish (http://localhost:4848)
click en Applications
click en el Enterprise Application que corresponda
buscar el nombre del EJB y click en View Endpoint
hacer click en la url que dice Tester
4. SI SE HACEN CAMBIOS, HAY QUE HACER DEPLOY DEL ENTERPRISE APPLICATION, SI SE HACE SOLO DEL MODULO EJB, DA ERROR!!
CLIENTE DEL WEBSERVICE
1. Crear una clase java para el webservice:
package cliente;
import javax.jws.WebService;
import javax.jws.WebMethod;
@WebService
public class Hello {
private String message = new String("Hello, ");
public void Hello() {
}
@WebMethod
public String sayHello(String name) {
return message + name + ".";
}
}
1. Crear Enterprise Application:
File / New Project... -> Java EE -> Enterprise application (desmarcar Create EJB module y Create Web Application Module)
2. Crear EJB Module
File / New Project... -> Java EE -> EJB Module
Elegir el enterprise application creado en el paso 1, y GlassFish como servidor
3. Crear aplicación java para contener las interfaces Remotas
File / New Project... -> Java -> Java Application
(Desmarcar la opción Create Main Class)
[TODAVIA NO PONER EL CODIGO DE LA INTERFAZ, 1RO CREAR EL SESSION BEAN, Y VINCULARLO CON LO CREADO EN EL PASO 3]
4. Crear un Stateless Session Bean
Click derecho sobre el package del EJB creado en el paso 2, New / Session Bean...
Marcar Stateless
Definir el nombre del package (ej, org.empresa.prueba)
Elegir como Remote in Project: Interfaces (o como se nombró en el paso 3)
Agregar este código:
package com.paquete1.interfaces;
import javax.ejb.Stateless;
@Stateless
public class SessionBean1 implements Temperatura {
@Override
public int obtenerTemperatura()
{
return 23;
}
}
5. Este es el código de la interfaz:
@Remote
public interface Temperatura {
public int obtenerTemperatura();
}
6. Crear el Cliente Remoto:
- Crear una aplicación java y marcar la opción Create Main Class
- Sobre la carpeta Libraries, agregar el JAR gf-client.jar que está en c:\glassfish3\glassfish\lib
- Sobre la carpeta Libraries, Add Project y luego seleccionar la ubicacion del proyecto de interfaz, creado en el punto 3
Agregar este código en el cliente remoto:
package cliente;
import org.empresa.prueba.Temperatura;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class Cliente {
public static void main(String[] args) throws NamingException {
try {
Properties prop = new Properties();
prop.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
prop.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
InitialContext ctx = new InitialContext(prop);
Temperatura temp = (Temperatura)ctx.lookup("java:global/EnterpriseApplication1/EJBModule1/SessionBean1");
int t = temp.obtenerTemperatura();
System.out.println("Temperatura: " + t);
} catch (Exception e)
{
System.out.println("error!");
}
}
}
7. Asegurarse que está corriendo GlassFish
8. Botón derecho sobre el Enterprise Application / Deploy
[SI NO FUNCIONA EL DEPLOY, verificar en la ficha "services" en netbeans, que no haya ninguna conexión rota a Java DB]
9. Seleccionar el proyecto del cliente remoto, y luego poner play [el PLAY se ejecuta siempre sobre lo que esté seleccionado. Si se elije el EBJ por ej, y se da PLAY, da error!]
PASOS PARA CONVERTIR EL SESSION BEAN EN UN WEBSERVICE
1. Cambiar el código del session bean para que quede así:
package org.empresa.prueba;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService;
@Stateless
@WebService
public class SessionBean1 implements Temperatura {
@Override
public int obtenerTemperatura()
{
return 34;
}
@WebMethod
public String sayHello(String name) {
return "HELLO!!";
}
}
2. Hacer deploy del enterprise application.
3. Para testear el webservice:
abrir el admin de GlassFish (http://localhost:4848)
click en Applications
click en el Enterprise Application que corresponda
buscar el nombre del EJB y click en View Endpoint
hacer click en la url que dice Tester
4. SI SE HACEN CAMBIOS, HAY QUE HACER DEPLOY DEL ENTERPRISE APPLICATION, SI SE HACE SOLO DEL MODULO EJB, DA ERROR!!
CLIENTE DEL WEBSERVICE
1. Crear una clase java para el webservice:
package cliente;
import javax.jws.WebService;
import javax.jws.WebMethod;
@WebService
public class Hello {
private String message = new String("Hello, ");
public void Hello() {
}
@WebMethod
public String sayHello(String name) {
return message + name + ".";
}
}
2. Crear el cliente:
package cliente;
import javax.naming.NamingException;
import javax.xml.ws.WebServiceRef;
public class Cliente {
@WebServiceRef(wsdlLocation="http://localhost:8080/SessionBean1Service/SessionBean1?wsdl")
static Hello service;
public static void main(String[] args) throws NamingException {
try {
Hello h = new Hello();
String s = h.sayHello("abc");
System.out.println(s);
} catch(Exception e) {
e.printStackTrace();
}
}
}
import javax.naming.NamingException;
import javax.xml.ws.WebServiceRef;
public class Cliente {
@WebServiceRef(wsdlLocation="http://localhost:8080/SessionBean1Service/SessionBean1?wsdl")
static Hello service;
public static void main(String[] args) throws NamingException {
try {
Hello h = new Hello();
String s = h.sayHello("abc");
System.out.println(s);
} catch(Exception e) {
e.printStackTrace();
}
}
}

