Estás en:

informaciónDESARROLLADO POR:
icono_twiter icono_linkedin icono_linkedin icono_xing

Creador y propietario de AdictosAlTrabajo.com, Director General de Autentia S.L., Ingeniero Técnico de Telecomunicaciones y Executive MBA por el Instituto de Empresa 2007. Twitter: @rcanalesmora

Autor del Libro: Informática profesional, las reglas no escritas para triunfar en la empresa

Puedes consultar mi CV y alguna de mis primeras aplicaciones (de los 90) aquí

Fecha de publicación del tutorial: 2003-06-07
Tutorial visitado 28.304 veces28.304
Descargar el tutorial en PDF


Regístrate para votar
Share |

Creación y Despliegue de un EJB básico en Orión

He estado probando el servidor de aplicaciones Orion y la verdad es que es muy sencillito.

Una de las principales ventajas de las que me han hablado, es que si te lo montas en local y respetas la estructura de ficheros que te propone, puedes crear servlets y EJBs y probarlos sin necesidad de desplegarlos.

Lo que he hecho ha sido seguir la guía para la creación de un EJB básico y me he quedado francamente impresionado porque, y es una de las pocas veces en mi vida, que siguiendo las instrucciones y sin trucos y dar por hecho que sabes ademas 150 millones de cosas más, he conseguido poner el sistema en marcha en menos de una hora

Vamos a ir pasito a pasito:

Primero nos lo descargamos y lo instalamos. Al instalarlo tenemos que ejecutar un comando para introducir la password

 

 
Instalar el JSDK de JAVA
Asegurarse de tener la variable de entorno JAVA_HOME apuntando al directorio de instalación de Java
Descargarse ORION de www.orionserver.com
Descomprimir el fichero en un directorio
Ejecutar el comando (añadir password)      Java –jar orion.jar –install
Arrancar el servidor con      Java –jar orion.jar

Para probar instalación, desde una navegador, atacar al servidor.

El puerto por defecto es el 80, si se desea cambia, ir al fichero 
\orion\config\default-web-site.xml

y cambiar el parámetro
<web-site host="[ALL]" port="8090" display-name="Default Orion WebSite">

La estructura de ficheros que vamos a construir es:

 

Creamos el interfaz de nuestro EJB (ejemplorc.java)

 

package ejemplorc.ejb;
import java.rmi.*;
import javax.ejb.*;
public interface ejemplorc extends EJBObject
{
   public String muestraMensaje() throws RemoteException;
}
Creeamos el Bean (ejemplorcBean.java)

package ejemplorc.ejb;

import java.rmi.*;
import javax.ejb.*;

public class ejemplorcBean extends Object implements SessionBean {

public String muestraMensaje() {
return "<h1>Este es el mensaje de Roberto</h1>";
}

public void ejbCreate()
throws EJBException, RemoteException {
}

public void ejbActivate()
throws EJBException, RemoteException {
}

public void ejbPassivate()
throws EJBException, RemoteException {
}

public void ejbRemove()
throws EJBException, RemoteException {
}

public void setSessionContext(SessionContext context)
throws EJBException, RemoteException {
}

}

Creamos el Interfaz Home (ejemplorcHome.java)

package ejemplorc.ejb;

import java.rmi.*;
import javax.ejb.*;

public interface ejemplorcHome extends EJBHome 

{
public ejemplorc create() throws CreateException, RemoteException;
}

 

Creamos el descriptor del EJB (ejb-jar.xml) 

<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd">

<ejb-jar>
<description></description>
<enterprise-beans>
<session>
<display-name>El ejemplorc.ejb.ejemplorc Bean de Sesion</display-name>
<ejb-name>ejemplorc.ejb.ejemplorc</ejb-name>
<home>ejemplorc.ejb.ejemplorcHome</home>
<remote>ejemplorc.ejb.ejemplorc</remote>
<ejb-class>ejemplorc.ejb.ejemplorcBean</ejb-class>
<session-type>Stateless</session-type>
</session>
</enterprise-beans>

<assembly-descriptor>
<security-role>
<description>Users</description>
<role-name>users</role-name>
</security-role>
</assembly-descriptor>

</ejb-jar>

Creamos el Servlet que atacará al EJB (aunque ya veremos en otra ocasión que no es el modo más adecuado). Advertencia: Usad este código para probar que funciona .... para nada más .... porque no es muy adecuado el modo en que se crea el objeto (compraos un libro de EJB´s)

(ejemplorcServlet.java)

package ejemplorc.web;

