Professional Documents
Culture Documents
DO
CL I
IN AT
CD GR
Precio: 6 €(España) (IVA incluido) • AÑO X. 2.ª ÉPOCA • Nº 116 • UNA PUBLICACIÓN DE: REVISTAS PROFESIONALES S.L.
6
Fuentes
e
z Ejemplo JAXB
z XML con
co Castor
z ADO.NET
ADO
a or
Maximiza la
portabilidad
z Técnicas
T c Direct3D
D 3D
z JNI
Programación
gr
z Castor
st r 0.9.5.3
5
, S.L. z NetBeans IDE 3.6
3ª z Cooktop
o to 2.5
1994 z Cygwin
w
z WiX
y además...
Ofimática, navegadores y clientes de correo,
tratamiento de imágenes, visualizadores,
compresores, grabadores, Internet y
multimedia.
Y ADEMÁS...
ACTUALIDAD
Ganadores del concurso ASP.NET
Lo mejor del Tech-Ed 2004
MIDDLEWARE
Migrando hacia ASP.NET
JAXB: un caso práctico
Enlace de datos XML con Castor
BASES DE DATOS
Transacciones con ADO.NET
DISEÑO
Software moderno OO
Conecta Java con XML
ALGORITMOS Acceso a datos XML
Creación de gráficos con Direct3D mediante JAXB
Acceso a código nativo con JNI Mapeo entre documentos XML
CANAL PANDA y objetos Java con Castor
Defensa contra nuevos virus
TQS
SOLO PROGRAMADORES 4
NOTICIAS
SUN MICROSYSTEMS Indra como Sun y sus partners tecnológicos realicen en este área.
La Sociedad de la Información y el acceso a Internet: Por un lado, Indra ofrece una licencia gratuita para la utilización de
una plataforma Hardware y Software para fomentar la participa-
un derecho universal de todos los ciudadanos ción ciudadana a través del Ayuntamiento de Jun: captar la opinión
Luis Enrique Hernández Lucendo, director de Administraciones Públicas y de los ciudadanos, procesar resultados y realizar estadísticas.
Sanidad de Indra, Pedro Montarelo, director de marketing de Sun Por otro lado, Sun otorga una licencia gratuita para uso personal,
Microsystems Ibérica y José Antonio Rodríguez, primer teniente alcalde del educativo y de investigación a todos los ciudadanos de Jun del soft-
Ayuntamiento de Jun (Granada) han firmado un acuerdo que permitirá ware StarOffice 7.0, junto con una licencia de uso gratuita de su
universalizar el acceso a la tecnología de todos los habitantes de Jun y paquete de software Java Enterprise System tanto para todas las
fomentar la participación ciudadana en el gobierno del municipio. El ayun- PYME (empresas con menos de cien empleados) domiciliadas en
tamiento de esta localidad granadina ha declarado el acceso a Internet y Jun como para el Ayuntamiento. De izquierda a derecha
la Sociedad de la Información un derecho universal de todos sus ciudada- Enrique Hernández, director
nos. Dicho ayuntamiento fue pionero también en la celebración del primer de AA.PP. y Sanidad de
pleno de la teledemocracia en Europa y, en las pasadas elecciones andalu- Indra, Zaida Sampedro,
Gerente de AA.PP. y Sanidad
zas del 14 de marzo, Jun fue el escenario de una exitosa experiencia pilo- de Indra, José Antonio
to de voto electrónico por Internet y a través de telefonía móvil. Rodríguez, Primer Teniente
Gracias al acuerdo firmado, el Ayuntamiento de Jun accederá de de Alcalde del Ayuntamiento
forma preferente a las nuevas aplicaciones y desarrollos que tanto de Jun y Pedro Montarelo,
Director de Markentig de Sun
Microsystems Ibérica.
TRANSCEND INFORMATION ciones de 640 x 480 píxeles o registrar hasta seis horas de vídeo MPEG 4.
Necesidades de almacenamiento insaciables A diferencia de otros fabricantes, Transcend insiste en usar sólo chip
Flash NAND SLC (Single-Level-Cell) al que se le supone una superior
El consumo de dispositivos multimedia crece día tras velocidad de escritura, menor consumo de potencia y mayor duración
día, y con ello las necesidades de almacenamiento. en comparación con tarjetas Secure Digital realizadas con chip MLC
Este hecho ha empujado a Transcend Information a (Multi-Level-Cell).
anunciar el aumento de la capacidad de sus tarjetas Además, esta tarjeta SD 45X Ultra Performance puede alcanzar una
Secure Digital (SD) 45X hasta 1 GB. velocidad de lectura de de hasta 7.7 Mbps y una velocidad de escritu-
Con esta tarjeta SD de elevada capacidad, se pueden ra de hasta 6.8 Mbps. Por lo tanto se convierte en una solución pro-
almacenar más de 13.000 fotografías JPEG con resolu- fesional al alcance de todos.
NOTICIAS
SUN MICROSYSTEMS terísticas como ventanas transparentes, rotación, zoom, entornos de trabajo
múltiples y miniaturización.
Sun aporta a la comunidad de código abierto tecnología 3D La versión para desarrolladores del Proyecto Looking Glass aportada por Sun
a la comunidad de código abierto ayuda a crear entornos de escritorio y apli-
Sun Microsystems quiere reafirmar su compromiso con el movimiento de caciones visuales en 3D capaces de ejecutarse sobre Solaris y sistemas Linux
código abierto al aportar el Proyecto Looking Glass y la tecnología Java 3D a como Java Desktop System. Esta versión persigue incitar a los desarrollado-
la comunidad de código abierto. Estas contribuciones (que forman parte de res de aplicaciones Java a explorar nuevas vías en el modo en que la infor-
la iniciativa Sun 3D Desktop Technology Open Source Project) propiciarán, mación y los datos se presentan al usuario.
según se afirma desde Sun, una nueva dimensión de innovaciones en la cre-
ación de aplicaciones. Iniciativas como esta permiten a los desarrolladores
acceder a las tecnologías englobadas en Sun 3D Desktop Technology Open
Source Project desde la comunidad online java.net (http://www.java.net).
Los lectores de Sólo Programadores ya tuvieron ocasión de conocer el
Proyecto Looking Glass en el número anterior, en la sección aportada por
javaHispano.
Para los que no hayan seguido la evolución de este asunto, diremos que la
primera demostración ante el público del Proyecto Looking Glass se realizó
en verano de 2003. Esta iniciativa fue la primera que despertó el interés de la
industria tecnológica por los entornos de escritorio tridimensionales, y la pri-
mera que se apartó del paradigma de las tradicionales ventanas. La innova-
dora interfaz del Proyecto Looking Glass ofrece un entorno intuitivo en 3D
que permite interactuar con las aplicaciones de escritorio, e incorpora carac-
SOLO PROGRAMADORES 6
JAVAHISPANO
Actualidad Java
de la mano de javaHispano
Nunca habrá un J2SE 1.5 o un J2EE 1.5
Por algún motivo el departamento de marketing de Sun mayor tiempo que lleva en el mercado la plataforma
Microsystems ha considerado conveniente cambiar el Java frente a .NET, actualmente en su versión 1.1 y cuya
sistema de versiones de la plataforma, cambio que afec- versión 2.0 aparecerá el año que viene.
ta ya a Tiger, la nueva revisión mayor de J2SE. A pesar de Estos caprichos con las versiones de los productos no
que hubo versiones Beta 1.5 de Tiger el número de la son nada sorprendente; recientemente BEA actualizó
versión estable, y el de la Beta 2, es el 5.0, y no el 1.5. Lo toda su familia de productos a la versión 8.1; antes sus
mismo sucederá con la próxima versión de J2EE, que productos (BEA Weblogic Portal, Integration, Server,
será la 5.0, y no la 1.5, que es la versión que se mencio- Liquid, JRockit, etc.) tenían versiones muy distintas. Por
na en el JSR 244, en el cual se está definiendo. otro lado nuca hubo una versión 8.0 en los productos
Desde Sun se justifica este salto en la numeración por de BEA, que parece preferir las versiones terminadas en
la enorme cantidad de cambios que se introducen en ".1" y no en ".0". El motivo último de estas decisiones
las nuevas versiones de la plataforma, los más notables queda para los departamentos de marketing de cada
desde la aparición de Java. Si este es realmente el moti- compañía; pero en lo que a nosotros atañe tendremos
vo cabría preguntarse por qué no se pasa a la versión que acostumbrarnos al nuevo versionado de la plata-
2.0, en vez de a la 5.0. Algunos opinan que el salto en forma, y abandonar la idea de desarrollar aplicaciones
el número de versión trata de reflejar la madurez y el con un JDK 1.5, sino con el 5.0.
Adobe pretende crear una nueva plataforma orienta- permitirá visualizar en formato PDF información pre-
da al servidor que permitirá automatizar y acelerar el cedente de cualquiera de las fuentes ligadas. La pla-
flujo de información dentro de una organización taforma también estará dotada de herramientas de
empleando documentos PDF. Esta plataforma, que se seguridad que permitirán entre otras cosas controlar
basa en J2EE, XML y los servicios web, recibe el nom- el acceso a la información del sistema, crear audito-
bre de "Intelligent Document Platform". Su fin es pro- rias del uso de la información, o verificar la autentici-
porcionar un modo único de conectar las diferentes dad de un documento mediante firmas digitales.
fuentes de datos de una empresa, permitiendo proce- Inicialmente Adobe ha orientado Intelligent Document
sar la información de modo automático y evitando Platform hacia organizaciones de gran tamaño, como
reintroducirla en el sistema. Para ello la información organismos gubernamentales o grandes empresas.
se representa en un formato que es básicamente PDF Quizás en un futuro Adobe cree versiones más simples
con una serie de extensiones basadas en XML. y reducidas de la plataforma que pudieran resultar más
Intelligent Document Platform podrá ligarse, por atractivas para organizaciones de menor tamaño, para
ejemplo, con los ERP o los CRM de una organización las cuales la solución actual probablemente resulte
empleando para ello servicios web y un API Java, y excesiva, tanto en complejidad como en funcionalidad.
JDesktop Integration Components (JDIC) tema. También permite registrar aplicaciones Java
(https://jdic.dev.java.net/) es un proyecto distribui- en un sistema y asociarlas con un tipo de archivo.
do bajo licencia LGPL cuyo fin es hacer accesible Dentro de JDIC hay dos subproyectos interesantes,
desde Java aplicaciones nativas sacrificando la aunque aún no son completamente funcionales:
portabilidad de la aplicación lo menos posible. JDIC SaverBeans Screensaver SDK, un kit de desarrollo
permite, por ejemplo, acceder al cliente de correo, que permite crear protectores de pantalla multipla-
al navegador web, o a la aplicación que está aso- taforma, y Tray Icon API, que permite a las aplica-
ciada con un determinado tipo de archivo en el sis- ciones Java crear iconos en la bandeja del escritorio.
SOLO PROGRAMADORES 8
JAVAHISPANO
http://www.javahispano.org
Soporte para voz en las aplicaciones Java: FreeTTS LISTADO 1 Dale voz a tu PC
La compañía Creamtec recientemente ha hecho esos eventos, y genera una aplicación web equi- comporta-
pública la versión 5.0 de WebCream, una herra- valente con una apariencia y comportamiento miento de la
mienta que permite convertir una aplicación de muy similar a la aplicación de escritorio. aplicación
escritorio basada en Swing o AWT en una apli- En la imagen podemos observar la apariencia de original es
cación web de un modo totalmente transparen- la demo de Swing que se distribuye con el JDK total, si bien
te para el desarrollador. WebCream captura 1.2 o superior de Sun en el directorio las respues-
tanto la apariencia de la aplicación original como demo/jfc/SwingSet convertida a aplicación web tas a las acciones del usuario son más lentas por
sus eventos, y la lógica de negocio asociada a con WebCream. La fidelidad con la apariencia y la latencia de la red.
Las implementaciones de referencia de Java 3D y Java Server Faces pasan a ser libres
Recientemente Sun ha liberando una notable un proyecto muy prometedor: Looking Glass,
cantidad de código fuente, buena parte de él un escritorio tridimensional para entornos
relacionado con la plataforma Java. Entre Linux y Unix que podría volverse muy popular
este código están las implementaciones de en las distribuciones de Linux, ahora que la
referencia de Java 3D (https://java3d.dev. licencia de su código es GPL. Por otro lado
java.net, véase Sólo Programadores 113 y hace bastantes meses que en la compañía se
114) y de Java Server Faces (https://javaser- está estudiando la posibilidad de distribuir
verfaces.dev.java.net), que se han convertido Solaris bajo una licencia libre tipo GPL. Parece
en proyectos de java.net. que cada vez más Sun apuesta por el softwa-
Sun también ha liberado el código fuente de re libre como modelo de negocio.
Sobre el autor
Abraham Otero (abraham.otero@javahispano.org)
es responsable de calidad y miembro de la junta de javaHispano. (http://www.javahispano.org)
9 SOLO PROGRAMADORES
CANAL PANDA
SOLO PROGRAMADORES 10
CANAL PANDA
Defensa contra nuevos virus
vigilancia y desarrollo de las empresas antivirus que antivirus actuales son capaces de ofrecer este nuevo
pueda dar respuesta casi inmediata a las sospechas tipo de tecnologías. Sólo podrán ofrecerlas aquellas
de virus transmitidas por el sistema, es ya, sin duda, que tengan departamentos de investigación, desarro-
la protección que las empresas necesitan. llo e innovación trabajando en ellas, y hayan sabido
Sin embargo, no todas las empresas desarrolladoras de detectar el problema con antelación.
Sobre el autor
Fernando de la Cuadra (Fdelacuadra@pandasoftware.com) es editor técnico internacional de Panda Software
(http://www.pandasoftware.com).
11 SOLO PROGRAMADORES
ACTUALIDAD
Ganadores
a do e del
de concurso
o s de programación
progra a ón webb con
o ASP.NET
AS . E
Acerca del concurso Primer premio y agradable pero con el máximo rigor, dicho
jurado se pronunció. Queremos aclarar a los
z Una consola de videojuegos Xbox más un
El pasado 1 de Abril fue la fecha elegida por lectores que los criterios que tuvo en cuenta el
Microsoft Ibérica para dar el pistoletazo de salida juego, mando a distancia para ver DVDs en jurado para hacer una valoración de los pro-
al concurso de programación web con ASP.NET la Xbox y una película DVD. yectos presentados fueron, a grandes rasgos, la
z Un visual Studio .NET 2003 Enterprise
que finalizó el pasado 15 de Junio. calidad de la capa de presentación, la proce-
Este concurso, patrocinado por distintos medios Developer. dencia del código, la usabilidad, la fiabilidad y
z Alojamiento gratuito ASP.NET con una de las
entre los que se encuentra Sólo Programadores, la originalidad. Bajo estos parámetros debe
ha nacido con la idea de animar a los desarrolla- empresas patrocinadoras durante un año. entenderse el veredicto del jurado, que se
z Suscripción gratuita a una de las revistas
dores a participar en una experiencia de progra- muestra en las tablas de la parte inferior.
mación con ASP.NET. La idea que ha perseguido patrocinadoras durante un año. El lector puede quedar sorprendido al ver que no
esta iniciativa ha sido difundir la tecnología Segundo premio todas las categorías tienen 1º, 2º y 3º premio. Esto
ASP.NET como una potente solución para aque- z Un juego para Xbox y una película DVD. ha sido así por decisión del jurado. El motivo de
llos programadores que deseen construir sitios z Un visual Studio .NET 2003 Professional. estas decisiones ha sido, siempre, intentar buscar
web. Sin duda la organización de una competi- z Alojamiento gratuito ASP.NET con una de las justicia y premiar a quien más ha trabajado. En
ción como esta es una fórmula original de entu- empresas patrocinadoras durante un año. este sentido, se consideró que, por ejemplo, no
siasmar, en primer lugar a aquellos que nunca han z Suscripción gratuita a una de las revistas había ningún proyecto dentro de la categoría
trabajado con ASP.NET, y en segundo lugar, a patrocinadoras durante un año. Portal que mereciera un 3º premio. Del mismo
aquellos programadores con horas de experiencia modo, se acordó que ningún proyecto de la cate-
que han querido evaluar sus conocimientos. Tercer premio goría Comunidad merecía un 1º premio. Por otro
Microsoft Ibérica ha dividido el concurso en 6 z Una película DVD. lado, en la categoría Tiempos el jurado consideró
categorías temáticas: Comercio, Informes, Portal, z Un Visual Basic .NET 2003 Sandard. que tan sólo uno merecía ser recompensado. Por
Comunidades, Tiempos y una categoría libre para z Suscripción gratuita a una de las revistas último, en la categoría Libre, se han dado dos 1º
dar rienda suelta a la creatividad. patrocinadoras durante un año. premios dado que el jurado decidió que ambos
trabajos eran merecedores de tal recompensa.
Premios puso a disposición del jurado 18 premios para que Desde estas líneas queremos agradecer a todos
éste pudiera premiar a las mejores aplicaciones. aquellos que habéis participado en el concurso,
Como en todo concurso, aquellos trabajos que y queremos animar a que, aquellos que no lo
han demostrado mayor dedicación e implicación Reunión y veredicto del jurado han hecho, lo hagan en posibles futuras edi-
han sido premiados. Es importante destacar que ciones. De igual modo, animamos al lector a
sólo por participar Microsoft Ibérica ha regalado Como ya anunció Microsoft Ibérica, el jurado visitar la web del concurso: http://www.micro-
dos entradas de cine a los concursantes. estuvo compuesto por una persona de cada soft.com/spanish/msdn/spain/concuasp. Allí se
Los premios a los que podía aspirar un participan- empresa de alojamiento, una persona de cada encuentran publicados todos los proyectos
te con su aplicación web dentro de una categoría revista colaboradora y personal de Microsoft presentados, y el lector podrá comprobar si en
son los que aparecen en el cuadro de la parte Ibérica. La reunión del jurado se celebró el día su opinión el jurado ha decidido correctamen-
superior. Por lo tanto, se deduce que Microsoft 23 de Junio y, en un ambiente muy distendido te o no.
SOLO PROGRAMADORES 12
ACTUALIDAD
Curso
ur o de ASP.NET
SP.NET
Colecciona
ole ci las
as 10
0 entregas
ega a partir
part r del próximo
p i o número
n ero
FRANCISCO CHARTE OJEDA objetos más importantes de la aplicación,
como Request, Response o Application. Uso
A medida que la conexión a Internet ha ido de servicios de la plataforma, como los de
popularizándose en todos los ámbitos, y al tiem- GDI+, para enriquecer las interfaces.
po que sus tecnologías fundamentales han pasa- 4 . Proceso de formularios: La mayoría de las
do a aplicarse también en el interior de empre- aplicaciones ASP.NET recogerán datos de
sas de todo tamaño y tipo, la conocida como formularios para su tratamiento. En esta
WWW se ha convertido en una importante pla- entrega se introducirán los conceptos más
taforma de ejecución de aplicaciones y permite importantes sobre formularios, así como el
avistar un futuro en el que usar un cliente web uso de controles de validación, manteni-
para acceder a un determinado programa será miento de estado entre solicitudes y con-
tan habitual como lo era hasta ahora la ejecu- ceptos similares.
ción local en Windows. 5 . Acceso a datos: El uso de bases de datos
Dejando atrás técnicas como los CGI y los filtros desde aplicaciones ASP.NET tiene unas
de servidor, las páginas de servidor: ASP, JSP y peculiaridades que se conocerán en esta
PHP, se han convertido en la primera opción a la entrega, junto con componentes específi-
ahora de diseñar aplicaciones web. ASP.NET es la cos para esta tarea y un avance de los con-
evolución de ASP y también la propuesta más troles de datos que aparecerán con ASP.NET
reciente en este campo, por lo que no es de 2.0 y que harán mucho más fácil el diseño
extrañar que cuente con múltiples ventajas res- de este tipo de proyectos.
pecto a las demás. 6 . Temas de seguridad: Esta sexta entrega se
A partir del próximo mes de septiembre, y duran- centrará en los temas relativos a seguridad,
te diez meses, Sólo Programadores publicará un como la autenticación de los usuarios, por
curso sobre ASP.NET con un formato similar a los ejemplo, en el acceso a bases de datos, etc.
publicados previamente sobre los lenguajes 7 . Servicios Web: ASP.NET esta pensado no úni-
Visual Basic .NET y C#. El contenido de este camente para el diseño de aplicaciones web,
curso, a grandes rasgos, será el siguiente: sino también para la creación de servicios
1 . Introducción: ASP.NET se ejecuta sobre la web. En esta entrega se describiría todo el
plataforma .NET, por lo que tiene acceso a proceso y los servicios de la plataforma que
todos los servicios de la FCL y puede utilizar- tendrían que utilizarse para ello.
se prácticamente cualquier lenguaje .NET. En 8 . Desarrollo de controles web: Además de
esta primera entrega se introducirán concep- los controles web incorporados en ASP.NET,
tos básicos, destacando la separación entre nosotros podemos desarrollar todos los que
interfaz y lógica, la estructura general de una pudiéramos necesitar simplemente cono-
aplicación ASP.NET, su funcionamiento en un ciendo unas reglas básicas. En esta entrega
servidor web externo (IIS o Cassini) o interno se describirán esas reglas y aportarán ejem-
(el integrado por WebMatrix o VS2005) y las plos prácticos.
herramientas que podemos usar, incluyendo 9 . Páginas maestras: Una de las novedades
el nuevo Visual Web Developer Express. más interesantes de ASP.NET 2.0 será la
2 . Herramientas disponibles: Descripción de las incorporación de las páginas maestras,
características más importantes, en lo relati- tanto al nivel de la infraestructura de eje-
vo a ASP.NET, de Visual Studio .NET 2003, cución como al nivel de diseño, en el entor-
WebMatrix y los futuros productos Visual no de VS2005. Esta penúltima entrega des-
Studio 2005 y Visual Web Developer Express. cribiría el funcionamiento y uso de páginas
De esta forma el lector podrá elegir la que maestras para abreviar el ciclo de desarro-
crea más adecuada a sus necesidades, sabien- llo de una aplicación web.
do que Sólo Programadores entregará gratui- 10. Skinning y otras características de
tamente WebMatrix, Visual Web Developer ASP.NET 2.0: En esta última entrega se
Express y otros recursos actuales. abordarán otras características del nuevo
3 . Diseño de interfaces: Cómo usar controles ASP.NET 2.0, entre ellas la posibilidad de
HTML y controles WebForm para diseñar modificar de manera global la apariencia
interfaces de usuario, generando código en el visual de las interfaces (skinning) y algunos
cliente y en el servidor. Descripción de los de los nuevos controles.
SOLO PROGRAMADORES 14
MIDDLEWARE
Migración de aplicaciones:
de VB 6.0 a .NET (y III)
MARINO POSADAS (M.V.P. Visual Developer - VISUAL C#) Esta posibilidad resulta muy útil si hay que
migrar en varias fases un sitio de gran tamaño y
En esta última entrega de nuestro en constante cambio a ASP.NET. Además, si se
propone la migración a ASP.NET como un objeti-
curso sobre migración de vo a largo plazo, se deberán mejorar al máximo
aplicaciones, estudiaremos el caso el diseño y la arquitectura. En situaciones como
concreto de la migración de ésta, de migraciones paulatinas, la coexistencia
se convierte en una necesidad.
aplicaciones web ASP. Nos
marcaremos como objetivo migrar El grado de compatibilidad
nuestra aplicación web a ASP.NET, Aunque el grado de compatibilidad es alto, no
destacando aquellos aspectos más obstante, existen problemas a la hora de migrar
aplicaciones reales, no tanto por el conjunto de
delicados del proceso. componentes equivalente sino por la diferente
arquitectura en la que estos se integran.
Fundamentalmente, podemos dividir los cambios
La migración de aplicaciones web realizados en los siguientes bloques:
z Cambios de estructura y la gestión del estado
La migración de aplicaciones web tiene carac- de las aplicaciones.
terísticas especiales vinculadas a la platafor- z Cambios en las APIs principales.
ma y al servidor de páginas (en este caso, IIS). z Cambios en la configuración de las aplicacio-
El esquema utilizado en .NET es el de la sepa- nes.
ración total entre páginas de presentación y z Cambios relacionados con la seguridad.
código funcional (si bien pueden utilizarse z Cambios en el lenguaje Visual Basic.
estructuras de código mixtas, al estilo anti- z Cambios relacionados con COM.
guo, por compatibilidad). Ya nos hemos referido en artículos anteriores a
Esto significa que los elementos que componen los cambios en el lenguaje Visual Basic y a los
la parte visual de la página no se entremezclan componentes COM. Vamos a comentar, somera-
con el código fuente que aporta el mecanismo mente, el resto.
funcional de nuestro código produciendo pági-
nas mucho más claras de mantener y especial- Cambios de estructura y la gestión del
mente, de depurar. Además, en ASP.NET se intro- estado de las aplicaciones
duce el concepto de controles de servidor, que no
son sino componentes más complejos que el Los cambios estructurales son aquellos que afec-
simple HTML, que el desarrollador puede incluir tan al diseño y al estilo del código de las páginas
en las páginas, y que se resuelven en elementos Active Server. Es necesario tener en cuenta
HTML cuando la página es servida al cliente. varios de estos cambios para garantizar que su
Respecto a ASP en convivencia con ASP.NET, código funcionará en ASP.NET.
ASP.NET separa aclararemos al lector que las aplicaciones de Bloques de código: declaración de funciones
ambos sistemas pueden ejecutarse a la vez en un y variables
la presentación mismo servidor sin que se vean afectadas nega- En ASP se pueden declarar subrutinas y variables
tivamente entre sí. Esto se debe principalmente globales entre los delimitadores del código:
de la lógica a que las dos tecnologías utilizan diferentes <%
extensiones de archivos (.asp frente a .aspx) y
de negocio modelos de configuración (metabase/registro Dim X
frente a archivos de configuración basados en Dim str
XML). Ambos sistemas tienen motores de proce-
samiento totalmente independientes. Esto impli- Sub MySub()
ca que una aplicación puede ejecutar ASP mien- Response.Write "Esto es una cadena."
tras otra parte trabaja con ASP.NET.
SOLO PROGRAMADORES 16
MIDDLEWARE
Migración de aplicaciones: de VB 6.0 a .NET (y III)
End Sub
Las funciones de procesamiento ya no Administración de estado
%> son válidas Si la aplicación emplea los objetos intrínse-
En ASP los desarrolladores llegaron a la cos Session o Application para almacenar la
En ASP.NET, esta opción ya no está permiti- conclusión de que podían obtener mejores información de estado, podrá seguir usán-
da. En su lugar, se deben declarar todas las resultados utilizando las denominadas dolos en ASP.NET sin ningún problema.
funciones y variables dentro de un bloque "funciones de procesamiento" (Render Además contará con varias opciones adi-
<script>: Functions). Una función de procesamiento cionales para la ubicación donde almacene
<script language = "vb" runat = "server"> es, básicamente, una subrutina que contie- el estado.
ne bloques de HTML insertados en el cuer- Opciones de administración de estado
Dim str As String po. Por ejemplo: En ASP.NET, existen opciones adicionales
Dim x, y As Integer <%Sub RenderMe() para el modelo de almacenamiento de esta-
do que permitirán por fin ir más allá de un
Function Add(I As Integer, J As %> sólo servidor web y admitirán la adminis-
Integer) As Integer <h4>Texto a procesar</h4> tración de estado en toda una red.
Return (I + J) Estas opciones se pueden configurar en la
<%End Sub sección <sessionState> de su archivo
End Function
RenderMe web.config del siguiente modo:
</script> <sessionState
%>
Mezcla de lenguajes de programación mode="Inproc"
En ASP se puede elegir principalmente A pesar de que se pueden obtener resulta- stateConnectionString="tcpip=
entre dos lenguajes de programación: dos interesantes con este tipo de funciones,
127.0.0.1:42424"
VBScript o Microsoft JScript. Además, exis- esta forma de escribir código ya no está
te total libertad para mezclar y combinar permitida en ASP.NET. Probablemente se sqlConnectionString="data source=
bloques de secuencias de comandos en una mejore con el cambio. Estoy seguro de que 127.0.0.1;user id=sa;password="
misma página. alguna vez se ha encontrado con funciones
En ASP.NET, podemos elegir entre tres que rápidamente se vuelven ilegibles o son cookieless="false"
lenguajes de programación: C#, Visual imposibles de administrar tan pronto se timeout="20"
Basic .NET, o JScript. VBScript no existe empiezan a mezclar y combinar código y
en la plataforma .NET porque está total- HTML de esta manera. La forma más senci- />
mente incluido en Visual Basic .NET. Si lla de que esto funcione en ASP.NET consis-
bien es cierto que se puede utilizar cual- te en reemplazar los resultados HTML por El atributo de modo especifica la ubicación
quiera de estos lenguajes, es importante llamadas a Response.Write, como se mues- donde desea guardar la información de
recordar que, a diferencia de lo que suce- tra a continuación: estado. Las opciones disponibles son Inproc,
de en ASP, no se pueden mezclar en la <script language="vb" runat="server"> StateServer, SqlServer y Off.
misma página. Es perfectamente factible
que la Página1.aspx de su aplicación con- Sub RenderMe() Cambios en las APIs principales
tenga código de C# mientras la Response.Write("<h4>Texto a pro
Página2.aspx de la misma aplicación con- Las APIs principales de ASP están compues-
cesar</h4>")
tenga código de Visual Basic .NET. La tas de algunos objetos intrínsecos (Request,
única limitación es que no pueden mez- End Sub Response, Server, etc.) y sus métodos aso-
clarse en la misma página. </script> ciados. Salvo algunos cambios sencillos,
Nuevas directivas de página estas API siguen funcionando correctamen-
En ASP todas las directivas deben colocarse <% te en ASP.NET. Todos los cambios están
en la primera línea de una página y dentro Call RenderMe() relacionados con el objeto Request y se
del mismo bloque delimitador. Por ejemplo: muestran en el cuadro "Cambios en la API".
<%LANGUAGE="VBSCRIPT" CODEPAGE="932"%>
%> Como se puede observar, los cambios son
<%@OutputCache Duration="60" VaryByPar Request(item) En ASP, este método devuelve una serie de cadenas. En ASP.NET, devuelve un
am="none" %> objeto NameValueCollection.
Las directivas se pueden situar en cual- Request.QueryString(item) En ASP, este método devuelve una serie de cadenas. En ASP.NET, devuelve un
quier lugar del archivo .aspx, aunque por objeto NameValueCollection.
lo general suelen colocarse al principio
del archivo. Además, en ASP.NET se han Request.Form(item) En ASP, este método devuelve una serie de cadenas. En ASP.NET, devuelve un
incluido varias directivas nuevas. objeto NameValueCollection.
17 SOLO PROGRAMADORES
MIDDLEWARE
SOLO PROGRAMADORES 18
MIDDLEWARE
Migración de aplicaciones: de VB 6.0 a .NET (y III)
reciben permiso para tener acceso, mien- ASP. Si cuenta con esta función, necesitará VB.NET, por el contrario, estamos ante un
tras que al resto se le deniega: habilitarla en el archivo Web.config de la lenguaje totalmente orientado a objetos
<authorization> siguiente manera: con una implementación elegante de la
<identity> OOP que incluye todas sus características
<allow users="España\Juancho, fundamentales, a excepción de la sobrecar-
USA\Claudio"/> <impersonation enable = "true"/> ga de operadores (si bien esta característi-
<deny users="*"/> </identity> ca, aparecerá en la próxima versión, Visual
Studio .NET 2005, al igual que la muy apre-
</authorization>
Consideraciones relativas al lenguaje ciada cualidad de modificar código en
Representación (Impersonation) Visual Basic depuración, y volver a ejecutar "hacia
A modo de recordatorio, la representación atrás", sin necesidad de recompilación).
es el proceso por el cual un objeto ejecuta En lo tocante al lenguaje, los cambios han Orientación a objetos
código con la identidad de la entidad en sido significativos, pero especialmente, hay La implementación de la OOP es realmen-
cuyo nombre actúa. En ASP, la representa- que llamar la atención sobre la propia filo- te exquisita. Todo son objetos, sin excep-
ción permite ejecutar código en nombre de sofía. Ahora, al igual que sucede con el ción (no existen tipos primitivos misterio-
un usuario autenticado. Por otra parte, los resto de lenguajes .NET, VB.NET es total- sos, como en Java, por ejemplo), y la
usuarios pueden trabajar de forma anónima mente orientado a objetos. Eso significa herencia puede realizarse a partir de cual-
utilizando una identidad especial. ASP.NET una modificación radical de los esquemas, quier clase heredable (marcada como
no utiliza representación por solicitud de ya que VB en versiones anteriores sólo Inheritable), de la inmensa jerarquía de
manera predeterminada, a diferencia de soportaba la OOP de forma parcial. En clases de .NET, o de nuestras propias jerar-
Asistente
de migración
de código.
19 SOLO PROGRAMADORES
MIDDLEWARE
valente al antiguo Integer, que ahora es siempre nos gusta incluir en los procesos de
equivalente al tipo Long de VB6). instalación en cliente: Creación de grupos y
También es posible la declaración de varia- carpetas en el Menú de Inicio, ubicación de
bles "in-line" dentro de los bucles: iconos de acceso directo en el escritorio,
For Each X as string In Colección_de_ control de todo el proceso de instalación,
pudiendo personalizar el aspecto de cada
Strings
una de las pantallas de solicitud de infor-
'proceso de strings mación inicial, ubicación de archivos de la
Next aplicación, y lo que es mejor, la posibilidad
quías. De igual forma, disponemos de poli- de intercalar entre cualquiera de las fases
morfismo real, haciendo innecesarios los y las declaraciones multivariable para un del proceso llamadas a nuestros propios
conocidos parámetros opcionales (natu- mismo tipo, con asignación de valor inicial: programas, para garantizar que cualquier
ralmente, el polimorfismo, se extiende Dim x,y,z as Integer = 0 otro procedimiento necesario en el cliente
hasta los métodos constructores). a la hora de lanzar la aplicación se encuen-
La encapsulación, (que era una de las También es notable el cambio respecto al tre adecuadamente instalado.
características soportadas anteriormen- tratamiento de las excepciones, que (por Distribución de aplicaciones Windows
te) se ha mejorado notablemente con la fin) pasa a ser estructurado mediante vía Internet
separación conceptual que permiten las una sentencia Try-Catch-Finally, en Además de esa posibilidad, podemos distri-
Properties, pero mejoradas en su sintaxis detrimento de la antigua On-Error. buir aplicaciones Windows a través de
y capacidades. También se han añadido Naturalmente, en lo que respecta al len- Internet. Hay que tener en cuenta que los
asistentes que permiten la migración del guaje existen más cambios, y recomen- EXEs son autocontenidos y se ejecutan
código de VB6 a VB.NET de forma direc- damos al lector cualquiera de la literatu- siempre bajo la supervisión del CLR
ta, insertando el código convertido en la ra al respecto que se encuentra publica- (Common Language Runtime). De modo
posición del cursor, tal y como podemos da en papel o en la red, donde encontra- que si los permisos establecidos en la
ver en la figura. rá listados exhaustivos de dichas diferen- máquina cliente son los adecuados, es posi-
Es más, debido a que el lenguaje VB no cias. Destacamos, por ser la fuente origi- ble descargar y ejecutar programas de una
diferencia entre mayúsculas y minúsculas, nal, el sitio web http://msdn.micro URL utilizando una sintaxis del tipo:
el "Intellisense" del editor de código fuente soft.com/vb con abundante información http://MiSitioWeb/MiEjecutable.EXE
es capaz de recordarnos errores en la al respecto (incluyendo jugosos aparta-
estructura del código, como por ejemplo, el dos de código fuente y ejemplos, muy Lo que proporciona además, nuevas posibi-
intento de sobrescribir un método que no recomendables antes de abordar un pro- lidades de actualización de aplicaciones de
haya sido marcado como overridable en la ceso de migración real). forma remota.
clase antecesora, u otras características de Incluso podemos hacer referencia a esos
formación polimórfica. El modelo de distribución de ejecutables mediante código fuente produ-
Otra característica notable, es la capacidad aplicaciones en .NET ciendo su descarga a voluntad, mediante
de generar código de forma "intencional". un código similar al siguiente:
Imaginemos que el usuario declara que una Para concluir esta revisión de las caracte- Dim a as [Assembly] = Assembly.LoadFr
clase implementa una interfaz determina- rísticas de la migración a VB.NET, no pode-
om("file://C:/usr/bin/xyzzy.dll");
da, por ejemplo. Como respuesta a ello, el mos pasar por alto una de las mejores y
generador de código del IDE de Visual más apreciadas cualidades de esta plata- return a.CreateInstance("Programa.Ve
Studio produce toda la estructura necesa- forma: la capacidad de distribuir aplicacio- ntana1");
ria de código sólo a falta de la compleción nes sin necesidad de tocar el registro, y
por parte del usuario. pudiendo, incluso, hacer la distribución Y, siguiendo esta misma lógica, el código
De esta manera, estaremos trabajando con web de aplicaciones Windows. anterior podría ser parte de un código de
un "asistente inteligente" permanentemen- Las aplicaciones .NET generan EXEs o DLLs script en una página web, sustituyendo en
te activado, lo cual facilitará muchísimo la denominadas ensamblados (assemblies), el método LoadFrom() el acceso file:// por
edición de código. que se encuentran autodescritas en su su correspondiente protocolo de Internet
Por lo demás, otros asistentes convertirán cabecera (llamada Manifest), con lo que se (http://).
código de la versión Visual Basic .NET 2002 hace innecesario el uso del Registro de
a la 2003 (o a la venidera 2005), de forma Windows en el proceso de instalación, de Conclusiones
automática, sin necesidad de ningún tipo forma que .NET Framework libera a los pro-
de conversión. gramadores de Visual Basic de las ataduras Muchas son las novedades aportadas por la
Tipos soportados y no soportados que suponían los problemas de versiones de plataforma .NET al desarrollador y conse-
Otros cambios notables tienen que ver con los componentes, más conocido como cuentemente, muchas las posibilidades que
las variables y algunas de las estructuras "Infierno de las DLL" (DLL Hell). se ofrecen a la hora de abordar un proceso
clásicas del mismo. Por ejemplo, debido a Por si esto fuera poco, un nuevo tipo de complejo como es una migración completa
que todos los lenguajes en .NET siguen un proyecto, denominado Proyecto de de un programa. No obstante, nunca antes
patrón común de tipos, los tipos Variant y Instalación y Distribución, se encuentra había resultado tan poderoso el cambio, ni
Currency desaparecen, pasando a ser, res- disponible desde Visual Studio .NET, con lo tan sencillo el proceso. Y podemos aventu-
pectivamente, Object y Decimal. Además que nos facilita enormemente la creación rar, que, una vez concluido el trabajo, el
aparecen tipos nuevos, como Short (equi- de los otros elementos necesarios que resultado merecerá la pena.
SOLO PROGRAMADORES 20
MIDDLEWARE
SOLO PROGRAMADORES 22
MIDDLEWARE
Tratamiento de XML desde Java (y III): un caso práctico
23 SOLO PROGRAMADORES
MIDDLEWARE
superior derecha aparecen tres botones, Añadir, z Cargar: Carga un archivo de agenda Opciones "nuevo", "cargar" y
Modificar y Borrar, que servirán para incluir, existente. "guardar"
modificar o eliminar contactos, respectivamen- z Guardar: Guarda los datos del archivo de
te. En la parte inferior se han proporcionado agenda con el que se esté tratando. Como se ha dicho en el apartado anterior se ha
algunos campos para mostrar los datos de los z Salir: Sale de la aplicación. creado una clase específica, ManejadorMenu,
contactos que se seleccionen en la lista. Se ha En el listado 3 se muestra un fragmento de para manejar las selecciones del menú. Las
provisto también a la aplicación de un menú código que representa el esqueleto de la apli- acciones que se pueden realizar desde el menú
Archivo con las opciones siguientes: cación AgendaJAXB. Se observa que la clase son las de crear un nuevo archivo de agenda,
z Nuevo: Crea un nuevo archivo de agen- principal, AgendaJAXB, hereda de la clase cargar uno creado o guardar los cambios del
da y permite operar con él. JFrame. Antes de definir las clases de la apli- actual, así como salir de la aplicación.
SOLO PROGRAMADORES 24
MIDDLEWARE
Tratamiento de XML desde Java (y III): un caso práctico
25 SOLO PROGRAMADORES
MIDDLEWARE
Agradecimientos
Se quiere agradecer al grupo AWEG (Adaptive Web Engineering Group) de la Universidad de Salamanca sus aportaciones y consejos para la elabora-
ción de este artículo. Este trabajo ha sido parcialmente financiado por el proyecto SA017/02 de la Junta de Castilla y León (España).
Referencias
[ 1 ] SUN MICROSYSTEMS. (2004). JAXB (Java API for XML Binding). http://java.sun.com/xml/jaxb.
[ 2 ] WORLD WIDE WEB CONSORTIUM. (2000). XML Schema, http://www.w3.org/XML/Schema.
[ 3 ] WORLD WIDE WEB CONSORTIUM. (2004). eXtensible Markup Language (XML), http://www.w3.org/XML.
27 SOLO PROGRAMADORES
MIDDLEWARE
SOLO PROGRAMADORES 28
MIDDLEWARE
Enlace de datos XML con Castor
29 SOLO PROGRAMADORES
MIDDLEWARE
LISTADO 3 (continuación)
{ this._nombre = _nombre; }
public String get_email()
{ return _email; }
public void set_email(String _email)
{ this._email = _email; }
}
SOLO PROGRAMADORES 30
MIDDLEWARE
Enlace de datos XML con Castor
31 SOLO PROGRAMADORES
MIDDLEWARE
SOLO PROGRAMADORES 32
BASES DE DATOS
Acceso
c so a datoss
con
n ADO.NET
DO E (y( III)
I
MIGUEL EGEA (Microsoft M.V.P. en SQL Server), Sinergia No hace mucho que han tenido ustedes la
Tecnológica S.L. oportunidad de leer en esta misma publica-
ción un artículo sobre nuevos paradigmas en
Terminamos la serie de artículos sobre las formas de tratar las transacciones, sin
ADO.NET hablando de una embargo y en mi opinión, el famoso ACID,
Atomicidad, Consistencia, Aislamiento
miscelánea de cuestiones relacionadas (Isolation en inglés) y Durabilidad tiene plena
con el acceso a datos, todas vigencia hoy en día. Veremos las formas que
tiene ADO.NET de tratar las transacciones y
importantes, como por ejemplo el qué significan los niveles de aislamiento.
tratamiento de transacciones, que Trataremos los campos largos, es decir cómo
introducir datos grandes en una base de datos,
pueden marcar la diferencia entre y cómo recuperarlos y usarlos en nuestras
aplicaciones bien hechas y aplicaciones. En concreto veremos cómo
introducir esos datos desde una aplicación
aplicaciones mediocres. Windows Forms tradicional y cómo extraer esa
información en un datagrid desde ASP.NET.
Sin embargo para comenzar veremos el méto-
Introducción do update del objeto DataAdapter, veremos
sus eventos y proporcionaremos pistas sobre
En esta última entrega veremos el tratamien- cómo incluir tratamiento personalizado a las
to de transacciones, las formas más adecuadas excepciones que puedan producirse.
de usar el método update del DataAdapter Hablaremos de los problemas que puede oca-
unido al enlace a datos (databinding) y vere- sionar el bloqueo optimista, tipo por defecto si
mos también el tratamiento de los campos usamos DataSets y las soluciones que pode-
largos (Binary Large Objects, blobs). mos adoptar.
SOLO PROGRAMADORES 34
BASES DE DATOS
Acceso a datos con ADO.NET (y III)
35 SOLO PROGRAMADORES
BASES DE DATOS
SOLO PROGRAMADORES 36
BASES DE DATOS
Acceso a datos con ADO.NET (y III)
InsertCommand.Parameters.Add
("@Fotografia",SqlDbType.VarBinary,0,
"@Fotografia").Value=buffer;
De esta forma conseguimos introducir
la información binaria en campos de
tipo imagen (en este caso) con la limi-
tación que nos imponga el motor de
base de datos (2GB en el caso de SQL-
Server).
Recuperar campos largos de una base de
datos con ADO.NET
Decíamos que la segunda problemática
era recuperar la información y mostrarla
por pantalla. Para hacer esto hemos ele-
gido realizar una aplicación web, el
resultado es el que puede verse en la
figura 4.
A lo largo de las siguientes líneas vere-
mos los pasos que hemos seguido para
conseguir mostrar estas imágenes.
Algunos de los pasos tienen más que ver
con ASP.NET que con ADO.NET y no
entraremos demasiado en detalle, sin
embargo si que comentaremos los trozos
de código que tienen la mayor responsa- Figura 4.
El entorno de desarrollo preparado para albergar las imágenes de la base de datos.
bilidad en el resultado final.
Nuestra aplicación web tiene dos for-
mularios web (extensión aspx). Como
seguramente conocerán la mayoría de LISTADO 6 Recuperando una fotografía
los lectores dentro de los proyectos
private void Page_Load(object sender, System.EventArgs e)
ASP.NET para cada formulario tenemos {
dos partes, la definición y el código que // Variable para la conexión a la base de datos
le da sustento. Luego el motor de SqlConnection con;
ASP.NET se encarga de traducir todo SqlCommand cmd;
SqlDataReader dr;
este código a su resultado HTML y // recogemos el código de empleado del que nos están solicitando la fotogra-
devolver ese código al navegador del fía
cliente (que no necesita por supuesto int codEmpleado;
codEmpleado=int.Parse(this.Request.Params["idEmpleado"].ToString());
tener nada instalado). Dentro de la // obtenemos la cadena de conexión del web.config (deberíamos encriptarlo)
parte que define la página (la más // ConfigurationSettins de System.Configuration
parecida al HTML) hemos usado un con = new sqlConnection(ConfigurationSettings.AppSettings["conexion"]);
// abrimos conexión a BBDD
control de servidor, en concreto un con.Open();
DataGrid. // Recojamos el valor que nos están demandando
Hay muchos ejemplos del manejo de este cmd= new SqlCommand("Select Fotografia From blob where
control en esta dirección URL: codEmpleado=@CodEmpleado",con);
// Suministramos el parámetro código de empleado
http://samples.gotdotnet.com/quicks cmd.Parameters.Add
("@CodEmpleado",SqlDbType.Int,4,"@codEmpleado").Value=codEmpleado;
tart/aspplus/samples/webforms/ctrlref // Usamos un Reader para devolver la información
dr=cmd.ExecuteReader(CommandBehavior.SequentialAccess);
/webctrl/datagrid/doc_datagrid.aspx Response.Buffer=true;
Response.Expires=0;
El lector puede acudir a este enlace para Response.Clear();
ampliar la información que se está pro- // Devolvemos la imagen
Response.ContentType="image/bmp";
porcionando. // Recorremos el reader
En la sección HTML de nuestro formula- while (dr.Read())
rio hemos creado una columna de plan- {
// Escribimos la respuesta
tilla y en esa columna hemos personali- Response.BinaryWrite((byte [])dr["Fotografia"]);
zado la acción que se ejecutará cuando }
se dibuje nuestra página. Esta acción // Cerramos y liberamos todos los objetos
dr.Close();
será llamar al código subyacente, para cmd.Dispose();
construir dinámicamente la URL de la con.Close();
que nos traeremos la imagen (obsérvese // Y acabamos
el listado 5). }
Response.End();
37 SOLO PROGRAMADORES
BASES DE DATOS
base de datos evidentemente no hay nin- dito y si no se puede por un error, sim-
gún problema, pero esto no sucede, nor- plemente deshacemos ese trozo de códi-
malmente decenas o cientos de personas go, no toda la transacción.
se conectan a las aplicaciones empresa- Algunos de ustedes estarán preguntán-
riales de una compañía. Incluso por dose cuándo se crean estas transaccio-
millares pueden conectarse si estamos en nes. Pues bien, se crean a partir de la
un desarrollo web, es por tanto muy función BeginTransaction del objeto
importante conocer qué está haciendo Connetion.
ADO.NET con las transacciones y en qué Este método declara el comienzo de
momento. una transacción y asegura que las ope-
En este mundo de las transacciones la raciones que se realicen dentro de esa
regla es muy fácil, para abrir una trans- transacción cumplirán el ACID: se
acción hay que esperar al último momen- harán completas o no se harán en
to, para cerrarla sin embargo, cuanto absoluto, los cambios validados perma-
antes mejor. necerán en la base de datos, no dejarán
Figura 5. El Objeto Transacción la base de datos en un estado inconsis-
Algunas de las propiedades y métodos que tiene el
objeto transacción. Utilizaremos el objeto transacción cuan- tente y garantizarán el aislamiento de
do toda la problemática transaccional la transacción:
La función ConstruyeURL tiene por esté en ADO.NET, es decir en la comuni-
// creamos una transacion y la asocia
único cometido devolver un string con cación con un servidor de base de datos.
una dirección del estilo: Si hay más de un servidor involucrado (un mos a nuestra primera conexión.
SOLO PROGRAMADORES 38
BASES DE DATOS
Acceso a datos con ADO.NET (y III)
Figura 6.
Aplicación que utiliza lecturas repetibles y lecturas confirmadas para demostrar las diferencias.
39 SOLO PROGRAMADORES
EL FUTURO
Sólo Programadores y
Mundo Linux en formato
electrónico
REVISTAS PROFESIONALES económicas, de movilidad o de lejanía, las revis-
tas en papel no suponen la mejor solución.
Por fin el deseo de muchos lectores Revistas Profesionales te anima a que envíes
va a hacerse realidad. En poco más un correo electrónico a rpsuscripciones@revis-
tasprofesionales.com, telefonees al 913 048 764
de un mes los contenidos de Sólo o envíes un fax al 913 271 303, indicando cuál
Programadores y Mundo Linux crees que sería el precio justo para la suscripción
digital anual (12 ejemplares) a una de las revis-
podrán descargarse desde la Red en tas. Independiente del lugar de residencia, por
formato PDF. unos pocos euros nuestras revistas serán accesi-
bles. El pago de la suscripción digital se realiza-
rá por los procedimientos habituales, y el sus-
criptor recibirá por correo electrónico un identi-
El mejor servicio para nuestros lectores ficador y una contraseña que le darán acceso a
descargar de la web las revistas a las que se ha
Queremos aprovechar, en este caluroso mes de suscrito. La suscripción digital también incluirá
agosto y a pocos días de iniciar una nueva tem- el acceso al material de apoyo que habitualmen-
porada, el inminente lanzamiento de una nueva te se distribuye en el CD-ROM.
plataforma web que servirá, entre otras cosas,
para ofrecer el servicio de descarga de los conte- Creciendo junto a la Sociedad de la
nidos de las revistas Sólo Programadores y Información
Mundo Linux mediante una suscripción específi-
ca para ello. Las posibilidades de crecimiento que se abren
El funcionamiento de dicho servicio será con una plataforma web de estas características
muy sencillo. El lector, después de formali- son inmensas. Esta plataforma web supondrá un
zar la correspondiente suscripción digital, nuevo activo para nuestras revistas Sólo
podrá descargar los contenidos de cada Programadores y Mundo Linux, un nuevo recurso
número de la revista a la que se haya suscri- que sabremos aprovechar al máximo, siempre
to (Sólo Programadores y/o Mundo Linux), buscando el beneficio de nuestros lectores.
en formato PDF. Este proyecto permitirá impulsar la creación de
Esta modalidad de suscripción permitirá a los comunidades virtuales entre nuestros lectores,
lectores, cualquiera que sea su lugar de residen- habilitar espacios web para el intercambio de
cia, disponer de los contenidos publicados de opiniones sobre los contenidos publicados y faci-
forma inmediata y almacenarlos, conservarlos litar la comunicación entre lectores, autores y
utilizarlos y desplazarlos sin los inconvenientes editorial.
que acarrea el formato en papel. Todos estos objetivos sólo pueden conseguirse
Esta iniciativa se enmarca en el afán de innova- con una apuesta valiente y decidida y, pese al
ción que siempre ha caracterizado a nuestras esfuerzo que supone levantar un proyecto como
publicaciones. Entendemos que uno de los pará- este, se está poniendo toda la ilusión y el empe-
metros que evalúan el servicio que ofrecemos a ño para que el resultado sea un orgullo para los
nuestros lectores es la facilidad de acceso a lectores que hacen posible que Sólo
nuestros contenidos, y creemos que con esta pla- Programadores y Mundo Linux se hayan mante-
taforma web ofreceremos un servicio muy espe- nido en una posición líder en sector a lo largo de
rado y deseado por muchos de vosotros para los tantos años, siendo las más veteranas y, con esta
que, por problemas de espacio o por cuestiones nueva iniciativa, las más innovadoras.
SOLO PROGRAMADORES 40
DISEÑO
Introducción
rodu ión all software
soft a
modernono orientado
or a o
a objetos
b etos
JAVIER SANZ ALAMILLO tra mostrándose como la panacea en la resolu-
ción de problemas. Otros, con un carácter más
En la actualidad, la variedad de técnico y menos ambicioso, se presentan como lo
métodos software para la que son y para lo que se pensaron, si bien estos
suelen ser los menos y desafortunadamente por
construcción de aplicaciones provoca lo general los más prácticos y útiles.
que decidirse por uno sin conocer las También en el mercado nos encontramos los
métodos que sin serlos, se aplican como si lo
bases de los mismos pueda generar fueran.
dudas e incertidumbre en la De todos modos, todos estos mecanismos para
la construcción de aplicaciones orientadas a
consecución de un proyecto. En este objetos se basan en unos conceptos que si bien,
sentido, es importante conocer cómo la bibliografía general no suele presentar por
centrarse más en otros asuntos principales,
encajan los principios teóricos de la resultan de gran interés para el desarrollador,
OOP y los métodos de desarrollo porque gracias a los mismos puede comprobar
la calidad de la metodología que esta aplican-
actuales. do, las facilidades y las carencias que contiene,
con lo que podrá tomar decisiones más afortu-
nadas y precisas. ¿Qué es el software orientado
Introducción a objetos? ¿Qué es un lenguaje orientado a
objetos? Todas estas cuestiones, triviales ini-
El objetivo de este artículo es mostrar al lector cialmente y ciertamente sin respuesta técnica
que existen formalismos sobre el software orien- para la mayoría de los desarrolladores, ayuda-
tado a objetos, y que los métodos y metodologí- rán al lector en las múltiples decisiones que
Las herramientas as que existen en el mercado y que se venden tiene que tomar para afrontar un proyecto soft-
como invenciones de los autores, no son mas que ware orientado a objetos.
que hay en el "implementaciones" de la teoría en hechos con-
cretos, por lo que cada autor/creador interpreta El software moderno orientado a objetos
mercado son los formalismos y los adaptada a sus necesida-
des. UML es un caso claro de ello. El lector debe de estar ciertamente cansado,
implementaciones En estas fechas, el mundo del software orientado aburrido de toda la documentación que existe
a objetos está sufriendo una auténtica revolu- en el mercado sobre la ingeniería del softwa-
concretas de la ción. Los más dispares métodos saltan a la pales- re que tras una lectura inicial acaba en cual-
quier sitio menos en el de trabajo.
teoría de la OOP Lamentablemente, no son muchos los libros
que ayudan en esta tarea y analizar esta cir-
cunstancia nos llevaría por otros caminos,
pero principalmente se debe a que la técnica
propuesta no ha sido bien presentada ni defi-
nida por ninguno de los auténticos gurús de la
informática mundial hasta escasos años.
Esta problemática condujo a que ciertos perso-
najes avezados se aventuraran sin ningún tipo de
complejos a escribir libros tratando conceptos
que no están claros ni para los propios creado-
Sitio web de la OMG.
SOLO PROGRAMADORES 42
DISEÑO
Introducción al software moderno orientado a objetos
43 SOLO PROGRAMADORES
DISEÑO
SOLO PROGRAMADORES 44
DISEÑO
Introducción al software moderno orientado a objetos
45 SOLO PROGRAMADORES
DISEÑO
SOLO PROGRAMADORES 46
DISEÑO
Introducción al software moderno orientado a objetos
47 SOLO PROGRAMADORES
ALGORITMOS
SOLO PROGRAMADORES 48
ALGORITMOS
Direct3D 9.0 avanzado (II)
49 SOLO PROGRAMADORES
ALGORITMOS
estar calculando matrices de transformación o mos realizar un efecto de transición, donde una
aplicar scripts de animación. También es útil imagen va desapareciendo gradualmente y va
para entornos virtuales, como el de videojuegos, apareciendo otra, seguiríamos los pasos que
donde tengamos figuras que realizan siempre los vamos a comentar. En principio, renderizariamos
mismos movimientos, con lo que el proceso gana las dos imágenes. A continuación, usaríamos el
Stencil Buffer en rendimiento ya que es el procesador grafico el buffer Stencil para controlar los píxeles de cada
encargado de calcular los cambios en la figura. imagen que se dibujarían en la superficie de des-
hace referencia a Si el lector estudia el material de apoyo adjunta- tino. A la hora de definir el proceso de transición,
do en el CD-ROM comprobará la facilidad de se podrían definir una serie de máscaras para el
un nuevo buffer aplicar esta técnica. buffer Stencil y copiarlas sucesivamente en el
buffer. Otra posibilidad podría ser definir una
que incorporan las Píxel Pipeline máscara base para la primera imagen que se iría
modificando gradualmente.
tarjetas gráficas La tubería de píxel se encarga de aplicar diferen- Para realizar este efecto, al principio de la
tes efectos en la etapa de proceso de un píxel. transición se deben fijar las funciones que
mas actuales Las técnicas empleadas son programadas y cal- indican el comportamiento del buffer Stencil
culadas a nivel de píxel, con lo que debemos de y de la mascara, con lo que se indica que la
tener en cuenta que los cálculos se realizarán mayoría de los píxeles de la imagen inicial
cuando se obtenga el valor del píxel que será pasan el test del buffer Stencil. Esto permite
renderizado. La tubería de píxel sigue esta que la imagen inicial ocupe prácticamente
secuencia de operaciones: toda la superficie dibujada. Obviamente, la
1 . Ajuste de triángulos. mayoría de los píxeles de la imagen final no
2 . Aplicación de Pixel Shader. Esta operación pasan el test, con lo que no se dibujarían. El
reemplaza a la aplicación de formatos fijos de proceso continuaría en sucesivos frames,
multitextura. Se realiza la aplicación de colo- modificando la mascara que se ha estableci-
res, coordenadas de textura, texturas, trans- do en el buffer, con lo que poco a poco, van
parencias, etc. disminuyendo el numero de píxeles de la pri-
3 . Niebla mera imagen que pasan el test. De esta
4 . Chequeo de valores alfa, stencil, profundidad. manera iría desapareciendo la imagen inicial
5 . Transparencias en el Frame-Buffer. e iría apareciendo la imagen final. Este efec-
En el artículo del mes anterior ya abordamos el to se podría aplicar también para hacer fun-
estudio de técnicas avanzadas que se aplican en didos o "fades", ya que podríamos usar el
esta tubería de proceso como Bump Mapping y buffer Stencil para realizar una transición
Environment Mapping. A continuación, analiza- desde un fondo negro o blanco a una imagen
remos más técnicas que se pueden usar en la final lo que se conoce también como "fade
tubería programable de píxel. in", o al revés, desde la imagen, hacer una
Stencil Buffer transición a un fondo en blanco o negro, lo
Al usar la expresión Stencil Buffer estamos que se conoce como "fade out".
haciendo referencia a otro buffer que incorpo- Otro efecto que se usa es aplicar siluetas y líne-
ran los últimos modelos de tarjetas graficas. as de resalte sobre figuras en tres dimensiones.
Podríamos decir que el Stencil Buffer es otro Si queremos conseguir que una figura aparezca
plano que contiene información de píxeles. La remarcada con una línea de resalte, aplicamos
funcionalidad básica de este buffer es la de una máscara a la figura con su mismo diseño
enmascarar píxeles en una imagen. Para usar pero con un tamaño menor. De esta manera
este buffer se deben establecer unas funciones conseguimos que aparezca sólo una línea que
de control de una plantilla y de enmascara- marca la forma de la figura. Si ahora rellena-
miento, que establecen un test de control que mos esa área de un color, conseguimos que
se realizará sobre la imagen a renderizar. Según aparezca nuestra figura con una línea de resal-
sea el tipo de test, se dibujarán los píxeles de la te, dando el aspecto que tienen las figuras que
imagen. Al poder controlar las funciones de aparecen en películas de dibujos animados. Si
stencil y el tipo de enmascaramiento, se pueden lo que queremos conseguir es la silueta de una
realizar diversos tipos de efectos especiales figura, lo que haríamos seria aplicar una más-
como los que se emplean en video para realizar cara con el mismo diseño que el de la figura y
diferentes transiciones entre escenas o se pue- el mismo tamaño. Si este espacio lo rellenamos
den añadir imágenes fijas sobre imágenes ani- de color, conseguimos la silueta de la figura.
madas. Otro efecto a aplicar puede ser el tratar Estos son varios ejemplos de cómo usar el buffer
una escena en la que se van a representar obje- Stencil. Ahora nos centraremos en estudiar el
tos con reflejos o que al iluminar objetos apa- proceso de programación del uso del buffer
rezcan también sus sombras. Stencil y profundizaremos en tres ejemplos,
Analicemos algunos efectos para ver cómo se enmascarar una escena 3D con una imagen fija,
podrían realizar con el buffer stencil. Si quisiéra- creación de reflejos y creación de sombras.
SOLO PROGRAMADORES 50
ALGORITMOS
Direct3D 9.0 avanzado (II)
//TERCERA PARTE
device_d3d->SetRenderState( D3DRS_STENCILREF,0);
device_d3d->SetRenderState( D3DRS_STENCILFUNC,D3DCMP_EQUAL);
device_d3d->SetRenderState( D3DRS_STENCILPASS,D3DSTENCILOP_KEEP);
51 SOLO PROGRAMADORES
ALGORITMOS
SOLO PROGRAMADORES 52
ALGORITMOS
Direct3D 9.0 avanzado (II)
tes. Tanto esta como las anteriores técnicas pue- necesitar un tiempo elevado de desarrollo. Las
den ponerse en práctica estudiando el material escenas realizadas con estos efectos se apro-
de apoyo incluido en el CD-ROM. ximan cada día mas a la realidad que nos
rodea. Pero en el siguiente artículo concluire-
Conclusiones mos con el estudio de lo que se vislumbra
como el futuro inmediato en el proceso de
La tubería programable nos amplia el numero diseñar efectos, ya que abordaremos el análi-
de posibilidades de creación de efectos sin sis de vertex shaders y píxel shaders.
53 SOLO PROGRAMADORES
ALGORITMOS
Supongamos que deseamos crear un méto- LISTADO 1 Modificando un vector Java desde C/C++, opción 1
do nativo que reciba un vector con diez JNIEXPORT jvoid JNICALL
números enteros e incremente en uno cada Java_TestClass_sumarUno (JNIEnv *env, jobject obj, jIntArray enteros){
uno de ellos. El código necesario para jint tmpA[10];
implementarlo puede verse en el listado 1. env->GetIntArrayRegion(enteros,0,10, tmpA);
for(int i=0;i<10;i++) tmpA[i]++;
La función GetIntArrayRegion recibe como env->SetIntArrayRegion(enteros,0,10, tmpA);
parámetros el vector Java, el índice del ele- }
mento inicial, la cantidad de elementos a
copiar y el vector C de destino (como un LISTADO 2
puntero a jint) el cual ya debe tener su Modificando un vector Java desde C/C++, opción 2
memoria reservada. Puesto que la función JNIEXPORT jvoid JNICALL
no asigna memoria, no devuelve ningún Java_TestClass_sumarUno (JNIEnv *env, jobject obj, jIntArray enteros){
jint *pEnteros;
código de error. Como resultado tendremos jboolean *pEsCopia;
copiados en tmpA todos los elementos del pEnteros =env->GetIntArrayElements(enteros, pEsCopia);
vector. Luego incrementamos el valor de if(pEnteros=NULL) return;
jint iElementos= env->GetArrayLength(enteros);
cada uno dentro de un bucle y finalmente for(jint i=0;i< iElementos;i++) pEnteros[i]++;
actualizamos los cambios en el vector origi- env-> ReleaseIntArrayElements(enteros,pEnteros,0);
nal por medio de la función SetIntArrayR- }
egion. Hay variantes de éstas dos funciones
para todos los tipos de datos primitivos. En LISTADO 3 Modificación de la función Java_SortFiles_sort
el cuadro "Funciones de copia de vectores
de tipos primitivos" podemos ver la lista JNIEXPORT jint JNICALL
Java_SortFiles_sort (JNIEnv *env, jobject obj, jobjectArray jarchivos, jint
completa. jorden, jstring jSufijo){
Esta técnica es buena para acceder a vec- const char *chSufijo= env->GetStringUTFChars(jSufijo, 0);
tores pequeños cuyo tamaño es fijo y se string sufijo(chSufijo);
env->ReleaseStringUTFChars(jSufijo,chSufijo);
conoce de antemano. La otra forma de uti- jint arraySize=env->GetArrayLength(jarchivos);
lizar vectores de tipos primitivos consiste cout << "sufijo: " << sufijo << " orden:" << jorden << " cant archivos:"
en obtener un puntero directo a sus ele- << arraySize << endl;
mentos, trabajar con ellos y luego liberar la for(int i=0;i<arraySize;i++){
jstring jstrArchivo = (jstring) env->GetObjectArrayElement(jarchivos, i);
referencia. Para que esto sea posible, la const char *chArchivo= env->GetStringUTFChars(jstrArchivo, 0);
máquina virtual debe ser capaz de indicar- sortfile(chArchivo,string(string(chArchivo) + sufijo).c_str());
le al recolector de basura que hay una refe- env->ReleaseStringUTFChars(jstrArchivo,chArchivo);
}
rencia externa a los elementos de ese vec- return 0;
tor por lo cual no deben ser movidos de su }
lugar en memoria. A este procedimiento se
lo conoce con el nombre de pinning y no
necesariamente es soportado por cualquier Acceso a vectores de objetos explicadas en la entrega anterior. Una vez obte-
máquina virtual. En el caso de que la El acceso a estos vectores se hace de elemen- nido el nombre de cada archivo a ordenar, lla-
máquina virtual no soporte pinning, reser- to a elemento usando las funciones GetOb- mamos a la función sort pasándole como pará-
va memoria, hace una copia de los elemen- jectArrayElement y SetObjectArrayElement. metros el nombre de archivo de entrada y el de
tos en esa memoria y devuelve una refe- Veremos cómo hacerlo modificando nuestra salida. Recordemos que el ordenamiento se
rencia a la copia. Luego, cuando el progra- aplicación de ejemplo para que lea el vector de hace, según se definió el ejemplo en la entrega
ma libera la referencia, actualiza el vector objetos de tipo string que contiene los nombres anterior, por edad. Luego debemos agregar a
original. El listado 2 presenta el mismo caso de los archivos a procesar. Modificaremos el SortFiles.cpp la función sort, cuyo código puede
del listado 1 pero esta vez obteniendo una código de la función Java_SortFiles_sort tal verse en el listado 4.
referencia directa. como indica el listado 3.
La función GetIntArrayElements devuelve una El código para leer el sufijo permanece
referencia a los elementos del vector. En el caso igual y se agrega una llamada a Funciones de copia de vectores de tipos
en que necesite reservar memoria para crear una GetArrayLength, que sirve tanto para vec- primitivos
copia de los mismos, podría devolver NULL si no tores de tipos primitivos como por referen-
hubiera memoria suficiente por lo cual verifica- cia, para obtener la cantidad de elementos GetBooleanArrayRegion() SetBooleanArrayRegion()
mos el valor de pEnteros antes de utilizarlo. En el del vector. Una vez que conocemos la can- GetByteArrayRegion() SetByteArrayRegion()
segundo parámetro devuelve un boolean indi- tidad de elementos iteramos sobre cada
cando si lo que devuelve es una copia o una refe- uno de ellos obteniendo una referencia por GetCharArrayRegion() SetCharArrayRegion()
rencia directa. Hay un par de funciones medio de GetObjectArayElement. Como GetShortArrayRegion() SetShortArrayRegion()
GetArray<tipo>Elements y SetArray<tipo>E- sabemos que el vector está formado por
ements para cada tipo de datos primitivo. objetos de clase string asignamos esta GetIntArrayRegion() SetIntArrayRegion()
También existen funciones GetPrimitiveA- referencia a una variable de tipo jstring. A GetLongArrayRegion() SetLongArrayRegion()
rrayCritical y SetPrimitiveArrayCritical que deben continuación leemos el contenido de esta
usarse con la misma precaución que las que se cadena usando las funciones GetS- GetFloatArrayRegion() SetFloatArrayRegion()
utilizan con cadenas de caracteres. tringUTFChars y ReleaseStringUTFChars GetDoubleArrayRegion() SetDoubleArrayRegion()
55 SOLO PROGRAMADORES
ALGORITMOS
LISTADO 7 Modificación del fichero SortFiles_i.h Para poder probar debemos crear archivos
#include <algorithm>
de datos que contengan en cada línea ape-
#include <vector> llido y edad de un empleado separados por
#include <string> coma. Por ejemplo así:
#include <sstream>
#include <iterator> López,44
#include <fstream>
#include "Empleado.h" Pérez,35
int sortfile(const char* strArchEntrada, const char* strArchSalida);
std::ostream& operator << (std::ostream& strm, const Empleado& f) { González,65
f.enviarA(strm);
return strm; Al ejecutar la clase Java, los archivos que-
} darán ordenados en una copia cuyo nombre
std::istream& operator >> (std::istream& strm, Empleado& f) { será el del archivo más el sufijo indicado.
f.leerDe (strm);
return strm;
} Acceso a variables miembro de objetos
Java
Para comprender el tema que nos ocupa ro llamado Empleado.cpp cuyo contenido se
basta con saber de esta función que ordena muestra en el listado 6. La función de esta El acceso a una variable miembro o campo
los datos de cada archivo utilizando iterado- clase es la de leer los datos de un empleado de un objeto Java desde el código nativo se
res y una clase Empleado que debemos crear. desde y hacia el archivo de datos. Por último hace por medio de los siguientes pasos:
Para declararla agregaremos un fichero de modificaremos el archivo SortFiles_i.h, al 1 . Obtener una referencia a la clase a la
nombre Empleado.h en el que escribiremos el cual le agregaremos las líneas del listado 7. cual pertenece el campo usando la fun-
contenido del listado 5. La implementación Una vez concluidas estas modificaciones, ción GetObjectClass.
de la clase Empleado la haremos en un fiche- debemos compilar y ejecutar el ejemplo, sin 2 . Obtener el identificador del campo a
SOLO PROGRAMADORES 56
ALGORITMOS
Acceso a código nativo con JNI (y II)
57 SOLO PROGRAMADORES
ALGORITMOS
SOLO PROGRAMADORES 58
ALGORITMOS
Acceso a código nativo con JNI (y II)
y catch. La única consideración que debemos tener LISTADO 14 Creando la instancia de la JVM
en cuenta es, como vemos en el listado 12, que la int StartVM(JavaVM*& jvm,JNIEnv*& env){
declaración del método nativo debe incluir la cláu- JavaVMInitArgs jvmargs;
sula throws. JavaVMOption opts[1];
opts[0].optionString="-Djava.class.path=.";
Invocación de la Máquina Virtual Java jvmargs.version=0x00010002;
jvmargs.options=opts;
jvmargs.nOptions=1;
Las diferentes versiones de la Máquina Virtual de jvmargs.ignoreUnrecognized=true;
return JNI_CreateJavaVM(&jvm,(void**)&env,&jvmargs);
Java están implementadas como librerías nati- }
vas. En este apartado veremos un programa
ejemplo que nos permitirá ejecutar el método
estático main de una clase de manera similar a LISTADO 15 Código del archivo StartVM.java
la aplicación java del SDK. La diferencia con los class claseStartVM{
ejemplos que hemos visto hasta ahora es que public static void main(String[] args){
estábamos implementando métodos nativos que System.out.println("Hola desde Java!");
}
se ejecutan desde Java con la Máquina Virtual ya }
iniciada. En cambio el próximo ejemplo se puede
ejecutar desde la línea de comando y creará su
propia instancia de la Máquina Virtual, o sea que Esquema que describe la invocación
de la Máquina Virtual.
veremos ahora cómo hacer el camino inverso y
utilizar funcionalidad implementada en clases
Java desde aplicaciones nativas. Los pasos a
seguir por nuestro programa son:
1 . Establecer las opciones a utilizar, como la
variable CLASSPATH si fuera necesario.
2 . Establecer los argumentos de inicialización.
3 . Crear una instancia de la Máquina Virtual
usando JNI_CreateJavaVM. Esta función nos
devuelve un puntero a la Máquina Virtual y
otro al entorno (el puntero a JNIEnv que estu- Conclusiones
vimos utilizando para acceder a todas las
funciones JNI). Con esta entrega concluye la serie sobre JNI.
4 . A partir de aquí procedemos de la manera Hemos repasado los aspectos básicos de ésta
normal para invocar un método Java desde tecnología y algunas de sus posibilidades más
código nativo, es decir, debemos obtener una avanzadas. Como recomendación para quiénes
referencia a la clase, luego el identificador de deseen profundizar en el tema, es muy impor-
método y por último invocarlo con alguna de tante para los usos más avanzados y para opti-
las funciones que hemos visto. mizar las aplicaciones el conocer a fondo las
Para este ejemplo crearemos un nuevo archivo interacciones entre el administrador de memoria
C++ llamado StartVM.cpp en el cual crearemos de la Máquina Virtual y el código nativo, los
la función main que se muestra en el listado 13. tipos de referencias que existen y cómo debe ser
A continuación agregamos la función del listado administrada cada una.
14 para crear la instancia de la Máquina Virtual.
Sólo nos falta escribir la clase java de prueba
para lo cual debemos crear el archivo Descriptores de campos y métodos
StartVM.java y escribir en él el código del lista-
do 15. Campo int iCount; "I"
Para probar el programa debemos compilar la Campo float fPrecio; "F"
clase Java y el archivo StartVM.cpp, el cual enla-
zaremos con la biblioteca estática de la Máquina Campo Integer iCount; "Ljava/lang/Integer;"
Virtual de Java. En la distribución Windows del Campo boolean bFound; "Z"
SDK de Sun debemos enlazar con jvm.lib y copiar
Campo int[] bCounts; "[I"
jvm.dll en un directorio que aparezca en la
variable PATH como por ejemplo la ruta de siste- Campo String strTmp; "Ljava/lang/String;"
ma de Windows. Finalmente, desde la línea de Campo String[] strFiles; "[Ljava/lang/String;"
comandos ejecutamos:
StartVM claseStartVM Método void mimetodo() "()V"
Método void metodo2(int i1, float f1) "(IF)V"
Si todo va bien veremos en la salida estándar el
mensaje "Hola desde Java!". Método String metodo3(String str1, "(Ljava/lang/String;IZ)
int i1,boolean b1) Ljava/lang/String;"
59 SOLO PROGRAMADORES
DUDAS
Preguntas y respuestas
ADOLFO ALADRO GARCÍA Este mismo mecanismo, que se emplea en las
hojas XSLT, puede utilizarse para hacer que-
Trabajo con documentos XML que tienen más ries una vez que el documento XML se ha
o menos la estructura del listado 1. interpretado.
Quisiera saber cómo puedo hacer queries con- En primer lugar se utiliza un parser para obte-
tra este tipo de documentos de forma que ner el DOM del origen de datos XML. Véase el
obtenga la citas que hay entre dos determina- listado 3.
das fechas o todas aquellas que tienen un La propiedad async indica si se desea que el
determinado estado, por citar dos ejemplos. En proceso de carga del documento XML se haga
la actualidad estos documentos se visualizan de forma síncrona (false) o asíncrona (true). En
en IE6 con ayuda de XSLT. el primer caso después de llamar al método
load no se ejecuta la siguiente línea de código
hasta que los datos no ha sido completamente
La forma más sencilla de hacer consultas contra cargados o se produce un error. El objeto
un origen de datos XML es empleando expresio- parseError proporciona información acerca de
nes XPath. Este tipo de expresiones se emplean la carga. Si el valor de la propiedad errorCode
normalmente en el lenguaje XSLT para seleccio- es igual a cero significa que no se han produci-
nar y filtrar los nodos que van a procesarse. do errores. Por último, se llama al método nor-
Obsérvese el listado 2. malize, sobre el nodo principal del origen de
El elemento xsl:for-each se emplea para hacer datos XML, para ignorar los espacios en blanco
un bucle y el valor del atributo select es la y saltos de línea que no son útiles.
expresión XPath que indica qué nodos del ori- El siguiente paso consiste en indicar qué tipo
gen de datos se van a recorrer. En este ejemplo de expresiones se van a emplean para hacer
concreto se recorrerán todos aquellos elemen- queries. Esto se lleva a cabo con el método
tos etiquetados como appointment que tengan setProperty:
un atributo llamado status cuyo valor sea igual oDOMDocument.setProperty("SelectionLanguag
a 1. El elemento xsl:sort se emplea para orde-
e", "XPath");
nar el resultado de forma que los elementos
appointment se muestran empezando por la De esta forma se le indica al motor de XML
fecha más reciente y terminando por la fecha que el lenguaje empleado será XPath.
más antigua. Finalmente el elemento xsl:value- Para hacer una query se pueden emplear dos
of se emplea para mostrar la cadena de texto métodos: selectNodes y selectSingleNode. El
Documentación del método selectNodes que que contienen los elementos appointment de la primero devuelve una lista de nodos mientras
permite hacer queries contra los orígenes de
datos XML. fuente de datos XML. que el segundo devuelve un único nodo. Así
por ejemplo, si se quieren seleccionar todos
los elementos que se encuentran entre dos
determinadas fechas se puede hacer lo sugeri-
do en el listado 4.
La expresión XPath indica que se selecciona-
rán todos aquellos nodos del origen de datos
XML etiquetados como appointment cuyo
atributo timemillis tenga un valor mayor o
igual que el devuelto por la expresión
d1.getTime() y menor o igual que el devuelto
por la expresión d2.getTime().
El objeto devuelto selectNodes es una lista de
nodos que puede recorrerse como se muestra en
el listado 5.
La propiedad length devuelve el número de
nodos que se han seleccionado. El método
item permite acceder a cada nodo indivi-
dualmente.
SOLO PROGRAMADORES 62
DUDAS
PREGUNTAS Y RESPUESTAS
request.getHeader("user-agent")
Finalmente, el método selectSingleNode fun-
ciona de forma equivalente. La única diferencia Como puede verse en el listado 6, además de
es que se emplea cuando el número de nodos este método que permite obtener una cabe-
que se van a devolver se sabe que es 1. cera en concreto, es posible recorrerlas
todas.
El método getHeaderNames devuelve un obje-
¿De qué forma se puede saber desde el servi- to de tipo Enumeration con la lista de los
dor cuál es el navegador que está empleando el nombres de cabeceras HTTP que se han encon-
usuario al hacer la correspondiente llamada trado en el mensaje correspondiente a la peti-
HTTP contra un servlet o una página JSP? ción. Basta con recorrer esta colección y
emplear con cada uno de los nombres el
Lo único que hay que hacer es consultar la método getHeader para obtener los valores
correspondiente cabecera HTTP de la petición: correspondientes a las cabeceras.
63 SOLO PROGRAMADORES
LIBROS
ISBN: 2-7460-1912-4
PÁGINAS: 357
DESCRIPCIÓN:
Esta obra proporciona un soporte de referencia en la utilización del lenguaje Java para su versión
J2EE (Java 2 Enterprise Edition) para el desarrollo de aplicaciones web.
Tras descubrir la plataforma J2EE, este libro muestra cómo diseñar aplicaciones web dinámicas
basadas en componentes Java, como los Servlets y las Java Server Pages (JSP's).
Dado que la mayor parte de las aplicaciones web realizan llamadas a un sistema de gestión de
bases de datos relacionales, este libro dedica todo un capítulo al API JDBC (Java DataBase
Connectivity).
Cuando el lector se haya familiarizado con las diferentes tecnologías implicadas en el desarrollo,
se abordará el despliegue de la aplicación tomando como descriptor de despliegue un archivo
web.xml.
Obviamente todos estos puntos están acompañados de ejemplos que permitirán asimilar rápida-
mente todos estos conceptos.
ISBN: 84-415-1445-3
PÁGINAS: 416
DESCRIPCIÓN:
La comunidad de programadores de Visual Basic es una de las mayores entre todas las dedicadas
a la programación. Visual Basic es un lenguaje orientado a objetos, con el que se pueden crear
aplicaciones Windows, aplicaciones web, servicios Windows, servicios web y aplicaciones para
otros dispositivos, como los de tercera generación o PDA.
Visual Basic .NET es una renovación y actualización absoluta respecto la versión anterior. Visual
Basic .NET está pensado para satisfacer cualquier exigencia, soportando todas las característi-
cas típicas del desarrollo de aplicaciones e incorporando las nuevas herramientas que debe tener
un lenguaje moderno.
El acceso a datos ha sido renovado, por ejemplo se utiliza ADO.NET para acceder a fuente de
datos. Además, la manipulación gráfica 2D es ahora más enriquecedora gracias a la posibilidad
de integrar y utilizar GDI+ en nuestras aplicaciones gráficas.
Todas estas características están respaldadas por el uso de librerías que nos permiten dar valor
añadido al desarrollo de aplicaciones, como el uso de métodos de seguridad, encriptación y des-
encriptación de información, gestión de errores depuración, etc.
SOLO PROGRAMADORES 64
n116_cdRom.qxd 20/06/2004 11:59 Página 66
CD-ROM
Contenido CD-ROM
Fuentes Esperamos que con ellos el
Fuentes
z Ejemplo JAXB
SOLO PROGRAMADORES 66