Mostrando entradas con la etiqueta Seam-Gen. Mostrar todas las entradas
Mostrando entradas con la etiqueta Seam-Gen. Mostrar todas las entradas

lunes, 7 de julio de 2008

@SuppressWarnings("serial")

Esta anotación se utiliza para evitar un error en tiempo de compilación al implementar la interfaz java.io.Serializable y no tiene el campo llamado serialVersionUI.
Basta con añadir la línea SupressWarnings @ ( serial) antes de que su definición de clase.

miércoles, 2 de julio de 2008

@SuppressWarnings("deprecation")

Esta anotación le indica al compilador para reprimir advertencias específicas que, de otro modo, genera.

Por ejemplo:
Cuando usamos java.util.Date fechaHasta = new java.util.Date("12/31/2099");
Esta clase esta obsoleta ypara evitar que salga el warning se le pone la anotación @SuppressWarnings("deprecation") y listo

jueves, 12 de junio de 2008

Conversation y Long running conversation

Hay que distiguir entre estos dos conceptos:
  • Conversation-->es una unidad de trabajo desde el punto de vista del usuario. Tal vez abarcan varias interacciones con el usuario, varias solicitudes, varios de bases de datos y transacciones. Pero para el usuario, una conversación resuelve un solo problema.
    Una conversación tiene estado asociado con "lo que el usuario está haciendo ahora, en esta ventana". Un único usuario puede tener múltiples conversaciones en curso en cualquier momento, por lo general en múltiples ventanas. La conversación contexto nos permite asegurar que el estado de las diferentes conversaciones no chocar y provocar errores.
  • Long-running conversation-->unicamente la 2ª mantiene el estado entre diferentes peticiones a lo largo de la realización de la tarea (task).
Link interesante:
http://www.redhat.com/docs/manuals/jboss/jboss-eap-4.2/doc/seam/Seam_Reference_Guide/index.html

miércoles, 11 de junio de 2008

@RaiseEvent Seam,@Observer

@RaiseEvent-->Inicia un evento en tiempo de ejecución o declara el código que se debe ejecutar al iniciar un evento.

  • anotacion para observar un evento @Observer("nombreEvento")
  • anotación para lanzar un evento @RaiseEvent("nombreEvento")
Por ejemplo:
Tenemos un método:

@RaiseEvent("nuevaEmpProductora")
public String actionNew(){
//código
}

Yen la misma clase o en otra clase de la aplicación ponemos :

@Observer("nuevaEmpProductora")
public String completarCampos(){
//código
}

El @Observer esta esperando que se lance un evento con el nombre que el tiene y lo ejecuta automaticamente.

@In y @Out Seam

@In
es para inyectar componentes de la aplicación en el componente actual.
La anotación @In puede recibir valores:
  • create=true/false que indica si se crea el componente en caso de que no exista (o lo que es lo mismo en caso de que Seam no lo haya creado en una petición anterior),.
  • required=true/false indicando si el componente debe estar creado con anterioridad, en caso de que no exista la aplicación ha fallado y debería lanzarse una excepción.
  • y los relacionados con el scope y el value que son el ámbito y el nombre del componente.

@Out
es para "outyectar" componentes, o dicho de otra forma inyectar hacia fuera y de ahí el término biyección que utiliza Seam.
La anotación @Out puede recibir valores:
  • required=true/false.
  • scope=relacionado con el ámbito.
  • value=relaciona con el nombre del contexto

martes, 27 de mayo de 2008

Inyectar un bean en otro bean con Annotations

Ejemplo de una inyección

@In(create=true)
AdminDireccionController adminDireccionController;

Ejemplo de otra forma de inyección:


@In(value = "#{adminDireccionController}")
private AdminDireccionController adminDireccionController;

Un caso práctico:

Cuando intente inyectar un bean en otro me daba un error:

ERROR org.jboss.seam.jsf.SeamPhaseListener.beforePhase(120) - uncaught exception
javax.el.ELException: javax.el.ELException: org.jboss.seam.NoConversationException: no long-running conversation for @Conversational bean: adminTerceroController

Tuve que poner en el controller1 que voy a inyectar la anotación @Begin en el primer método que utilizaba el otro controller2 ya que mi controler1 era de ámbito conversation para que se inicie la longrunnigconversation

viernes, 23 de mayo de 2008

Identity