import java.io.IOException;
import java.util.Date;
import java.util.Properties;
import javax.naming.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.rmi.PortableRemoteObject;


import ejemplorc.ejb.*;



public class ejemplorcServlet extends HttpServlet 
{

// constructor
public ejemplorcServlet() 
{
super();
trace("<init>");
}

// A reference to the remote `Hello' object
protected ejemplorc ejemplo;

// Initializes this servlet
public void init(ServletConfig config) throws ServletException 
{
super.init(config);
trace("init");

// Get the initial JNDI context using our settings
Context context;
try 
{
context = new InitialContext();
}
catch (Throwable exception) 
{
throw new ServletException("Unable to get initial JNDI context: " + exception.toString());
}

// Get a reference to the Hello home interface
ejemplorcHome miHome;

try 
{
Object boundObject = context.lookup("java:comp/env/ejb/ejemplorcHome");
miHome = (ejemplorcHome)PortableRemoteObject.narrow(boundObject,ejemplorcHome.class);
}
catch (Throwable exception) 
{
throw new ServletException("Unable to get home interface: " + exception.toString());
}

// Get a reference to a Hello instance
try 
{
ejemplo = miHome.create();
}
catch (Throwable exception) 
{
throw new ServletException("Unable to create Hello instance: " + exception.toString());
}

// Insanity check: Make sure we have a valid reference
if (ejemplo == null) {
throw new ServletException( "Unable to create Hello instance, create() returned null");
}
}

// Handles the HTTP GET request
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
trace("doGet");

ServletOutputStream out = response.getOutputStream();

response.setContentType("text/html");

// Get the answer from the bean
String answer;
try {
answer = ejemplo.muestraMensaje();
}
catch (Throwable exception) {
out.println("<HTML><BODY bgcolor=\"#FFFFFF\">");
out.println("Time stamp: " + new Date().toString());
out.println("<BR>Hello type: " + ejemplo.getClass().getName());
out.println("Error calling the ejemplorc bean");
out.println(exception.toString());
out.println("</BODY>");
out.println("</HTML>");
return;
}

out.println("<HTML><BODY bgcolor=\"#FFFFFF\">");
out.println("Time stamp: " + new Date().toString());
out.println("<BR>Hello type: " + ejemplo.getClass().getName());
out.println("<BR>Answer: " + answer);
out.println("</BODY>");
out.println("</HTML>");
}

// Displays a trace message to System.out
private void trace(String methodName) {
System.out.print(methodName);
System.out.println("() called");
}

}

Ahora definimos la Web App (web.xml)

<?xml version="1.0"?>
<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.2//EN" "http://java.sun.com/j2ee/dtds/application_1_2.dtd">

<application>

<!-- The display-name element specifies the human-readable name of this
application. It is not used to identify the application. -->

<display-name>ejemplorc</display-name>


<!-- The EJB module. All that needs to be specified is the location of the
EJB JAR file. -->

<module>
<ejb>ejemplorc-ejb.jar</ejb>
</module>


<!-- The web module. The context-root specifies how the web-application can
be reached from a browser. The web-uri element specifies the location
of the WAR file that contains the web application. -->

<module>
<web>
<web-uri>ejemplorc-web.war</web-uri>
<context-root>/ejemplorc</context-root>
</web>
</module>

</application>

Definimos con el Build para Ant (que obviamente debemos tener instalado y la variable ANT_HOME apuntando al directorio de Instalación) (build.xml)

<?xml version="1.0"?>

<!--

Build file for 'ejemplorc', a sample J2EE application which is part of the
Orion Primer. See http://www.jollem.com/orion-primer/ for this Orion tutorial.

Version: $Revision: 4.12 $ $Date: 2001/06/27 10:36:29 $
Author: Ernst de Haan

-->

<project name="ejemplorc" default="ear" basedir=".">


<!-- ================================================================== -->
<!-- Initialization of all property settings -->
<!-- ================================================================== -->

<target name="init">
<property name="name" value="ejemplorc" />
<property name="src.dir" value="src" />
<property name="etc.dir" value="etc" />
<property name="lib.dir" value="lib" />
<property name="build.dir" value="build" />
<property name="orion.dir" value="c:/orion/orion" />
<property name="build.compiler" value="classic" />

<property name="ejb.jar" value="${orion.dir}/ejb.jar" />
<property name="jndi.jar" value="${orion.dir}/jndi.jar" />
<property name="orion.jar" value="${orion.dir}/orion.jar" />

