lunes, 7 de julio de 2008
@SuppressWarnings("serial")
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")
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
- 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).
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
- anotacion para observar un evento @Observer("nombreEvento")
- anotación para lanzar un evento @RaiseEvent("nombreEvento")
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
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
@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
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
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)
- @Entity en la definición clase .(se utiliza para las transaciones)
- @Id en la definición de campo que hará de identificador.(se utiliza para las transaciones)
- @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.
- @Trasient,si queremos que un componente de la clase no sea persistente se le pone la etiqueta .
- @ManyToMany(mappedBy="nombre clases relacionar"),son para implementar las relacion mucho a muchos
- OneToMany(mappedBy="nombre clases relacionar"),. son para las relaciones uno a mucho.
- @OrderBy("nombre del campo a ordenar").
- @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
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
¿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
martes, 1 de abril de 2008
JBoss Seams = JSF + EJB3
- 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
Para ello explico como solucionar este error:
El archivo buil.xml tiene dos tareas:
- Una de desarrollo(explode)-->que te crea un directorio ear
- 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
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
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.