El componente org.jboss.seam.security.Identity tiene las anotaciones necesarias para ser un componente pre-built, es decir un componente que siempre lo tendrás disponible con el framework de Seam cuando arranques tu aplicación, de hecho se ve la inicialización en consola. Se puede apreciar http://www.redhat.com/docs/manuals/jboss/jboss-eap-4.3/doc/seam/api/org/jboss/seam/security/Identity.html que es un componente de session y que representa la identidad del usuario este viene a concretarse en nuestra aplicación a través del nombreUsuario y clave (más o menos aunque éste se lo han currado con algunas propiedades más). Básicamente se utiliza para utilizarlo en el formulario del login que una vez que se hace click en el boton se llama al componente Authenticator que lleva inyectado el Identity. En dicho método de registro lo más importante es aplicar rol (o roles de usuario ) al componente identity, y en función de dichos roles nuestra aplicación (y sus componentes) permitirán o no ciertas acciones de usuario (una vez inyectado el componente identity en el componente correspondiente que necesita hacer la validación de usuario y rol)

domingo, 13 de abril de 2008

Bijection

Para entender el funcionamiento básico de JBoss Seam debes familiarizarte con dos conceptos: Contexto y Componente.

Un componente es un objeto con estado (normalmente stateful session beans). Una instancia de un componente vive en un contexto y se le asigna un nombre en dicho contexto.
Para asociar la instancia de un componente al nombre de dicho componente en un contexto Seam proporciona el mecanismo de Bijection

          Bijection = Injection + Outjection

El mecanismo de injection permite a un componente A obtener de un contexto una referencia a una
instancia de un componente B, haciendo que el contenedor de aplicaciones ”inyecte” el componente B en una variable del componente A.
El mecanismo de outjection permite que un componente B esté disponible en un contexto para poder ser inyectado en un componente A.
Es decir, mediante outjection se toma una instancia de un componente y se deposita en un contexto
y mediante injection se toma una instancia de un componente de un contexto y se asocia a una
variable de otro componente.

A diferencia del mecanismo de Injection, el mecanismo de Bijection es:

  • contextual: Es usada para asociar componentes con estado desde diferentes contextos.
  • bidireccional: Los componentes pueden ser depositados en el contexto o tomados de él.
  • dinámico: Como los valores de las variables de los contextos cambian con el tiempo y los
    componentes tienen un estado definido, la bijection sucede cada vez que el componente es
    invocado.

Las conversaciones con SEAM

Definición:

Se puede entender por una conversación en Seam algo muy parecido de lo que hacemos cuando conversamos entre personas.
Existe un lugar (AplicationContext), un tiempo (SessionContext) y después una serie de objetos implicados en la conversación. Entre los objetos implicados en la conversación se encuentra el usuario, que participa a través de eventos, de tipo:

  • JSF
  • jBMP
  • Seam page actions
  • Seam component-drive events


Las clases implicadas son:
org.jboss.seam.core.ConversationEntry
org.jboss.seam.core.ConversationList
org.jboss.seam.core.Manager

Estos datos los he cogido del blog http://enjava.blogspot.com,que es de mi profesor Juan Antonio,un maestro en esto del j2ee.(que pelota no?)
Gracias por compartir tus conocimientos!!!!!

jueves, 3 de abril de 2008

Annotations (Seguimo utilizando JBoss + Seam-gen)

En las etiquetas de persistencias hay: (estas solamente las lees el EntityManager)

  1. @Entity en la definición clase .(se utiliza para las transaciones)
  2. @Id en la definición de campo que hará de identificador.(se utiliza para las transaciones)
  3. @Column para decir que el campo /propieda es persistente aunque sino lo ponemos por el mero hecho de estar en una entidad persisten se considera.
  4. @Trasient,si queremos que un componente de la clase no sea persistente se le pone la etiqueta .
  5. @ManyToMany(mappedBy="nombre clases relacionar"),son para implementar las relacion mucho a muchos
  6. OneToMany(mappedBy="nombre clases relacionar"),. son para las relaciones uno a mucho.
  7. @OrderBy("nombre del campo a ordenar").
  8. @Scope(CONVERSATION) esto es para decir que el ámbito es de tipo conversacional .esto es una solicitud en los términos de J2EE.Si se coloca un objeto en el período de sesiones los usuarios que estará disponible en todas las páginas afectadas, el usuario formula.


JBOSS + Seam-gen Empezando nuevos proyectos

Si estamos utilizando el framework jboss-seam dentro de esto tenemos una utilizad para generar proyectos.

Dentro de la carpeta jboss-seam/seam-gen/tenemos un archivo llamado build.xml ,lo cogemos y lo arrastramos a la ventana Ant(pluging de eclipse para lanzar tareas).
Lanzamos la tarea seam-gen>reset para resetear la información del archivo seam-gen/build.properties que se utilizará en la generación de la aplicación nueva.


Lanzamos la tarea seam-gen>setup para configurar la información del archivo seam-gen/build.properties:

Nos irá saliendo una ventanitas que tendremos que meter la siguiente información:

  • Directorio de workspace: nuestro directorio desde c: al workspace.
  • Directorio de jboss: nuestro directorio desde c: al servidor jboss.
  • Nombre del proyecto.
  • Richfaces skin:blueSky (este sale por defecto).
  • Ear o war project: ear .
  • El package de nuestra aplicación.
  • El package de nuestros EJBs.
  • El package de nuestros tests.
  • Tipo de Base de datos.
  • Hibernate dialect: org.hibernate.dialect.MySQLDialect .
  • Path a la libreria de mysql: nuestro directorio desde c: al jar de mysql: mysql-connector-java-5.0.3-bin.jar
  • Jdbc driver: com.mysql.jdbc.Driver .
  • Jdbc url: jdbc:mysql://localhost/delicious?createDatabaseIfNotExist=true
    user database,clave database,database name.
  • Are you working with tables that already exist ...:n .
  • Do you want to drop and recreate the database ...: y .
  • Enter your icefaces directory: dejar este campo vacio.

Ya tenemos creado las propiedades de nuesta proyecto nuevo

Lanzamos la tarea seam-gen>new-project para generar el proyecto nuevo en el workspace indicado anteriormente y lo abrimos con eclipse.File>new project>java project>create project from existing source>seleccionamos nuestro proyecto en el workspace y le ponemos de nombre al proyecto.


Localizamos el archivo de ant:build.xml de nuestro nuevo proyecto y lo arrastramos a la ventanita de Ant, y a continuación lanzamos la tarea deploy.
Arrancamos nuestro jboss a través de la ventanita servers de nuestro eclipse. Seleccionamos y click en start y cuando acabe de arrancar la aplicación podemos verla en el navegador en la dirección: http://localhost:8080/nombre proyecto dandole al deploy del Ant de nuestro proyecto o al explode(esto esta explicado la diferencia en otro apartado)

Para crearnos las clases(entidades) utilizamos new-entity del archivo build.xml de seam-gen y se nos aparecera 3 ventanitas :

  • enter the entity class name: nombre de la entidad a crear.
  • enter the master page name: la pagina que va a hacer el listado de objetos de esa entidad
  • enter the detail page name: detalle de esos objetos.

Enlas clase que se crean se ven los import de las etiquetas del api de persistencia. Así como un validador de HIbernate: org.hibernate.validator.Length .

Links interesantes de Seam-gem

seam-gen: seam generator
¿qué es seam? http://seamcity.madeinxpain.com/archives/31
biyection: http://seamcity.madeinxpain.com/archives/28
conversaciones: http://seamcity.madeinxpain.com/archives/29
configuración de seam: http://seamcity.madeinxpain.com/archives/30
programación orientada a aspectos: http://ejemplos-seam.blogspot.com/2007/07/crear-estadisticas-en-seam-con.html

lunes, 31 de marzo de 2008

Proyectos con JBoss y Seam-gen.ERROR al ejecutar

Me ha ocurrido un error mientras ejecutaba mi proyecto,debido a que ejecute las tareas deploy y explode.
Para ello explico como solucionar este error:

El archivo buil.xml tiene dos tareas:
  1. Una de desarrollo(explode)-->que te crea un directorio ear
  2. Una de produccion(deploy)-->que te crea el archivo.ear

Si ejecutamos explode y luego deploy puede darnos un error IOException puesto que estas dos tareas son incompatible,o ejecutas la tarea en modo desarrollo o en modo produccion.

Para solventar este error,hay que para el servidor,hacer un undeploy y unexplode. Y luego ejecutar la aplicacion con una sola de estas tareas.

lunes, 24 de marzo de 2008

SEAM - GEN

Es un framework que facilita el desarrollo con el JB3.Y estandariza la vista JSF y en el modelo los EJB.
Con esta herramienta tenemos varias opciones:
  • setup: Sirve para configurar el proyecto. Te pregunta entre otras cosas el directorio de instalación de JBoss, si quieres desplegar un archivo war (sin EJBs) o un ear (con EJBs), el nombre del paquete donde irán las clases, y parámetros de la conexión con la base de datos.
  • new-project: Crea un proyecto para eclipse con todas las dependencias y la configuración básica a partir de los datos proporcionados a través del setup.
  • update-project: Actualiza el proyecto con las últimas dependencias.
  • delete-project: borra el proyecto
  • deploy: Despliega el proyecto y el datasource en JBoss
  • undeploy: Replega el proyecto y el datasource.
  • explode: Desplega el proyecto y el datasource en JBoss como una estructura de ficheros, sin empaquetar.
  • restart: Resetea el proyectodesplegado con ”explode”
  • unexplode: Replega el proyecto y el datasource desplegado con ”explode”
  • new-action: Crea un nuevo Stateless Session Bean con su correspondiente interface y sus anotaciones.
  • new-form: Crea un nuevo Stateful Session Bean con su correspondiente interface y sus anotaciones.
  • new-conversation: Crea un nuevo Stateful Session Bean con su correspondiente interface y sus anotaciones. Añade anotaciones y esqueletos de métodos para trabajar con Tasks. También crea una clase de Test que puede usarse para simular el ciclo de petición/respuesta de JSF.
  • new-entity: Crea un nuevo Entity Bean con sus anotaciones.
  • generate-entities: Genera Entity Beans a partir de un modelo existente en la base de datos

