Česky   |  Deutsch   |  English   |  Español   |  Français   |  Indonesia   |  日本語   |  한글   |  Polski   |  Português (BR)   |  Türkçe   |  中文   |  正體中文   |  Tu idioma  
PlanetNetbeans
Planet NetBeans es un rama de NetBeans relacionado con toda la Blogosphere.
diesil's java - January 06, 2009 11:17 PM
Base de datos relacionales en Java: HSQLDB y Apache Derby (Parte 1)

Hola a todos
comenzaré este año con un post que quizás para algunos sea aburrido. Base de datos relacionales 100% Java.

Ojo, no estoy diciendo que sean bases de datos orientados a objetos. Eso es otro tema. Sino, que son bases de datos relacionales (esos de Entidad-relación, tuplas, relaciones, columnas, claves foráneas, etc.) cuyo motor está hecho en Java. Por tanto, si queremos modificar algo de su funcionamiento, pues encontraremos el código en Java. No en C, ni C++, ni C#, sino en Java.

Sabemos que los drivers de tipo 4 de JDBC se conectan directamente a la base de datos usando protocolos de red en java puro. Entonces, podemos suponer que usando bases de datos en java con jdbc en java, la conexión es mucho más directa, y se accede a los datos sin intermediarios. Bueno, es solo una suposición personal.

En este post comentaré de dos RBDMS en Java muy conocidos y usados: HSQLDB y Apache Derby. Haremos ejemplos usando NetBeans 6.5, aunque también funcionará en NetBeans 6.1.

Comenzaré con el que más me gusta y más conozco:

HSQLDB

Es la continuación del proyecto HypersonicSQL desde 2001. Permite varias sentencias SQL - ANSI92.

Descargaremos la biblioteca JDBC, que a su vez también es el RDBMS, de aquí:

http://downloads.sourceforge.net/hsqldb/hsqldb_1_8_0_10.zip

(La versión utilizada en este post es la 1.8.0.10)

Solo pesa 3.6 MB

Al descomprimirlo encontraremos varias carpetas. La carpeta lib contiene el driver hsqldb.jar y este .jar es el más importante para todo el HSQLDB, ya que es el JDBC y a su vez el motor de la base de datos.

Modos de uso

HSQLDB tiene los siguientes modos de uso:

HSQLDB Server

Es un modo cliente-servidor. Es decir, de la manera común que siempre hemos visto como operan los RBDMS como Oracle, MySQL, Firebird, PostgreSQL, etc. Esto es: se ejecuta la aplicación desde cualquier host quedando en espera (servidor), y desde cualquier otro host puede acceder como cliente al servidor.

Hagamos un ejemplo: Desde una ventana de la consola del Sistema Operativo, vayamos a la carpeta que se descomprimió el contenido del archivo .zip. En mi caso es d:\proys\lib\hsqldb. (Nota: el directorio hsqldb debe contener el directorio lib para poder realizar lo siguiente) Una vez allí ejecutamos lo siguiente:



java -cp lib/hsqldb.jar org.hsqldb.Server -database.0 file:data/demo_db -dbname.0 xdb


Al ejecutar esto, la ventana de consola muestra lo siguiente:


Ya sabemos qué significa java -cp y su argumento lib/hsqldb.jar.

Pero nuestra clase org.hsqldb.Server tiene cuatro argumentos importantes. Estos argumentos son realmente dos importantes:

-database.0 file:data/demo_db: Este parámetro indica cual es la base de datos que se va a crear físicamente. Como pueden crearse varias bases de datos, debemos diferenciar cada una usando un número después del parámetro -database.. Es decir, en este caso, nuestra base de datos tiene el número 0 (-database.0). Luego con el parámetro file: se especifíca  dónde se va a ubicar físicamente el archivo de la base de datos. En este caso se creará el archivo demo_db dentro de la carpeta data. Puede ser una ruta relativa o absoluta de disco. (file:data/demo_db)

-dbname.0 xdb Indica el nombre de la base de datos. También se tiene que especificar el número de la base de datos que debe coincidir con el argumento -database. En este ejemplo, el nombre de la base de datos es xdb. Esto es que para acceder desde Java debemos indicar el nombre xdb y no el archivo físico.

Esto quiere decir que si deseamos tener otra base de datos adicional llamada clientes, debemos escribir todo esto:


java -cp lib/hsqldb.jar org.hsqldb.Server -database.0 file:data/demo_db -dbname.0 xdb  -database.1 file:data/clientes_db -dbname.1 clientes

Ahora bien, ¿cómo se accede desde java? Bien, usaremos el NetBeans, en el panel de "Prestaciones" (Ctrl+5). En el nodo "Controladores" hagamos clic derecho y seleccionamos "Nuevo controlador..."

Con esto se abrirá una ventana de diálogo "Nuevo Driver JDBC". Hacemos clic en el botón "Agregar..." y buscamos el archivo hsqldb.jar (Sí, el mismo que usamos para ejecutar nuestro servidor... como dije antes: ese mismo archivo es el motor y el driver)

Una vez seleccionado, el NetBeans encontrará la clase controladora de la base de datos:


Clic en "Aceptar". Y se agregará un nuevo elemento bajo el nodo "Controladores" llamado "HSQLDB". Hacemos clic derecho sobre este nodo creado y seleccionamos "Conectar usando..." para crear una conexión usando este controlador. Se presentará la ventana de diálogo "nueva coneixón de base de datos...". Escribimos lo siguiente:
  • nombre de usuario: sa
  • password: (nada)
  • JDBC URL: jdbc:hsqldb:hsql://localhost/xdb


Note que el nombre de la base de datos es xbd tal como lo especificamos cuando ejecutamos el servidor. Clic en Aceptar, y al mostrarse el esquema que debemos seleccionar, dejamos la opción predeterminada  "INFORMATION_SCHEMA". Se creará un nuevo nodo de conexión, y al abrirlo podemos ver su contenido. Claro, en este momento no hay ninguna tabla creada.

Pero como podemos ver, es como cualquier otra conexión a base de datos.
Desde el IDE podemos crear tablas, usando sentencias SQL.

Es posible que las tablas creadas no se visualicen en el IDE de NetBeans. Pero sí podemos ejecutar sentencias SQL DDL o DML con total normalidad:

