Archivo

Archivo para la Categoría "Java"

Tutorial: Una forma rápida de usar Ibatis, Postgresql con Netbeans 6.7

Diciembre 1, 2009 nachxs Deja un comentario

Este es un pequeño tutorial en el cual trato de mostrar una forma rápida de como utilizar IBatis desde java para manejar persistencia de datos utilizando nuestro favorito postgresql como gestor de base de datos. Como siempre he dicho este blog no pretende mostrar la parte teórica, para eso ya existen varios sitios en donde podemos leerlo de forma debida, solo tratamos de mostrar el trabajo de manera rápida y practica. Bueno  manos a la obra; lo primero que debemos tener en cuenta que trabajaremos con la versión 2.3.4 de IBatis, hago esta aclaración debido a que actualmente existe una versión beta 5 de esta librería y aparentemente estas difieren por lo menos a la hora de la instancia y en la configuración de los xml, eso lo veremos en un post mas adelante. Una vez validado lo anterior, lo que debemos tener es la base de datos creada, para este caso por temas didácticos, utilizaremos la base de datos IBatisDemo la cual contiene una tabla llamada Productos con los campos mostrados en la imagen

Una vez creado la BD y la tabla, creamos el proyecto web al cual lo llamaremos WebAppIBatis y lo que haremos seria crear la siguiente estructura:

Como podran observar, ire indicando que significa cada archivo y mostrando el contenido para asi se pueda entender. Si se fijan en la parte de librerías ya tenemos anexadas las librerías de IBatis y el driver jdbc para postgresql respectivamente. Bueno según la estructura observamos un clase llamada ProductoBean, esta clase contiene los atributos necesarios para poder almacenar un registro de tipo Producto y asi ser mas manipulable, entonces la clase contendra la siguiente estructura:

package org.demo.bean;
/**
*
* @author nachxs
*/
public class ProductoBean {

    private int id_producto;
    private String desc_pro;
    private int stock;
    private String ind_vig;

    public int getId_producto() {
       return id_producto;
    }

    public void setId_producto(int id_producto) {
      this.id_producto = id_producto;
    }

    public String getDesc_pro() {
      return desc_pro;
    }

    public void setDesc_pro(String desc_pro) {
      this.desc_pro = desc_pro;
    }

    public int getStock() {
      return stock;
    }

    public void setStock(int stock) {
      this.stock = stock;
    }

    public String getInd_vig() {
      return ind_vig;
    }

    public void setInd_vig(String ind_vig) {
      this.ind_vig = ind_vig;
    }
}

Luego nos ubicamos en los archivos Conexion.xml que es el encargado de los parámetros de conexión a la base de datos  y tambbien el encargado de las referencias a todos los archivos xml que se puedan crear para mapear los consultas sql , como es el caso de Producto.xml el cual es el encargado de mapear las consultas sql que usaremos en este caso para la obtención de la información respectivamente:

Conexion.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
   PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
   "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
 <transactionManager type="JDBC" >
   <dataSource type="SIMPLE">
    <property name="JDBC.Driver" value="org.postgresql.Driver"/>
    <property name="JDBC.ConnectionURL" value="jdbc:postgresql://localhost:5432/IBatisDemo"/>
    <property name="JDBC.Username" value="postgres"/>
    <property name="JDBC.Password" value="sistemasx"/>
   </dataSource>
 </transactionManager>
 <sqlMap resource="org/demo/xml/Producto.xml" />
</sqlMapConfig>

Productos.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
   PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
   "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
    <sqlMap namespace="Productos">
        <typeAlias alias="Productos" type="org.demo.bean.ProductoBean"/>

        <select id="getProducto" parameterClass="int" resultClass="Productos">
          SELECT id_producto, desc_pro FROM "Productos" WHERE id_producto = #value#
        </select>

        <select id="getProductos" resultClass="Productos">
          SELECT id_producto, desc_pro FROM "Productos"
        </select>
    </sqlMap>

Como podemos observar en este último archivo, estamos mapeando las consultas sql que utilizaremos, vemos que cada tag select tiene un id que es el identificador de cada consulta, tiene un parameterClass, el cual este nos ayuda a enviar parámetros de entrada ya sea datos primitivos como int, long, etc. así como también clases ya sea un bean por ejemplo y el resultClass el cual permitirá almacenar las respuestas a la consultas, en este caso estamos usando ProductoBean, el cual lo asociamos a un alias llamado Productos, según como se indica en el archivo Productos.xml.