<property name="ejb-classes.dest" value="${lib.dir}/ejb" />
<property name="web-classes.dest" value="${lib.dir}/web/WEB-INF/classes" />

<property name="ejb.classpath" value="${ejb.jar}" />
<property name="web.classpath" value="${ejb-classes.dest}:${ejb.jar}:${jndi.jar}:${orion.jar}" />

<property name="pkg-dist.name" value="${name}-pkg" />

<property name="deploy.ormi" value=""/>
<property name="deploy.username" value=""/>
<property name="deploy.password" value=""/>
</target>


<!-- ================================================================== -->
<!-- Removes all created files and directories -->
<!-- ================================================================== -->

<target name="clean" depends="init">
<delete dir="${lib.dir}" />
<delete dir="${build.dir}" />
</target>


<!-- ================================================================== -->
<!-- Makes sure the needed directory structure is in place -->
<!-- ================================================================== -->

<target name="prepare" depends="init">
<mkdir dir="${lib.dir}" />
<mkdir dir="${lib.dir}/ejb" />
<mkdir dir="${lib.dir}/ejb/META-INF" />
<mkdir dir="${lib.dir}/web" />
<mkdir dir="${lib.dir}/web/WEB-INF" />
<mkdir dir="${lib.dir}/web/WEB-INF/classes" />
<mkdir dir="${lib.dir}/j2ee" />
<mkdir dir="${lib.dir}/META-INF" />
<mkdir dir="${build.dir}" />
</target>


<!-- ================================================================== -->
<!-- Compilation of the EJB part of the application -->
<!-- ================================================================== -->

<target name="ejb-classes" depends="prepare">
<javac srcdir="${src.dir}"
destdir="${ejb-classes.dest}"
includes="java/ejemplorc/ejb/**"
classpath="${ejb.classpath}" />
</target>

<target name="ejb-meta-inf" depends="prepare">
<copy file="${etc.dir}/ejb-jar.xml"
tofile="${lib.dir}/ejb/META-INF/ejb-jar.xml" />
</target>

<target name="ejb-jar" depends="ejb-classes,ejb-meta-inf">
<jar jarfile="${build.dir}/${name}-ejb.jar"
basedir="${lib.dir}/ejb" />
</target>


<!-- ================================================================== -->
<!-- Compilation of the web part of the application -->
<!-- ================================================================== -->

<target name="web-classes" depends="prepare">
<javac srcdir="${src.dir}"
destdir="${lib.dir}/web/WEB-INF/classes"
includes="java/ejemplorc/web/**"
classpath="${web.classpath}" />
</target>

<target name="web-web-inf" depends="prepare">
<copy file="${etc.dir}/web.xml"
tofile="${lib.dir}/web/WEB-INF/web.xml" />
</target>

<target name="war" depends="web-classes,web-web-inf">
<jar jarfile="${build.dir}/${name}-web.war"
basedir="${lib.dir}/web" />
</target>


<!-- ================================================================== -->
<!-- Compilation of the complete J2EE application (both web and EJB) -->
<!-- ================================================================== -->

<target name="j2ee-meta-inf" depends="prepare">
<copy file="${etc.dir}/application.xml"
tofile="${lib.dir}/j2ee/META-INF/application.xml" />
</target>

<target name="ear" depends="ejb-jar,war,j2ee-meta-inf">
<copy file="${build.dir}/${name}-ejb.jar"
tofile="${lib.dir}/j2ee/${name}-ejb.jar" />
<copy file="${build.dir}/${name}-web.war"
tofile="${lib.dir}/j2ee/${name}-web.war" />
<jar jarfile="${build.dir}/${name}.ear"
basedir="${lib.dir}/j2ee" />
</target>


<!-- ================================================================== -->
<!-- Generates a GZip'ed tar source distribution -->
<!-- ================================================================== -->

<target name="pkg-dist" depends="prepare">

<mkdir dir="${build.dir}/${name}" />

<copy todir="${build.dir}/${name}">
<fileset dir="." includes="${src.dir}/java/**" />
<fileset dir="." includes="${etc.dir}/**" />
<fileset dir="." includes="build.xml" />
</copy>

<tar tarfile="${build.dir}/${pkg-dist.name}.tar"
basedir="${build.dir}"
includes="${name}/**" />

<gzip src="${build.dir}/${pkg-dist.name}.tar"
zipfile="${build.dir}/${pkg-dist.name}.tar.gz" />

<delete file="${build.dir}/${pkg-dist.name}.tar" />

<zip zipfile="${build.dir}/${pkg-dist.name}.zip"
basedir="${build.dir}"
includes="${name}/**" />