lunes, 10 de marzo de 2008

JSF

JSF(JavaServer Faces)--> es un framework de desarrollo basado en el patrón MVC (Modelo Vista Controlador).
La tecnología JSF ofrece una clara separación entre el comportamiento y la presentación de la aplicación.
Al igual que Struts, JSF pretende normalizar y estandarizar el desarrollo de aplicaciones web.
Hay que tener en cuenta JSF es posterior a Struts, y por lo tanto se a nutrido de la experiencia de este, mejorando algunas sus deficiencias.
JSF no puede competir en madurez con Struts (en este punto Struts es claro ganador), pero si puede ser una opción muy recomendable para nuevos desarrollos, sobre todo si todavía no tenemos experiencia con Struts.


Algunos manuales:
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSFPage5.html
http://www.programacion.com/java/tutorial/jsf_intro/5/

JSF incorpora APIs para el desarrollo de interfaz de usuario.
API:
http://java.sun.com/javaee/javaserverfaces/1.1/docs/api/index.html

martes, 29 de enero de 2008

Crear proyecto con Seam-Gen

Abrimos el proyecto de jboss y nos vamos a la carpeta /seam-gen/ y arrastramos el built.xml dentro de ant,una vez hecho esto desplegamos y le damos a reset,luego a setup y se nos abrira una ventania donde vamos a introducir:

  • Introducir workspace
  • Introducir dirección del servidor JBoss
  • Introducir nombre del proyecto
  • Color de la paleta
  • EAR (para el uso EJB)
  • Nombre del paquete del proyexto
  • Nombre del paquete del UI
  • Nombre del paquete de los test
  • TipoBase de Datos (se recomienda hsql por su facilidad de uso)
  • Nombre del directorio de la base de datos
  • Libreria de la base de datos
  • Conexion con la base de datos (defecto)
  • Ruta URL donde se conecte la Base de Datos
  • Nombre del root
  • Contraseña del root
  • Nombre de la Base de Datos
  • Pregunta si estan las tablas creadas
  • Cada vez que arranque la BD cree que las tablas.
  • Implementación (dejar en blanco)

Luego le damos a new project y esto creará el proyecto con las características antes metida en el workspace.

Al usar la opción new-project se crea un nuevo proyecto con una estructura de directorios que a primera vista parece algo compleja. Sin embargo vamos a ver como cada carpeta tiene una función o definida.

  • bootstrap: Contiene el JBoss Embeddable EJB 3.0 container, para poder desplegar EJBs fuera del servidor de aplicaciones.
  • classes: Contienen los archivos de bytecodes (.class) de los componentes definidos por el desarrollador.
  • dist: Contiene los archivos empaquetados (ear, war, jar) que serán desplegados en el servidor de aplicaciones.
  • exploded-archives: Contiene la estructura de directorios que se puede desplegar directamente en el servidor de aplicaciones.
  • lib: Contiene todas las librerías(.jar) con las dependencias necesarias para la compilación y ejecución de la apliación.
  • nbproject: Contiene los archivos necesarios para trabajar en el proyecto con netbeans.
  • resources: Contiene todos los archivos de configuración.
  • src: Contiene el código fuente de los componentes definidos por el desarrollador, separados en tres bloques: entidades, acciones y test.
  • test-build: Esta carpeta está destinada a almacenar los test de integración.
  • view: Contiene todos los elementos relativos a la vista, como archivos css, imágenes, archivos xhtml…

Para ver este proyecto en el ecplise le damos a new proyect java y le damos a crear desde código existente le ponemos el mismo nombre q tiene el proyecto elegido y ya lo tenemos en el ecplise.

Ahora para crear una entidad en ese proyecto creado le damos al built del seam-gen y pinchamos en new entity :

  • nos pide el nombre de la clase
  • list->en la página para lista los datos
  • details->en la página para editar los datos

Desde la url http:// localhost:808 / nombreProyectoCreado si le damos a nombreEntidadList podemos añadir datos.