Ahora, podemos visualizar la carpeta hsqldb/data.Vemos que se ha creado al menos dos archivos por cada base de datos. Todas nuestras sentencias DDL (create, drop, alter, etc) y DML (select, insert, update, etc) se registrarán en el archivo de extensión .script. Es decir, que podemos modificar estos archivos manualmente para crear nuestras tablas y los datos que contendrán. Para poder modificar este archivo, debemos detener la base de datos.

También podemos acceder a las tablas de la base de datos utilizando una herramienta propia del hsqldb. Regresemos nuevamente a nuestra consola y ejecutemos lo siguiente (el servidor deberá aún estar en ejecución, asi que es necesario abrir una nueva ventana de consola)

java -cp lib/hsqldb.jar org.hsqldb.util.DatabaseManager


En la ventana de diálogo "Connect" que aparece escribimos el mismo URL que escribimos párrafos arriba, el mismo usuario y nada en la contraseña. El driver y el tipo son opcionales.

Clic en OK y listo.
Este manejador de base de datos es muy interesante, simple y efectivo. No detallaré esta herramienta ya que no es el motivo de este post.

Así pues, ya tenemos el servidor, y sabemos como conectarnos con él.

¿y cómo puede conectarse desde un programa java? Pues ya se puede imaginar:

Class.forName("org.hsqldb.jdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xdb", "sa", "");

Hsqldb Web Server

Este modo es muy interesante.Todos sabemos que por seguridad de redes los firewall evitan el uso de puertos adicionales a los permitidos. Los puertos por omisión del HSQLDB Server es el  9001 y el 544. Pero HSQLDB nos da la posibilidad de usar el puerto 80 como si fuera un servidor web.

Se ejecuta de la misma manera que el modo Server, pero se usa la clase WebServer. Es decir, debe ejecutarse de la siguiente manera:

java -cp lib/hsqldb.jar org.hsqldb.WebServer -database.0 file:data/demo_db -dbname.0 xdb

Ahora el URL del JDBC es: jdbc:hsqldb:httpd://localhost/xdb

Y todo funcionará igual.

Hsqldb Servlet

