Java EE - instructivo

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 + ".";
    }
}


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();
        }
    }
}

Logger log4net en C# (para una aplicacion de escritorio)

Ejemplo de un Rolling log file appender: en este ejemplo, se guarda el log en un archivo de texto, con tamaño máximo de 10Mb (atributo: maximumFileSize).

Cuando se llega al tamaño máximo se sobreescribe el archivo, dejando hasta 5 archivos de backup (atributo: maxSizeRollBackups)

1. Descargar las dll's de log4j desde esta ubicación:

http://apache.mirrors.pair.com//logging/log4net/binaries/log4net-1.2.13-bin-newkey.zip
(http://logging.apache.org/log4net/download_log4net.cgi)

2. Agregar una referencia al archivo log4net.dll

3. En App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

  <log4net>
    <root>
      <level value="ALL" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="c:\log\MySampleLogFile.log" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="5" />
      <maximumFileSize value="10MB" />
      <staticLogFileName value="true" />
      <filter type="log4net.Filter.LoggerMatchFilter">
        <loggerToMatch value="Amazon" />
        <acceptOnMatch value="false" />
      </filter>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
      </layout>
    </appender>
  </log4net>

</configuration>


4. Ejemplo de uso:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using log4net;
using log4net.Config;

namespace log1
{
    class Program
    {
        private static readonly ILog logger = LogManager.GetLogger(typeof(Program));


        static void Main(string[] args)
        {
            log4net.Config.XmlConfigurator.Configure();        

            for (int i = 0; i < 100; i++)
            {
                logger.Debug("Log de debug");
                logger.Info("Log informativo");
                logger.Warn("Log de warning");
                logger.Error("Log de error");
                logger.Fatal("Log de error fatal");
            }
        }
    }
}