Una vez terminado de revisar los archivos mostrados anteriormente, lo que hacemos ahora es crear un Servlet, el cual lo utilizaremos para poder invocar a nuestra consultas, según sea el caso; para esto haremos lo siguiente:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.demo.action;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Reader;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.demo.bean.ProductoBean;

/**
 *
 * @author nachxs
 */

public class Consultar extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            String resource = "org/demo/xml/Conexion.xml";
            Reader reader = Resources.getResourceAsReader(resource);
            SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
            String idPro = request.getParameter("id_pro");
            ProductoBean producto = (ProductoBean) sqlMap.queryForObject("getProducto", Integer.parseInt(idPro));
            out.println("<table border='1'>");
            out.println("<tr>");
            out.println("<td>ID</td>");
            out.println("<td>Producto</td>");
            out.println("</tr>");
            out.println("<tr>");
            out.println("<td>" + producto.getId_producto() + "</td>");
            out.println("<td>" + producto.getDesc_pro() + "</td>");
            out.println("</tr>");
            out.println("<table>");
        } catch(Exception ex)  {
            out.println(ex.getMessage());
        } finally {
            out.close();
        }
    }

    /**
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}

Como podrán darse cuenta dentro de la variable resource tenemos la ruta en donde se encuentra ubicado el archivo xml con los parametros de conexion, en este caso Conexion.xml, y luego en esta linea sqlMap.queryForObject(“getProducto”, Integer.parseInt(idPro)) podemos observar como invocamos a la consulta que se encuentra dentro del archivo xml Productos.xml, identificado con getProducto enviando como parametro de entrada el código de producto y eso se recepciona en ProductoBean para luego ser leido mas facilmente.

Ahora solo nos queda ir al archivo index.jsp y solo invocar al servlet de esta manera tan simple:

<%--
    Document   : index
    Created on : 28/11/2009, 10:10:19 AM
    Author     : nachxs
--%>

<%@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>
    </head>
    <body>
        <form action="Consultar" method="POST">
            ID Producto: <input type="text" name="id_pro" />
            <input type="submit" value="Consultar" />
        </form>
    </body>
</html>

y prácticamente eso seria todo, como verán no es nada difícil, y mas o menos esto seria el resultado:

Certificados Digitales y Glassfish

Octubre 29, 2009 nachxs Deja un comentario

Hace poco por cuestiones laborales estuve buscando la forma de como configurar glassfish para que te pueda aceptar peticiones seguras (https) utilizando certificados digitales, que en este caso la empresa que validaría los certificados seria con VeriSign. Bueno revisando algunas paginas encontré una interesante en donde propone un pequeño script que prácticamente te haría todo el trabajo. El blog que propone este script es Jrod Blog, la única diferencia es que el script utiliza como empresa identificadora a CACert.org, pero no seria problema para nuestro caso, solo tendríamos que cambiar esa opción y colocar con la que trabajaríamos. Y luego solo quedaria configurar glassfish con los algoritmos de autenticación que utilizaría.

server_config

Backup de una BD postgres desde Java en Ubuntu

Octubre 19, 2009 nachxs 1 Comentario

Hace poco revisando algo de información y a solicitud de una gran amiga, estaba buscando una forma de poder crear un backup de una base de datos postgres utilizando una aplicación Java. Ojo que esto lo hice para ejecutarlo en Linux, específicamente en Ubuntu, Y bueno aquí lo propongo por si alguien lo necesita, solo es cuestión de mejorarlo y adecuarlos a sus necesidades.

Pantallazo-BackupPg - NetBeans IDE 6.5Descargar aquí

Java con Pasión!!!

Agosto 13, 2009 nachxs 4 comentarios

Pocas veces he visto sitios tan buenos como el que nos proporciona Sang Shin, este señor es trabajador de SUN y dedica parte de su tiempo para poder publicar temas de aprendizaje para nosotros los programadores en Java, siempre he visitado esta página justamente por el gran contenido que tiene y me di unos minutos para recomendarla 100%, la verdad para el que no conozca esta página, JavaPassion, se los recomiendo a “ojos cerrados” .

Categorías:Java, NetBeans, Personal, Programacion Etiquetas:,

Netbeans 6.7 liberado!!

Junio 29, 2009 nachxs Deja un comentario

Tras el reciente lanzamiento de la nueva versión de Eclipse llamado Galileo; el grupo de desarrolladores de Netbeans, ha liberado la versión final, la 6.7, con una variedad de novedades. Sera coincidencia??, bueno ya tenemos las nuevas versiones de los  dos mejores IDE’s para desarrollo Java para escoger.

netbeans01

Categorías:Java, Linux, NetBeans, Noticias, Python, Ruby, Ubuntu Etiquetas:, ,

Tutorial: EJB, Persistencia y PostgreSQL en NetBeans 6.5

Abril 28, 2009 nachxs 19 comentarios

Hola a todos de nuevo por aquí retomando la creación de pequeños tutoriales en base a las prácticas desarrollando en mi diario aprendizaje. Esta vez veremos una forma rápida de como crear y usar un EJB utilizando persitencia de datos con TopLink y nuestro querido gestor de base de datos, PostgreSQL. No hablare sobre la parte teórica, porque como dije anteriormente eso lo podemos encontrar en cualquier página de internet que trate el tema. Bueno entonces manos a la obra…

Para empezar lo primero que debemos tener es una conexión activa a nuestra base de datos creado desde Netbeans; para este caso trabajare con una base de datos bd_tutorial que tengo de prueba, la cual tiene 2 tablas (Productos y DetalleProductos) y la que muestro a continuación.

tablasUna vez validado esto, ahora crearemos nuestro modulo EJB; para esto lo hacemos desde nuestro NetBeans, click en nuevo y luego seleccionamos Java EE y dentro de esta opción escogemos “EJB Module”, ponemos el nombre, del módulo en este caso EJBDemo, seleccionamos como servidor a GlassFish y finalizamos.

crearejb

Ya tenemos nuestro módulo EJB listo para crearle toda la lógica necesaria para obtener la información de las tablas de nuestra base de datos.

Ahora lo que haremos sera crear las clases entidad que representaran a nuestras tablas de la base de datos. Para esto hacemos click derecho en el módulo creado y nos dirigimos a la opción “Other” y luego en la ventana de opciones, seleccionamos “Persitence” y una vez alli seleccionamos “Entity Classes From DataBase”

entitdad

Le damos click en siguiente y nos aparecera una ventana en donde podemos ver la opción “Data Source”, desplegamos y seleccionamos “New Data source” y luego alli se nos mostrara una pequeña ventana en donde ingresaremos el nombre que reprentara a nuestro “Data Source”, que en este caso le pondremos jdbc/ejb y el “Database Connection” que es en donde escogeremos la conexión a la base de datos que habiamos agregado al inicio.

conexion

Una vez realizado este proceso, automaticamente se nos mostrara en el panel izquierdo todas las tablas creadas en esta base de datos. Ahora seleccionaremos la(s) tabla(s) con la que trabajaremos; para este caso seleccionaremos solo la tabla “Productos”, y ésta como se muestra en la imagen pasaria al panel derecho.

entidadproducto

Le damos click en siguiente y a continuación se nos muestra una ventana en donde tenemos el nombre de la tabla (lado izquierdo) y el nombre de la clase que representa a esta tabla (lado derecho), el nombre del proyecto, ingresaremos el nombre del paquete en donde se guardara la clase al cual llamaremos org.ejb.entidad.

entidadproducto_1

fijense que en la parte de abajo tenemos un boton que dice “Create Persistence Unit” le damos click alli y se nos mostrara una ventana con lo siguiente

unit

Alli podemos ver el nombre de la unidad de persistencia, el framework que proporcionara la persitencia y el Data Source que habiamos creado en un paso anterior; y luego click en crear.

Una vez hecho esto le damos click en siguiente a la ventana activa y alli vemos el tipo de mapeo de los datos, que para este caso lo dejamos por defecto y luego finalizar. Luego de esto tendremos la siguiene estructura

ejbcreadoVemos el “persistence.xml” que es en donde tenemos referencia a la base de datos mediante el DataSource, el nombre del proveedor para la persistencia (TopLink) y el nombre de unidad de persistencia, observamos las tablas de la base de datos y la clase “Productos.java”.

Ahora lo que haremos sera crear las clases que implementaran los métodos para toda la lógica, estas clases serán del tipo SessionBean, entonces lo que haremos es darle click derecho al proyecto, New y nos ubicamos en “persistence” y luego seleccionamos “Session Beans For Entity Classes”, que como nos podemos dar cuenta, creara las clases en base a la clase que representa la entidad, que en este caso es “Productos.java”, le damos click en siguiente y vemos la clase  Producto en el panel izquierdo, lo seleccionamos y damos click en Add para pasarlo al panel derecho. Luego click en siguiente y nos aparecera una ventana con los datos recogidos anteriormente, si gustan el nombre del paquete lo pueden cambiar para de esta forma tener estas clases separadas de las entidades, para este caso le puse  org.ejb.beans y luego seleccionamos Remote para el tipo de interface y finalizar.

sessionbean2

Ahora tendremos la siguiente estructura, ya con las clases del tipo SessionBean creadas y los métodos implelementados.

estructura1

Una vez hecho todo esto, solo nos quedaria deployarlo, para esto click derecho en el proyecto y seleccionamos deploy, si todo salio bien ya tendremos desplegado nuestro EJB en nuestro servidor Glassfish como podemos ver en la imagen.

glassfish

Bueno, con esto ya tenemos desplegado nuestro EJB pero ahora necesitamos utilizarlo en algún sitio. Para esto crearemos un proyecto web (imagino que ya saben como xD) al que llamaremos “AppWeb_EJB” y luego dentro del  proyecto crearemos un servlet al que llamaremos “appservlet_ejb” el cual es el que se encargaria de invocar a nuestro EJB.

Para esto dentro del método processRequest del servlet hacemos click derecho y seleccionamos la opción “Insert Code” y nos aparecera un menú emergente en el que escogemos la opción “Call Enterprise Bean..” y luego alli escogemos nuestro bean que en este caso es ProductosFacade como indica la figura

call1

Le damos click en OK y veremos que se agregó la referencia del EJB a nuestro proyecto en la parte de las librerias asi como en nuestro servlet como se puede observar en la figura

referenciaEntoces solo nos quedaria utilizar los metodos proporcionado por este EJB, para este caso utilizaremos el método “findAll” que es el que se encargaría de mostrarme toda la lista de productos, el cual mostramos en el siguiente código

servlet

Y luego desde nuestra página index,jsp solo crearemos la referencia a este servlet de la siguiente manera

index

Y listo, ejecutamos el proyecto web y estaremos mostrando los productos existentes.

Bueno, espero se haya entendido, trate de hacerlo lo mas “explicable” posible; como entenderan a veces es algo dificil poder plasmar en palabras este tipo de procesos, pero se hace lo que se puede.

Descarga el ejemplo: EJB

Oracle compra Sun

Abril 20, 2009 nachxs Deja un comentario

Quizas esta sea una de las noticias mas relevantes en estos dias y por que no decir de este año hasta el momento, debido a que uno de los grandes de la tecnologia como Oracle compra a otro grande como lo es Sun Microsystems; quizas a muchos de nosotros, los que usamos Java como una de nuestras herramienta de trabajo nos preguntamos, que nos deparara de aqui en adelante? que tan beneficioso sera esto para el software libre?, que pasara con los productos promovidos por Sun Microsystems, tales como Netbeans, MySQL (el que a mi parecer es el mas afectado posiblemente), Glassfish, etc. Como sabemos Oracle es una organizacion netamente comercial, y posiblemente mas adelante quien sabe Java o algun otro producto mencionado tenga fines mas comerciales, quizas varios concuerden conmigo al decir que IBM talves hubiera sido una mejor opción,  por el mismo hecho de que IBM contribuia de alguna manera con el desarrollo de java. No cabe duda que OpenSolaris posiblemente sea una de los productos que mas se beneficiaria y fortaleceria con esta compra, dado que Oracle, despliega sus productos en sistemas basados en Solaris y obviamente habra mejoras. Tampoco quiero decir que esto sea malo, si esto se da esperemos que la cultura de Sun Microsystems se de  forma positiva ante Oracle y que el desarrollo de estos productos continúe.

zot_sun_s_oracle_b

Tutorial:Combos dependientes con JSP, Ajax y Postgresql en Netbeans

Marzo 31, 2009 nachxs 21 comentarios

Hola otra vez por aqui retomando el blog despues de un largo receso, como comprenderan con la familia y el trabajo se nos hace dificil a veces publicar algun post, pero bueno manos a la obra.

Este post es ha solicitud de unos compañeros que estan aprendiendo a trabajar con jsp, ajax y postgresql y necesitaban alguna guía práctica para trabajar la parte del llenado de combos de forma dependiente justamente utilizando ajax y obteniendo la data desde una base de datos.

Bueno, lo primero que debemos tener en cuenta es la estructura de tablas en la base de datos desde donde obtendremos la informacion. Para este ejemplo tome como ejemplo la siguiente estructura.

tablascomo podemos observar la base de datos se llama bd_tutorial y las tablas serian productos y detalle_producto respectivamente.

Una vez creado las tablas, ahora lo que hacemos es crear nuestro proyecto web al cual llamaremos webapp_ajaxDemo y comenzar armar nuestra estructura de archivos jsp, javascript y clases java, las cuales accederan a la informacion de la base de datos. Creamos el proyecto y generamos la siguiente estructura propuesta:

proyectoAhora, lo que haremos sera ver como obtener la informacion de la base de datos, para esto vamos a trabajar nuestras clases java empezando por los beans en donde almacenaremos la informacion  y terminando por las clases  DAO , las cuales seran las que recogeran la informacion de la base de datos.  Lo primero es tener la estructura de los archivos productoBean.java y detalleProductoBean.java, mas o menos seria la siguiente:

producto1

detalleproducto

Una vez detallada la clases Bean, ahora nos enfocamos en las clase BO y DAO, yo siempre hago esta distribucion para tener en cuenta el manejo de capas, esto ayuda mucho. Ahora veremos la estructura de la clase productoBo.java, aqui es donde definiremos los metodos que tendran acceso a los métodos de las clase DAO.

productobo

Los métodos que usaremos getProducto y getDetalleProducto los cuales nos devuelven como resultado un ArrayList de Beans esto con la finalidad de poder tener toda la informacion y poder seleccionar lo necesario. Ademas hacen referencia a métodos de las clases DAO la cuales ya tenemos definidas.

Ahora, veremos las estructuras y codificacion de las clases  que obtienen la información de la BD productoDao.java y detalleProductoDao.java respectivamente:

Para las clases productoDao.java y detalleProductoDao.java, por cuestiones de espacio solo estoy mostrando los métodos que acceden a la información, se asume que ustedes ya tienen definido los métodos de conexion y desconexion respectivamente.

productoDao.java:

productodao

detalleProductoDao.java:

detalleproductodao

Una vez ya completada la estructura y codificacion de las clases java, ahora pasaremos a codificar las paginas JSP, lo primero que haremos sera mostrar el primer combo que serian los productos, para esto mostraremos una parte de la codigo del archivo index.jsp la cual sufrira alguna moficiacion mas adelante, por el momento tenemos lo siguiente:

combo_1

Fijemos en los recuadros de color rojo, en el primer recuadro lo que hago es importar la clase productoBo y productoBean, dado que en el primero se tiene el metodo que obtendria la informacion de los productos, y en el segundo recuadro es donde muestro los productos los cuales son almacenados en beans del tipo productoBean por eso la declaracion en el primer recuadro.

Deben tener en cuenta que en la linea de código en donde muestro el detalle del producto en la opcion value el combo se esta poniendo el id del producto, esto para que cuando mandemos el producto se tome el id para poder realizar la busqueda en el detalle y no el nombre del producto.

Ahora veremos la parte de AJAX, para esto tenemos un archivo javascript ajax_producto.js en el cual tendremos el siguiente código:

ajax_producto1

Vemos que estamos declarando la funcion getDetalleProducto al cual le estamos enviando como parametro id_pro, luego en la parte mas abajo vemos que hacemos la referencia a la pagina ajax_detalleProducto.jsp, que en la que recuperaremos la informacion de la tabla de detalles enviando como parametro el id_pro y ademas un identificador para hacer refresco a nuestras busquedas, esto por un problema en algunos navegadores con el manejo de su cache. Y la funcion resultado_detalle que es donde le indicamos donde mostrarnos el resultado.

Fijarse bien en esto ultimo ya que como veran estamos utilizando el identificador del elemento en donde pondremos el resultado que para este caso es result_detalle.

una vez terminado esto lo que haremos sera codificar la pagina que obtendra la informacion del detalle de producto, que en este caso es ajax_detalleProducto.jsp

detalle_ajax

Ahora solo nos queda adecuar la pagina index.jsp para que pueda hacerse la invocación, mostraremos el codigo segmentado por cuestiones de espacio.

index_1

En este primer segmento, podemos ver que aqui se hace la llamada a la libreria javascript ajax_producto.js la cual contiene a la función getDetalleProducto, fijense en el evento onchange del combo, alli es donde llamamos a la funcion que retornaria la informacion del detalle.

Ahora para el segundo segmento vemos el id=”result_detalle” que es el identificador que se utiliza para mostrar el combo con el detalle.

index_2Y practicamente esto seria todo. Se debe tener en cuenta que esto se hizo de forma rápida solo para cuestiones de enseñanza, esto se puede mejorar notablemente tal vez utilizando algun framework como jQuery o mejorando el código propuesto. Espero les sea de utilidad para algunos que recien empiezan con esto

PD: Los errores ortográficos son aproposito.

Descarga el ejemplo: webapp_ajaxDemo (Ejemplo modificado para trabajar con 3 combos)

Video Tutoriales Java

Marzo 2, 2009 nachxs Deja un comentario

Este es uno de los mejores materiales que podido encontrar, con referencia a video tutoriales sobre programacion con Java, y sobre todo en castellano. Pa ra si alguien esta interesado lo encontramos en el blog de Locx24

Jawin: Llamar metodos de una DLL con java

Enero 8, 2009 nachxs 38 comentarios

Jawin es una de las tantas librerias que se puede utilizar para poder trabajar los metodos de una DLL desde java. Lo mas comun era trabajar con JNI pero esto implicaba tener los fuentes de la DLL para poder realizar las modificaciones y volver a realizar la compilacion, algo tedioso en algunos casos.

Bueno una forma de utilizar esta libreria es creando una pequeña DLL en C con un metodo basico, por ejemplo el metodo “suma” que implica tener dos variables de entrada del tipo entero y retornar un valor entero. Para esto configuré NetBeans con el compilador gcc para poder desarrollar codigo en C/C++ siguiendo este manual, para luego crear un proyecto del tipo “C/C++ Dynamic Library”. Una vez creado este proyecto agrego un fuente al cual llamare “Suma.c” y dentro de este archivo creamos el metodo antes mencionado, quedando de la siguiente manera:

jawin_01

Como veran es algo simple y basico, ahora solo nos queda construir la DLL, para esto click derecho sobre el proyecto y elegimos “Build”, y listo ya tenemos generada nuestra DLL.

Ahora para poder utilizar el metodo de la DLL desde java, hacemos lo siguiente:

  • Primero agregamos la libreria jawin al proyecto (jawin.jar)
  • Luego segun nos indica la documentacion copiamos el archivo “jawin.dll” en el directorio “C:\windows\System32″.

Y listo ahora empezamos a escribir el codigo que llamaria al metodo, algo asi como esto:

jawin_02

Como podran ver el nombre de mi DLL es “LibSuma.dll”, tener en cuenta que el nombre de la dll lo da el nombre del proyecto(anteponiendose el sufijo “lib”, pero esto lo pueden variar en las propiedades del proyecto), y el metodo, en este caso “suma”; hago la invocacion dandole los parametros antes mencionados y en la variable “g” recepciono el resultado y listo. 

jawin_03

Cabe aclarar que yo puse solo el nombre de la libreria y no toda la ruta porque agregue la ruta de mi libreria a mi PATH. Otra forma seria colocar la libreria generada en “C:\Windows\System32″; o de lo contrario colocan toda la ruta de la libreria incluida el nombre.

Como veran para este caso es algo sencilo de trabajar y no tan tedioso, yo ahora estoy en un proyecto algo mas grande trabajando con esta libreria y la verdad me esta dando resultados.

Categorías:C/C++, Java, NetBeans Etiquetas:, , , ,