Es el modo servlet, es decir, debe estar ejecutado en una aplicación web y crear un servlet desde web.xml
    <servlet>
        <servlet-name>hsqldb-servlet</servlet-name>
        <servlet-class>org.hsqldb.Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hsqldb-servlet</servlet-name>
        <url-pattern>/hsqldb/*</url-pattern>
    </servlet-mapping>
No detallaré este modo ya que es mejor usar el modo servidor y no crear una aplicación web para crear un servidor.

Modo aislado (stand-alone)

Este modo es uno de los más útiles cuando se hace aplicaciones portables. Además, este modo permite tener una aplicación con la base de datos incrustada a ella sin necesidad de instalar alguna biblioteca adicional.

No requiere un servidor, simplemente al crear una conexión JDBC, ya se creó la base de datos.

Es decir, en nuestra aplicación usaremos el mismo driver org.hsqldb.jdbcDriver y el url que usaremos será jdbc:hsqldb:file:d:/hsqldb/clientes.

Connection conn = DriverManager.getConnection("jdbc:hsqldb:file:d:/proys/lib/hsqldb/data/demo_db", "sa", "");

La misma base de datos que hemos usado en el modo servidor, web server, es también usado en el modo stand-alone, y usando el mismo driver! Solo difiere el url.

Nota: solo se debe usar un modo a la vez, o es server, web server o stand-alone. Ya que necesita de bloqueos de archivo a nivel de sistema operativo.

Modo memoria

Es un modo muy interesante para ser usado en aplicaciones demo, que no se necesita guardar la información en un archivo físico. Si no que se crea la base de datos en memoria mientras dura la conexión. Naturalmente se tendrían que crear las tablas inmediatamente después de establecer la conexión.

Solo se debe cambiar el URL a: jdbc:hsqldb:mem:clientes.

y todo sigue igual

Final parte 1

Vemos que este driver/rdbms puede ser usado en dos modos marcados: servidor (server) y aislado (stand-alone). También podemos usar la misma base de datos en ambos modos. Esto también nos puede permitir trabajar en dos modos: standalone para desarrollo, y server para producción.

Se puede usar también en Hibernate, JPA, Spring, iBatis y cualquier framework que maneje base de datos. ya que cumple con las especificaciones de JDBC.

En la segunda parte hablaremos sobre Apache Derby.

NetBeans Community Docs Blog - January 06, 2009 01:35 PM
Community-Contributed Docs Statistics

Statistics: Year 2007-08

Year 2007

Contributions- 76 (10 Months)
Unique Authors- 55
Analysis: This states that nearly every month, 8 docs were contributed to our project, and there were 5-6 authors joining the project every month..

Year 2008
Contributions- 203 (12 Months)
Unique Authors- 60
Analysis: This states that nearly every month, 17 docs were contributed to our project, and there were nearly 5 authors joining the project every month..

Comparative Study
From the above figures, one can infer that in the year 2008, there was 62.56% increase in the no. of contributions.. However, the rate of authors joining the project remained the same..

What Next?

This is your project and you are the driving force, so if you have any suggestions for betterment of this project, let us know.. We hope to see the same enthusiasm again this year, wish you good luck and thank you for your contributions till date..

Happy New Year :)

Le Funes » NetBeans - January 06, 2009 12:15 AM
Generando el SerialVersionUID de una clase desde NetBeans

Anteriormente vimos como generar el serialVersionUID de una clase mediante el comando serialver. Ahora veremos como generar el mismo valor desde NetBeans IDE haciendo uso del plugin serialVersionUID generator for netbeans 6.5. Instalación Para instalarlo tenemos que seguir unos simples pasos: Descargar el plugin desde: http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=6887 (30,5Kb solamente) Nos vamos al dialogo de Plugins ...

NetBeans Community Docs Blog - January 01, 2009 01:05 PM
NBCD Weekly Newsletter #20 (Spanish)

Últimos Documentos de la Comunidad

Trucos & Sugerencias


Aristides Villarreal Bravo

Dec 24 | Cambiar el formato de fecha de jXDatePicker

Trucos & Sugerencias

Anton Epple
Dec 24 | Create your own Platform versions

Dec 24 | Fix Navigator Mode in NetBeans Platform Applications

Dec 23 | NetBeans on USB Stick

Tutorial

Vaibhav Choudhary

Dec 26 | Getting Started with JavaFX (NB 6.1)

Noticias Especiales

Nuevo Contribuidor..
Vaibhav Choudhary es el último contribuidor del Programa NetBeans Community Docs .

Documentos JavaFX..
Hoy, James escribio en su blog acerca de la última contribución realizada por Vaibhav en Java FX, él escribio apasionadamente acerca de Java FX en su blogs. Deseando más documentos de él, así como de usted y a la comunidad de NetBeans. Rock on!!

Que es lo Nuevo..
Esta ese la última edición de nuestro Weekly Newsletters y desde Enero de 2009 en adelante, usted comenzara a recibir el Boletin Mensualmente... Por lo tanto , hemos comenzado a archivar arctículos de noticias seleccionados desde el boletin semanal publicados anteriormente al 19 y esta edición sera la última.

Esperando a todos ustedes han disfrutado de nuestra dosis semanal de últimas noticias de nuestro programa de documentos de comunidad NetBeans multilingüe y esperamos con interés con su cooperación en el año nuevo así.

Saludos de temporada


Esperando que todos ustedes hayan disfrutado nuestra dosis semanal de las últimas noticias desde nuestro Multilingual NetBeans Community Docs Program y esperamos con interés su cooperación en el Nuevo Año también.

Para finalizar, James Branam (NetBeans Community Docs Program Manager) ha escrito un special post para este programa y la comunidadand en el éxito del proyecto y un año lleno de acontecimientos, también discutiendo lo que se encuentra en el futuro..


Esta edición ha sido presentada a usted por;
Aristides Villarreal Bravo

___________________________________________________________
Available Languages: English , German, Spanish

NetBeans Community Docs Blog - December 29, 2008 07:21 PM
Year In Review: Blogs, Wikis, Evangelists and More...

So, 2 days left for New Year 2009 and everyone's in party mood, so are we. However, we want to end this year with a special review done by none-other-than James Branam, NetBeans Community Docs Program Manager.

Year 2008

2008 was a very successful year for the NetBeans Community Docs program, and I am proud to say that all of you played a role in its success. I especially would like to thank Contribution Coordinator Varun Nischal for his tremendous achievements and innovative leadership, both of which were vital factors in the growth of the program.

2008 also saw the appointment of Community Docs Evangelists, increased multi-language documentation, the publication of a regular newsletter, and a blog dedicated to the program. 2008 was also a good year for the program in terms of recognition. It was highlighted in several articles and as part of NetBeans 10th Birthday celebration.

Year 2009

2009 is nearly here, and the program will continue to evolve. We want to take the existing momentum and expand the program to reach a wider range of contributors. We also want to increase focusing on quality of contributions and adherence to existing style guides. Another challenge we look forward to engaging is creating a more purposeful documentation wish list and creating specialists for certain types of documentation.

On April 1, a new Contribution Coordinator will take the reins: Kristian Rink. A long time participant in the program, Kristian will bring new ideas to the program, building on the strong foundation that Amit Kumar Saha and Varun Nischal have established.

Happy New Year

I look forward to the new year and the challenges it will certainly bring. More importantly, I am proud to be working with such fine people as you all are, and I wish you a happy, healthy, and successful 2009.

Thank You!

NetBeans Community Docs Blog - December 29, 2008 07:08 PM
NBCD Weekly Newsletter #20

Latest Community Docs

Tips & Tricks


Aristides Villarreal Bravo

Dec 24 | Cambiar el formato de fecha de jXDatePicker

Tips & Tricks

Anton Epple
Dec 24 | Create your own Platform versions

Dec 24 | Fix Navigator Mode in NetBeans Platform Applications

Dec 23 | NetBeans on USB Stick

Tutorial

Vaibhav Choudhary

Dec 26 | Getting Started with JavaFX (NB 6.1)

Special News

New Contributor..
Vaibhav Choudhary is one of the latest contributor of the NetBeans Community Docs Program.

JavaFX Docs..
Today, James blogged about the latest contribution made by Vaibhav on Java FX, he's blogging passionately about Java FX on his blogs. Looking forward to more docs from him, as well as from you and NetBeans community. Rock on!!

What's New..
This is the last edition of our Weekly Newsletters and from January 2009 onwards, you would start receiving Monthly Newsletters... So, we had started archiving selected news items from the previously published 19 weekly newsletters and this edition would provide the last one.

Season Greetings


Hoping you all have enjoyed our weekly dose of latest news from our Multilingual NetBeans Community Docs Program and we look forward to your cooperation in the New Year as well.

To end, James Branam (NetBeans Community Docs Program Manager) has written a special post for this program and the community on the project's successful & eventful year, also discussing what lies in the future..


The final edition was brought to you by;
Varun Nischal
___________________________________________________________
Available Languages: English , German, Spanish

NetBeans Community Docs Blog - December 25, 2008 12:53 PM
Season Greetings

On behalf of the NetBeans Community Docs Team, I would like to wish each one of you who has been part of this successful community-driven project, NetBeans Community Docs Program...

Merry Christmas
, as well as want to tell you that on 29th December, 2008. We would be publishing 20th and the last edition of Weekly Newsletter, as thereafter you would receive Monthly Newsletters...

So, make sure you don't miss the special edition next week...

Stay Tuned for more...

NetBeans Community Docs Blog - December 23, 2008 07:20 PM
275 Docs and counting...

Hey,

We crossed an important milestone, as we await a major one! We have now more than 275 community-contributed docs as per Dec 24, 2008...We are now just 23 away from reaching a bigger milestone: 300 docs

Once again, thanks all for putting in your efforts...
We are rocking!

NetBeans Community Docs Blog - December 23, 2008 04:01 AM
Nov 2008 | NetBeans Dream Team

Now, we shall see contributions done by NetBeans Dream Team Members during the month of November, 2008!

When was the last time they contributed?
Two months back, in Oct '08! They contributed Tutorials and Tips & Tricks.


Tutorials

Spanish
Aristides Villarreal Bravo

Nov 04
Primeros pasos con Documentos NetBeans
German
Kristian Rink
Nov 06
Schnellstart mit der NetBeans-Dokumentation


Developer FAQ

Tom Wheeler
Nov 10
There sure are a lot of modules in the source tree. What are they for?

Thank you, Aristides, Kristian and Tom!

diesil's java - December 22, 2008 07:48 PM
Woodstock migra a ICEFaces

El equipo de Netbeans tiene el agrado de anunciar la relación entre las comunidades de NetBeans y ICEFaces para facilitar la migración de los actuales usuarios de Woodstock. Con la última versión del plugin ICEface para NetBeans, puede agregar el frameworj ICEFaces a un proyecto existen y comenzar a desarrollar páginas ICEface con las aún existentes en woodstock.

Los recursos han sido creados para ayudar la migración incluyendo una guía de migración detallada y una matriz de comparación  entre los componentes de Woodstock y ICEfaces. Este solo es el inicio de la relación entre las comunidades de NetBeans y ICEfaces. Adicionamente las herramientas para migración serán planeadas para las siguientes versiones de ICEfaces.

Recursos:

NetBeans Community Docs Blog - December 22, 2008 05:19 PM
NBCD Weekly Newsletter #19 (Spanish)

Últimos Documentos de la Comunidad

Tutoriales

Samuel Tan

Dec 19 | NetBeans 6.1 Hibernate JPA
Hendro Steven
Dec 19 | Simple JPA Application with Netbeans 6.0/6.1

Hubert A. Klein Ikkink
Dec 16 | Create Groovy 1.5.7 script in NetBeans 6.5

Noticias Especiales


Nuevo Contribuidor..
Hendro Steven, Samuel Tan son los últimos contribuidores del Programa NetBeans Community Docs.

... Tú eres sólo un mensaje de correo electrónico fuera, ¿qué decir?

Documentos Python ..
Bien, todos conocen acerca de Python EA Release con NetBeans 6.5, acerca de cómo contribuyen los documentos basados en el soporte Python ...Estás a sólo un correo electrónico, ¿qué dice?

Libro de Trucos y Sugerencias..
Este libro se centra en las recetas específicas que pueden hacerle más productivo en sus tareas rutinarias de desarrollo y proporciona respuestas a sus preguntas más apremiantes.


Dream Team Docs
Nov 2008
Aristides, Kristian contribuyeron con tutoriales, mientras Tom documento otro developer faq, en el mes de Noviembre.

Esta edición ha sido presentada a usted por;
Aristides Villarreal Bravo
___________________________________________________________
Available Languages: English , German, Spanish

Avbravo - December 22, 2008 04:45 PM
T-shirt NB 10 años

Hace unos dias me llego el T-shirt conmemorativo de los 10 años de NetBeans.


NetBeans Community Docs Blog - December 22, 2008 01:46 PM
NBCD Weekly Newsletter #19

Latest Community Docs

Tutorials

Samuel Tan

Dec 19 | NetBeans 6.1 Hibernate JPA
Hendro Steven
Dec 19 | Simple JPA Application with Netbeans 6.0/6.1

Hubert A. Klein Ikkink
Dec 16 | Create Groovy 1.5.7 script in NetBeans 6.5

Special News


New Contributor..
Hendro Steven, Samuel Tan are the latest contributors of the NetBeans Community Docs Program.

Python Docs..
Well, you all know about Python EA Release with NetBeans 6.5, how about contributing docs based on the Python support...You're just an email away, what say?

Tips & Tricks Book..
This book focuses on specific recipes that can make you more productive in your routine development tasks and provides answers to your most pressing questions.


Dream Team Docs
Nov 2008
Aristides, Kristian contributed tutorials, while Tom documented yet another developer faq, in the month of November.

This edition was brought to you by;
Varun Nischal
___________________________________________________________
Available Languages: English , German, Spanish

Avbravo - December 20, 2008 02:26 AM
NetBeans 7.0 Milestone 1

Ya esta disponible NetBeans 7.0 Milestone 1, sin duda una versión muy previa del IDE, pero sin lugar a dudas permite conocer algunas de las nuevas caracteristicas.
Estas invitado a descargarla, e iniciar tus pruebas

Aqui tenemos el RoadMap

Avbravo - December 18, 2008 12:38 AM
Woodstock migra a ICEface


Desde hace unos años, cuando se libero Java Studio Creator, el desarrollo de aplicaciones JSF poseia un diseñador visual, algunos recordaran los problemas iniciales de JSC, consumo excesivo de recursos, y algunos problemas con los componentes, esto fue rapidamente solucionado, luego llego la migración a NetBeans, mediante Visual Web Pack, un paquete de componentes que dotaba al IDE de un diseñador Visual para JSF, al cabo de un tiempo y de muchas mejoras, contamos con los componentes Woodstock, que ofrecian un conjunto de componentes muy utiles para nuestras aplicaciones.
Recientemente el proyecto Woodstock, no seguira , y por lo tanto existen muy buenos recursos para continuar con el desarrollo de aplicaciones Web, una de ellas es ICEFaces.
La comunidad NetBeans esta colaborando con la comunidad ICEFaces para facilitar la migración de Woodstock a ICEFaces.




NetBeans Community Docs Blog - December 17, 2008 12:19 PM
NBCD Weekly Newsletter #18 (Spanish)

Últimos Documentos de la Comunidad

Screencast

Prakan Puvibunsuk

Dec 09 | Pagination in SAF

Trucos y Sugerencias

Varun Nischal
Dec 08 | Want to use GSF API's?

Anton Epple
Dec 08 | Fix External Web Browser in NetBeans Platform Application

Michel Graciano
Dec 08 | Solving editor garbled text

Noticias Especiales


Archivos..
Documentos de Noviembre estan archivados, además ahora puedes encontrar mensualmente quien es "Topmost Contributor" visitando el archivo wiki de cada mes separadamente. Actualmente , sólo esta visible los meses del 2008, se esta trabajando para el 2007 ...

Blogs Deliciosos...
Se ha añadido un widget en el panel derecho de nuestro blog (debajo de la sección "The Gang" ) que muestra los blogs marcados ocasionalmente con su estatus...Puede ver las últimas 5 entradas..
Háganos saber ¿qué sientes?

Primer Aniversario..
El miembro de la comunidad, Varun Nischal celebró su cumpleaños el domingo 14 de Diciembre. El dia que realmente empezo a escribir documentos el año pasado.Por lo tanto, es su primer aniversario con este proyecto. Por lo tanto, su su primer aniversario con este proyecto. Las Personas interesadas pueden dar una lectura a su blog...

Blog da Docs

Esta sección incluye las entradas de los blogs contribuidos por los contribuidores superiores , en nuestras ediciones del boletín semanal (#11, #14, #15, #16).

Aristides Villarreal Bravo
#11 | CVS and Localization

Hubert A. Klein Ikkink
#14, #15, #16 | Tips and Tricks, Hat-trick Hero

Esta edición ha sido presentada a usted por;
Aristides Villarreal Bravo
___________________________________________________________
Available Languages: English , German, Spanish

NetBeans Community Docs Blog - December 16, 2008 06:28 PM
NBCD Weekly Newsletter #18

Latest Community Docs

Screencast

Prakan Puvibunsuk

Dec 09 | Pagination in SAF

Tips and Tricks

Varun Nischal
Dec 08 | Want to use GSF API's?

Anton Epple
Dec 08 | Fix External Web Browser in NetBeans Platform Application

Michel Graciano
Dec 08 | Solving editor garbled text

Special News


Archives..
November Docs are now archived, also you can now find out who's the monthly "Topmost Contributor" by visiting wiki archive of each month separately. Currently, visible only in 2008 months, work for 2007 going on...

Delicious Blogs...

We have added a widget on right-panel of our blog (below "The Gang" section) that shows the blogs we bookmark occasionally along with their status...You would always see the latest 5 entries..Let us know what do you feel?


First Anniversary..
Community members, Varun Nischal celebrated his birthday on Sunday, Dec 14th. The day he actually began writing docs last year. So, its his first anniversary with this project. Interested people can give his blog a read..

Blog da Docs

This section features the blog entries of the docs contributed by the topmost contributor(s) featured, in our weekly newsletter editions (#11, #14, #15, #16).

Aristides Villarreal Bravo
#11 | CVS and Localization

Hubert A. Klein Ikkink
#14, #15, #16 | Tips and Tricks, Hat-trick Hero

This edition was brought to you by;
Varun Nischal
___________________________________________________________
Available Languages: English , German, Spanish

NetBeans Community Docs Blog - December 14, 2008 11:30 AM
Special: Docs (13) and Newsletters (14, 15, 16)

13, 14, 15, 16... No, I am not counting anything, I am just figuring out the mystery behind this sequence of numbers..

Hubert A. Klein Ikkink has recently scored a hat-trick (Three Consecutive Weeks) of being recognized as Topmost Contributor of the weekly newsletter edition (#14, #15, #16) and that too within the same month. He has mainly focused on contributing Tips and Tricks.

Incredible!

Reason being, he has contributed 13 docs in the month of November, 2008. Coincidentally, we were publishing #14, #15 and #16 editions during that time.

So, here's a list of the docs, he wrote;

Tips and Tricks

Nov 21

Using NetBeans HTTP monitor with Jetty and Maven
Nov 16
Use fix code to correct your code
Nov 06
Getting sources from Maven repositories
Nov 05
NetBeans with newer Subversion client
Nov 04
Debugging Cocoon 2.2 in NetBeans

There are many more contributed in the past as well, contributed in previous 2-3 months! For more info, refer the archives.

Thanks, Hubert!

NetBeans Community Docs Blog - December 14, 2008 08:57 AM
CVS and Localization

Aristides Villarreal Bravo (NetBeans Dream Team Member) was featured in our Weekly Newsletter Edition #11, as a Topmost Contributor. He contributed 2 articles based on CVS and 1 tutorial based on Localization Plugin. Lets take a look;

Articles

Oct 27 | Usar CVS

Para los que aun no han utilizado el soporte que brinda NetBeans para CVS, presento una guia bien rápida de como utilizarlo.

Read more...

Oct 24 | Como integrar sus archivos en NetBeans CVS
Estas son las intrucciones de como puedes hacer commit de sus archivos a los repositorios de NetBeans CVS utilizando el IDE NetBeans. Si tienes acceso de esritura al servidor NetBeans CVS para translatedfiles, puedes integrar estos archivos libremente pero por favor note que usted necesita validar sus archivos antes de la integración.

Read more...

Tutorial

Oct 20 | Plugins de Localizaciones
NetBeans, se traduce en diversos idiomas, se ha creado un plugin para que puedas tener el IDE en cualquiera de los idiomas soportados.

Read more...

Thanks, Aristides!

NetBeans Community Docs Blog - December 14, 2008 08:06 AM
The day I began writing docs...

Namastey,

You have all seen me blogging for more than a year now. Some people call me crazy, avid, passionate and/or highly active (hyper-active) blogger. Then, there were some who didn’t even bother reading my blogs OR commented negatively.

I never mind as I blog because I had developed an interest in it which made me passionate for blogging. Too, it helped me improve my writing skills, as last year I was new to blogging.

Continue Reading...

diesil's java - December 12, 2008 12:06 AM
Parche 1 para NetBeans 6.5

Acaba de lanzarse el parche 1 para NetBeans 6.5
Este parche corrige errores encontrados en los módulos Auto Update Services, Ant, BlueJ Project Support, C/C++, Database, GUI Builder, GlassFish v3 Prelude, GlassFish v3 Prelude - JRuby, IDE Platform, Java, Java EE, Web Applications, Java Profiler, NetBeans 6.5, PHP, Platform, RESTful Web Services, Ruby and Rails, SaaS Services Support y UML.

Para descargarlo, utilice la opción "Ayuda > Comprobar actualizaciones" desde el IDE NetBeans 6.5.

Mas información sobre este parche, se podrá encontrar aquí: http://wiki.netbeans.org/NetBeans6.5PatchesInfo

diesil's java - December 11, 2008 01:10 PM
AOP Programación Orientada a Aspectos con Spring 2.5 y NetBeans 6.1

Mucho se ha oído o leído sobre la Programación Orientada a Aspectos (AOP), pero ¿qué es realmente? Simplemente, es una ayuda para los programadores que permite reducir código de rutinas que siempre deberían ejecutarse y no se puede usar la herencia. Además, cada lógica de negocio solo tendrá lógica de negocio, y no código adicional que son repetitivas y no son parte del negocio. Por ejemplo, un método que se encargue de una transferencia de dinero, debería ser tan simple como esto

void transfer(Account fromAccount, Account toAccount, int amount){
if (fromAccount.getBalance() < class="br0">) {
throw new InsufficientFundsException();
}

fromAccount.withdraw(amount);
toAccount.deposit(amount);
}



Pero realmente, se vuelve así:
void transfer(Account fromAccount, Account toAccount, int amount) throws Exception {
if (!getCurrentUser().canPerform(OP_TRANSFER)) {
throw new SecurityException();
}

if (amount < 0) {
throw new NegativeTransferException();
}

Transaction tx = database.newTransaction();
try {

if (fromAccount.getBalance() < amount) {
throw new InsufficientFundsException();
}
fromAccount.withdraw(amount);
toAccount.deposit(amount);

tx.commit();
systemLog.logOperation(OP_TRANSFER, fromAccount, toAccount, amount);
}
catch(Exception e) {
tx.rollback();
throw e;
}
}



Donde se incorpora rutinas de registro (log), inicio de transacciones de la base de datos, validación de cantidades, además de posibles excepciones que se puedan lanzar.

Y si hacemos un método que se encargue únicamente del depósito, el resultado sería similar. Aquí es donde entra los Aspectos.

Algunos conceptos

A continuación, mencionaré algunos conceptos utilizados en la Programación Orientada a Aspectos
  • Aspect (Aspecto) es la funcionalidad que se cruza a lo largo de la aplicación (cross-cutting) que se va a implementar de forma modular y separada del resto del sistema. El ejemplo más común y simple de un aspecto es el logging (registro de sucesos) dentro del sistema, ya que necesariamente afecta a todas las partes del sistema que generan un suceso.
  • Jointpoint (Punto de Cruce) es un punto de ejecución dentro del sistema donde un aspecto puede ser conectado, como una llamada a un método, el lanzamiento de una excepción o la modificación de un campo. El código del aspecto será insertado en el flujo de ejecución de la aplicación para añadir su funcionalidad.
  • Advice (Consejo) es la implementación del aspecto, es decir, contiene el código que implementa la nueva funcionalidad. Se insertan en la aplicación en los Puntos de Cruce.
  • Pointcut (Puntos de Corte) define los Consejos que se aplicarán a cada Punto de Cruce. Se especifica mediante Expresiones Regulares o mediante patrones de nombres (de clases, métodos o campos), e incluso dinámicamente en tiempo de ejecución según el valor de ciertos parámetros.
  • Introduction (Introducción) permite añadir métodos o atributos a clases ya existentes. Un ejemplo en el que resultaría útil es la creación de un Consejo de Auditoría que mantenga la fecha de la última modificación de un objeto, mediante una variable y un método setUltimaModificacion(fecha), que podrían ser introducidos en todas las clases (o sólo en algunas) para proporcionarlas esta nueva funcionalidad.
  • Target (Destinatario) es la clase aconsejada, la clase que es objeto de un consejo. Sin AOP, esta clase debería contener su lógica, además de la lógica del aspecto.
  • Proxy (Resultante) es el objeto creado después de aplicar el Consejo al Objeto Destinatario. El resto de la aplicación únicamente tendrá que soportar al Objeto Destinatario (pre-AOP) y no al Objeto Resultante (post-AOP).
  • Weaving es el proceso de aplicar Aspectos a los Objetos Destinatarios para crear los nuevos Objetos Resultantes en los especificados Puntos de Cruce. Este proceso puede ocurrir a lo largo del ciclo de vida del Objeto Destinatario:
    • Aspectos en Tiempo de Compilación, que necesita un compilador especial.
    • Aspectos en Tiempo de Carga, los Aspectos se implementan cuando el Objeto Destinatario es cargado. Requiere un ClassLoader especial.
    • Aspectos en Tiempo de Ejecución.

Comenzando AOP con Spring 2.5

Antes de comenzar, debemos recordar (o conocer) lo que es el Patrón de Diseño Proxy. Para resumir toda la definición, un proxy es un objeto que luce como otro objeto pero añade funcionalidad especial de forma transparente. En Spring, una interfaz puede ser usado tras un proxy.

Proxy

En NB 6.1, creemos un proyecto simple (Java > Java Application) llamado SpringProxy. Luego, agregamos la biblioteca Spring Framework 2.5

Luego, crearemos la interfaz Conversacion, que tendrá un método llamado iniciarSesion().
package springproxy;


public interface Conversacion {

void iniciarSesion();
}


Y tenemos la siguiente implementación de la Interfaz
package springproxy;

public class ChatInterno implements Conversacion{

private String servidor;


public void setServidor(String servidor) {
this.servidor = servidor;
}

public void iniciarSesion() {
System.out.println("["+this.getClass().getName()+":"+this.toString()+"]");
System.out.println("Iniciando sesion del servidor "+servidor);
}

}

Ahora, crearemos un archivo .xml para Spring. Entramos a File > New File, y seleccionamos Other | Spring XML Configuration File.
Lo llamaremos "aop-spring", y lo colocaremos en la carpeta src del proyecto.
Clic en "Next".
No seleccionamos nada en la última página, y hacemos clic en "Finish".
Notar que solo se está llamando al esquema "beans".

Escribimos el siguiente código en el archivo aop-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="chatInterno" class="springproxy.ChatInterno">
<property name="servidor" value="Servidor Spring Framework"/>
</bean>
<bean id="chatProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces" value="springproxy.Conversacion" />
<property name="target" ref="chatInterno"/>
</bean>
</beans>

Notemos cómo NB 6.1 nos ayuda a escribir el código, llenando los atributos, asignando variables de beans ya creados, etc.

Ahora, escribamos el siguiente código de nuestra clase Main.
 public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("aop-spring.xml");
Conversacion chat = (Conversacion) ctx.getBean("chatInterno");
chat.iniciarSesion();
System.out.println("corrido de " + chat.getClass());
System.out.println();

Conversacion proxy = (Conversacion) ctx.getBean("chatProxy");
proxy.iniciarSesion();
System.out.println("corrido de " + proxy.getClass());
}

Ejecutemos el proyecto y veamos la salida:
[springproxy.ChatInterno:springproxy.ChatInterno@633e5e]
Iniciando sesion del servidor Servidor Spring Framework
corrido de class springproxy.ChatInterno

[springproxy.ChatInterno:springproxy.ChatInterno@633e5e]
Iniciando sesion del servidor Servidor Spring Framework
corrido de class $Proxy0

Vemos que se trata del mismo objeto (vemos el ID ChatInterno@633e5e en ambos casos) pero realmente son dos clases diferentes. El primero es de la clase springproxy.ChatInterno y el segundo es de $Proxy0.
El Proxy contiene al objeto de ChatInterno, y cuando se ejecuta los métodos del Proxy, llama al método del objeto contenido.
El objeto de ChatInterno no sabrá de donde fue llamado. El Proxy podría realizar un código antes o después de llamar al método del objeto ChatInterno. Esto es lo que queremos hacer al usar AOP.

Un simple Advice

Lo que haremos ahora es que se ejecute un código antes de iniciar la sesión del chat. Para ello crearemos la clase ChatLogger que implementará la interfaz MethodBeforeAdvice.
package springproxy;

import java.lang.reflect.Method;
import java.util.Date;
import org.springframework.aop.MethodBeforeAdvice;


public class ChatLogger implements MethodBeforeAdvice{

public void before(Method metodo, Object[] args, Object objetivo) throws Throwable {
System.out.println("["+(new Date())+"] "+metodo.getName()+" llamado desde "+objetivo);
}

}


Ahora, lo instanciemos en el Spring
<bean id="chatLogger" class="springproxy.ChatLogger" />

y lo agreguemos en la lista de interceptores
<bean id="chatProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces" value="springproxy.Conversacion" />
<property name="target" ref="chatInterno"/>
<property name="interceptorNames">
<list>
<value>chatLogger</value>
</list>
</property>

</bean>

Ejecutemos el proyecto, y veremos lo que pasa:
[springproxy.ChatInterno:springproxy.ChatInterno@17494c8]
Iniciando sesion del servidor Servidor Spring Framework
corrido de class springproxy.ChatInterno

[Tue Jun 03 00:52:34 PET 2008] iniciarSesion llamado desde springproxy.ChatInterno@17494c8
[springproxy.ChatInterno:springproxy.ChatInterno@17494c8]
Iniciando sesion del servidor Servidor Spring Framework
corrido de class $Proxy0

AOP usando proxy. Como ves, no hemos modificado nada de la clase ChatInterno.
En la clase ChatLogger podemos agregar el código que deseemos, sin modificar la funcionalidad de nuestra lógica de negocio.

El proyecto de este post se encuentra aquí: http://diesil-java.googlecode.com/files/SpringProxy.tar.gz

... esta historia continuará...

Bibliografía

diesil's java - December 11, 2008 01:10 PM
AJAX con DWR en NetBeans 6.1

Una de las bibliotecas más fáciles que he visto para programar en AJAX es el Direct Web Remoting - DWR.
En este post veremos algunas de sus características que nos ayudará a tener aplicaciones enriquecidas con ajax. Para ello usaremos:

  1. NetBeans 6.1
  2. DWR

Si deseas saber lo que es AJAX, puedes revisar mi anterior post llamado (justamente) AJAX.

Instalando DWR en NetBeans

La biblioteca DWR consta únicamente de un archivo .jar. Este lo podemos descargar de aquí: http://getahead.org/dwr/download. A la fecha de este post la versión del DWR es la 2.0.4.

Guardaremos el archivo en una carpeta que será destinada para las bibliotecas de los proyectos. Yo, en Windows, lo guardo en d:\proys\lib\DWR, y en Linux lo guardo en ~/proys/lib

Adicionalmente DWR necesita de la biblioteca commons-logging. Esta la puedes descargar de aquí: http://commons.apache.org/downloads/download_logging.cgi

Descomprimamos el archivo descargado de commons-logging en la misma carpeta lib.

Entramos a la opción Tools > Libraries:


Hacemos clic en "New Library" para crear una nueva biblioteca, y llamaremos DWR.

Clic en OK. Ahora agregamos los archivos .jar correspondientes. Hacemos clic en Add Jar/Folder y seleccionamos el archivo commons-logging-1.1.1.jar y dwr.jar


Clic en OK parar cerrar la ventana.

El proyecto Web

Ahora crearemos un aplicación web, que no usará ningún framework. Será una aplicación totalmente "simple". La llamaremos DwrSamples.

En las propiedades del proyecto web creado, entramos a sus propiedades haciendo clic derecho sobre el ícono del proyecto, y seleccionamos"Properties". En esta ventana seleccionamos del margen izquierdo la categoría "Libraries". Luego agregamos la biblioteca DWR haciendo clic en el botón "Add Library". Después de esto, deberá lucir así:



Crearemos una clase a la que llamaremos Calculadora y estará en el paquete logica. Esta clase, básicamente, tendrá los métodos que realizarán las operaciones de manera asíncrona.

package logica;
public class Calculadora {

public int sumar(int a, int b) {
return a + b;
}

public int restar(int a, int b) {
return a - b;
}
}


Ahora, necesitamos que esta clase sea leíble por DWR, por lo que usaremos anotaciones para "publicar" la clase como objeto javascript, pero sólo publicaremos el método sumar() para que sea ajax. Usaremos la anotación de DWR @RemoteProxy para la clase Calculadora, y @RemoteMethod para el método sumar(). Deberá lucir así:

package logica;

import org.directwebremoting.annotations.RemoteMethod;
import org.directwebremoting.annotations.RemoteProxy;

@RemoteProxy
public class Calculadora {

@RemoteMethod
public int sumar(int a, int b) {
return a + b;
}

public int restar(int a, int b) {
return a - b;
}
}



Ahora, abrirmos el archivo web.xml (podemos presionar Shift + Alt + O para abrir el buscador de archivos y escribir web para que nos seleccione el archivo que estamos buscando). En la barra superior hacemos clic en el botón "Servlets" para visualizar los servlets de nuestra aplicación. Una vez allí, hacemos clic en el botón "Add Servlet".
El nuevo servlet que crearemos, le pondremos el nombre "DWR", la clase del servlet será "org.directwebremoting.servlet.DwrServlet", y el patrón URL será "/dwr/*", es decir, este serlet responderá las peticiones en la dirección "/dwr/". Deberá lucir esta ventana así:



Hacemos clic en "OK". Luego, agregaremos un parámetro de inicio. Hacemos clic en el botón "Add.." de la sección "Initialization Parameter".

El parámetro de inicio lo llamaremos classes, y tendrá una clase llamada logica.Calculadora.

Clic en OK, y deberá lucir así la ventana de los servlets.

O si lo prefieres en xml, el archivo web.xml deberá lucir así.
Ahora, crearemos nuestra interfaz. Abrimos el archivo index.jsp, le pondremos un formulario:
        <h2>Calculadora</h2>
<form action="">
Valor 1: <input type="text" name="valor1" id="valor1"/><br/>
Valor 2: <input type="text" name="valor2" id="valor2"/><br/>
<input type="button" value="Sumar" onclick="sumar()"/><br/>
Resultado:<div id="suma"></div>
</form>

Nota que el botón no es un submit, sino un tipo "button". Tampoco olvidar los atributos id de los tags. Estos nos ayudará a identificar un tag en toda la página.

Ahora, necesitamos importar las bibliotecas de DWR. Para ello, agregamos las siguientes lineas en la cabecera del jsp.
        <script type="text/javascript" src="<%=pageContext.getServletContext().getContextPath()  %>/dwr/interface/Calculadora.js"></script>
<script type="text/javascript" src="<%=pageContext.getServletContext().getContextPath() %>/dwr/engine.js"></script>
<script type="text/javascript" src="<%=pageContext.getServletContext().getContextPath() %>/dwr/util.js"></script>



Nota que estos javascript están bajo la carpeta /dwr, que es el servlet que hemos creado párrafos arriba. Además, hay un Calculadora.js, que tiene el mismo nombre de nuestra clase java que hemos creado.

Crearemos la función sumar() que es llamada desde el botón "sumar" de nuestro formulario:
            function sumar(){
var valor1=dwr.util.getValue("valor1");
var valor2=dwr.util.getValue("valor2");
Calculadora.sumar(valor1,valor2,mostrarSuma);
}


En las dos primeras líneas estamos obteniendo los valores de los tag "valor1" y "valor2". Este nombre es el nombrado en los atributos id de los input:text. Por ello es importante que los ID identifiquen a un único tag en toda la página.

La tercera linea llama al objeto Calculadora. Este objeto es el que DWR creó como contraparte a nuestra clase java Calculadora.

Nota que llama al método sumar() y recibe tres parámetros. Los dos primeros son los mismos parámetros que hemos declarado en nuestra clase java Calculadora. Pero el tercer parámetro, que se llama mostrarSuma, es el nombre de una función en javascript que se encargará de recibir y manejar el resultado que devuelto por el método sumar() de java. Así es la convención de DWR. Notar que se le está pasando solo el nombre, sin paréntesis.

La función javascript mostrarSuma() será la siguiente:
            function mostrarSuma(resultado){
dwr.util.setValue("suma",resultado);
}


Vemos que el resultado devuelto por el método de java sumar() es el parámetro de esta función javascript. Tomamos el valor y lo mostramos en el tag que tiene nombre "suma" (que es un <div>).

El index.jsp completo es el siguiente:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>

<script type="text/javascript" src="<%=pageContext.getServletContext().getContextPath() %>/dwr/interface/Calculadora.js"></script>
<script type="text/javascript" src="<%=pageContext.getServletContext().getContextPath() %>/dwr/engine.js"></script>
<script type="text/javascript" src="<%=pageContext.getServletContext().getContextPath() %>/dwr/util.js"></script>
<script type="text/javascript">
function sumar(){
var valor1=dwr.util.getValue("valor1");
var valor2=dwr.util.getValue("valor2");
Calculadora.sumar(valor1,valor2,mostrarSuma);
}
function mostrarSuma(resultado){
dwr.util.setValue("suma",resultado);
}
</script>
</head>
<body>

<h2>Calculadora</h2>
<form action="">
Valor 1: <input type="text" name="valor1" id="valor1"/><br/>
Valor 2: <input type="text" name="valor2" id="valor2"/><br/>
<input type="button" value="Sumar" onclick="sumar()"/><br/>
Resultado:<div id="suma"></div>
</form>
</body>
</html>


Lo corremos y probamos:


¡Magia!

Con base de datos

A esta altura verás la simpleza del DWR, y que una aplicación con base de datos no sería de lo más difícil. Haríamos una clase que accede la base de datos y lo muestre en la web. Pero ¿cómo lo mostramos en una tabla?. Aquí mostraremos el ejemplo:

Crearemos una clase llamada PersonasService y lo guardaremos en el paquete logica. Esta clase tendrá la anotación @RemoteProxy pero con un parámetro que cambiará el nombre del objeto javascript. Es decir, no se llamará PersonasService en javascript, sino, se llamará solamente Personas.
package logica;

import org.directwebremoting.annotations.RemoteProxy;
@RemoteProxy(name = "Personas")
public class PersonasService {


}


Ahora, crearemos un método llamado getLista() que devolverá una lista de objetos Persona que tendrá los registros de la base de datos. Para ello, primero crearemos la clase beans.Persona.
package beans;

import java.util.Date;


public class Persona {


private int id;

private String nombre;

private String titulo;

private boolean viajeroFrecuente;

private Date ultimaActualizacion;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getTitulo() {
return titulo;
}

public void setTitulo(String titulo) {
this.titulo = titulo;
}

public Date getUltimaActualizacion() {
return ultimaActualizacion;
}

public void setUltimaActualizacion(Date ultimaActualizacion) {
this.ultimaActualizacion = ultimaActualizacion;
}

public boolean isViajeroFrecuente() {
return viajeroFrecuente;
}

public void setViajeroFrecuente(boolean viajeroFrecuente) {
this.viajeroFrecuente = viajeroFrecuente;
}
}

Por alguna razón, los beans con anotaciones no son convertidos por DWR a objetos JavaScript. Al menos con esta versión. He seguido la documentación que indica cómo usar un bean con @DataTransferObject y nada. Si alguien lo puede lograr, lo agradeceré un montón.

Pero para poder enviar beans en DWR, crearemos un archivo llamado dwr.xml y lo guardamos dentro del directorio WEB-INF (en la misma ubicación del archivo web.xml). En ese archivo colocaremos lo siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
"http://directwebremoting.org/schema/dwr20.dtd">
<dwr>
<allow>

<convert converter="bean" match="beans.Persona">
</convert>
</allow>
</dwr>


Ahora, volvemos a la clase PersonasService. Hacemos clic derecho sobre el fondo del código fuente, y seleccionamos Enterprise Resource > Use Database.

Hacemos clic en el botón "Add"