<delete dir="${build.dir}/${name}" />
</target>


<!-- ================================================================== -->
<!-- Generate as many files as you can! ;-) -->
<!-- ================================================================== -->

<target name="all" depends="ear,pkg-dist" />


<!-- ================================================================== -->
<!-- Deploy the application -->
<!-- ================================================================== -->

<target name="deploy" depends="all">
<java classname="com.evermind.client.orion.OrionConsoleAdmin" fork="yes">
<arg value="${deploy.ormi}" />
<arg value="${deploy.username}" />
<arg value="${deploy.password}" />
<arg value="-deploy" />
<arg value="-file" />
<arg value="${build.dir}/${name}.ear" />
<arg value="-deploymentName" />
<arg value="${name}" />
<classpath>
<pathelement location="${orion.jar}" />
<pathelement location="${ejb.jar}" />
<pathelement location="${jndi.jar}" />
</classpath>
</java>
</target>

</project>

Ir al directorio donde esta el Build.xml y ejecutar Ant.exe
Ahora damos de alta la Web App en (orion/config/default-web-site.xml)

<?xml version="1.0"?>
<!DOCTYPE application-server PUBLIC "Orion Application Server Config" "http://www.orionserver.com/dtds/application-server.dtd">

<application-server
application-directory="../applications"
deployment-directory="../application-deployments"
>
<rmi-config path="./rmi.xml" />
<!-- JMS-server config link, uncomment to activate the JMS service -->
<!-- <jms-config path="./jms.xml" /> -->
<log>
<file path="../log/server.log" />
</log>

<global-application name="default" path="application.xml" />

<global-web-app-config path="global-web-application.xml" />
<web-site path="./default-web-site.xml" />

<!-- Compiler, activate this to specify an alternative compiler such
as jikes for EJB/JSP compiling. -->
<!-- <compiler executable="jikes" classpath="/myjdkdir/jre/lib/rt.jar" /> -->

<application name="ejemplorc" path="C:\orion\ejemplorc\build\ejemplorc.ear" />

</application-server>

 
Nos generará la estructura de ficheros auxiliar y el EAR destino

 

Y decimos en el server.xml donde esta el ear

Y ya podemos comprobar el resultado

 

Orion también dispone de una consola gráfica para administrar sus ficheros de configuración. Te advierte que esta en alpha, aunque a mi no me ha roto nada.

java -jar orion.jar -console

 

 


Sobre el Autor ..


Anímate y coméntanos lo que pienses sobre este TUTORIAL:

Puedes opinar o comentar cualquier sugerencia que quieras comunicarnos sobre este tutorial; con tu ayuda, podemos ofrecerte un mejor servicio.


(Sólo para usuarios registrados)

» Registrate y accede a esta y otras ventajas «

Comentarios

  1. Christian Daniel Rio
    2009-05-06 - 06:32:28 PM

    Buenos dias soy estudiante de ing. de sistemas, estoy tratando de conectar un ejb de una aplicacion web A con otra aplicacion web B. Toy trabajando con el OAS, mi problema es solo puedo hacerlo si el usuario de configuraciòn de conexion(via rmi) es rol adminitrador. espero un comentario a mi pregunta porsiacaso le pongo el metodo que uso Hashtable env = new Hashtable(); // Standalone OC4J connection details env.put( Context.INITIAL_CONTEXT_FACTORY, "oracle.j2ee.rmi.RMIInitialContextFactory" ); //env.put( Context.SECURITY_PRINCIPAL, "oc4jadmin" );//con este todo perfet env.put( Context.SECURITY_PRINCIPAL, "prueba2" );// env.put( Context.SECURITY_CREDENTIALS, "prueba2" ); env.put(Context.PROVIDER_URL, getInitialContext());//23791//23791

  2. BoR
    2007-10-01 - 12:42:19 PM

    Hola. Desde hace tiempo sigo los tutoriales que publicáis y me parecen excelentes. Enhorabuena. No obstante en éste en particular he encontrado ciertos problemas y no he conseguido reproducirlo: - Me da la impresión de que me falta uno de los descriptores, en particular el application.xml. - Una vez informado el servidor de dónde se encuentra el EAR. Debemos pararlo y arrancarlo de nuevo? Toma los cambios en caliente?. Aprovecho para pediros alguna indicación sobre los distintos tipos de descriptores que necesitamos, o algún enlace a algún tutorial que lo explique. Los necesarios para crear y desplegar EJBs, Servlets, aplicaciones Web o J2EE. Gracias por todo.