المشاركات

عرض الرسائل ذات التصنيف tips

mysqldump: ignorando el tag DEFINER

صورة
Este es otro no-apunte-de-java. Se trata del MySQL. Resulta que he tratado de hacer un dump de un servidor a otro. Pero como tienen usuarios restringidos por host, y el mysqldump me genera el script con el tag /*!50013 DEFINER=`root`@`10.%` SQL SECURITY DEFINER */ ... pensé que debería haber algún parámetro de mysqldump para ignorar estos tags. Pero según el mismo MySQL dicen que tendría problemas de seguridad (vamos: darle derechos de pasar un VIEW o STORED PROCEDURE a alguien que no le corresponde). Así que tuve que valerme de un comando de unix/linux para ignorar estos tag:

Descargar XLS y PDF sin abrirlos en el navegador (versión Servlet)

صورة
Anteriormente hice un post de cómo " Descargar XLS y PDF sin abrirlos en el navegador " pero fue realizado con PHP. Ahora les traigo el mismo ejemplo pero usando Servlet

Actualización de GlassFish v3 a v3.0.1

صورة
Junto con el lanzamiento de NetBeans 6.9, Oracle también lanzó GlassFish v 3.0.1 (que también viene incluido en el NB 6.9) Ahora, si ya tenemos en producción un GFv3 con todas las aplicaciones configuradas, JDBC Resources puesto a punto... ¿cómo le hacemos para actualizar a la versión  3.0.1? Tranquilos, no hay que temer.. aquí está la solución

Empaquetar una aplicación para distribuir, desde NetBeans

صورة
Uno de los tantos motivos por lo que utilizo NetBeans en lugar de otro IDE, es que utiliza la Apache Ant para compilar, crear .jar .war .ear, javadoc, etc.. prácticamente para todo, y solo usando un archivo .xml. Y lo mejor es que se puede personalizar el .xml a nuestro antojo. En este post se va a explicar cómo empaquetar una aplicación Swing en un archivo .zip para ser distribuido a los usuarios finales.

net.sf.jasperreports.engine.JRRuntimeException: Unknown hyperlink target 0

Si haz usado iReport para hacer tus reportes, y al ejecutarlo en un servidor lanza este error net.sf.jasperreports.engine.JRRuntimeException: Unknown hyperlink target 0 y por más que compiles y recompiles el .jrxml, lanza el mismo error.... revisa las versiones del iReport y del JasperReports utilizado en el proyecto.

Convertir cualquier cadena en objeto java.util.Date

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = dateFormat.parse("2010-05-17 15:18:19");

Definición de DataSource en JavaEE6

Las aplicaciones Java EE que se han mostrado en este blog son más orientados para desplegarlos en GlassFish. Esto conlleva a que cada los DataSource sean de acuerdo para proveedor de cada Java EE. Así, mis ejemplos para GlassFish no funcionarían para JBoss, Geronimo, WebLogic, etc. Aún así, cuando se desarrolla la aplicación desde NetBeans, y cuando se genera el .war, este no asegura que en ese archivo no exista la configuración de DataSource para la aplicación para usar. Por ejemplo, para GlassFish desde NetBeans se crea el archivo sun-resources.xml , pero este archivo no existe dentro del .war. Por tanto, antes de desplegar el .war en el GlassFish, se necesita crear manualmente el Pool de Conexiones y el Recurso JDBC. Como siempre he dicho a los que he dictado el curso Java EE: el archivo sun-resources.xml es el archivo de recursos para el modo de desarrollo. Solo es usado desde NetBeans. Ahora bien ¿no debería haber un archivo único? Vamos: el JPA funciona para todos los motores

Nuevas sugerencias (hints) de NB 6.9

صورة
He estado revisando el nuevo NetBeans 6.9 y he encontrado algunos interesantes hints. No concatenar en un StringBuilder/StringBuffer El logger debe ser final Parametriza el logger, no lo concatenes

Concatenar filas en una columna (MySQL)

Este truco lo vi en la documentación de MySQL (vamos, sí, sí. no es Java, pero es algo que encontré y quiero compartirlo). Imaginemos que tenemos una tabla así +--------+--------+ | campo1 | campo2 | +--------+--------+ | fila1 | a | | fila2 | b | | fila2 | c | | fila1 | b | | fila3 | b | | fila2 | c | +--------+--------+ Y queremos concatenar todos los valores del campo2 por cada fila no repetida de campo1 así: +--------+--------+ | campo1 | campo2 | +--------+--------+ | fila1 | a,b | | fila2 | b,c | | fila3 | b | +--------+--------+ Para ello, hay que usar la función de agregación GROUP_CONCAT SELECT campo1,group_concat(distinct campo2) FROM tabla GROUP BY 1

Java: Primeros pasos - La revista

El grupo "Java: Primeros Pasos" ha lanzado el segundo número de su revista digital. La podéis descargar de aquí http://osum.sun.com/group/javaprimerospasos Los temas que tratan en este número son: Java Web "JSP": Cómo crear una JSP. (Usando el único IDE que lo tiene todo: NetBeans*) Instalación de MySQL, Apache y PHP en Fedora Muy recomendada para quienes recién se inician en el mundo Java. Felicitaciones al grupo (*) La publicidad de NB en este post es mía :)

Plugins curiosos para NetBeans 6.8

صورة
Considero que la capacidad de un software también se mide por la de sus complementos. Aún no sale la versión oficial de NB 6.8 (en este momento está en versión Beta ) y he podido ver algunos plugins que me llaman la atención. Para este post, estoy utilizando la versión construida el 28/10/2009 (o sea, el día que escribo este post). Los plugins (en orden alfabético, y no por preferencia) que considero interesantes hoy, son los siguientes: Entity Relationship Diagrama Support Explore from here Graphical Class View Java Go to implementation Run Terminal User tasks   Comencemos... Previa instalación de los plugins desde Tools > plugins, y previa lectura de la licencia (la que nadie lee ninguno leemos), y después del reinicio del IDE, nos pondremos  probar cada uno de estos plugins, y ver si son buenos o no. Ya ustedes hacen su veredicto. 1. Entity Relationship Diagrama Support Tenemos una base de datos, con relaciones, contraints, foreing keys y demás cosas propi

Java SE 6 Update 15 disponible (y cómo revivir a Glassfish con una nueva version de Java)

Ya está disponible la actualización 15 de Java SE 6. Incluye mejoras de seguridad, rendimiento y el nuevo colector de basura G1 . Lo pueden descargar desde aquí http://java.sun.com/javase/downloads/index.jsp . ¿Y si malogro mi Glassfish? Quizás te pasó esto: tienes tu GF funcionando de las mil maravillas, y quieres actualizar tu JDK. Luego, tratas de ejecutar el GF nuevamente (ya sea directamente desde asadmin o desde el NB) y no funciona. Y lo que puedes  hacer es reinstalar todo el GF... o peor aún: regresar a la versión anterior del JDK. la solución: Si estás en Windows Edita el archivo %GLASSFISH_HOME%\config\asenv.bat busca la línea que comienza con set AS_JAVA= Cambia la ruta para que apunte a la dirección del JDK que acabas de instalar. Por ejemplo, si acabas de instalar el JDK 6u15, escribe así set AS_JAVA=c:\Archivos de programa\Java\jdk1.6.0_15 Guardas e inicias el GF. %GLASSFISH_HOME% es el directorio donde instalaste el GF, ya sea el que vino con el NB (por

Glassfish: " Error al cargar los descriptores de implementación para el módulo..."

El escenario es el siguiente: Tienes un módulo EJB que consume un WebService, ya sea desde otro proyecto local o desde un WSDL externo al proyecto. Y tienes una aplicación web que utiliza el módulo EJB. Cuando despliegas el EJB, no hay problemas, pero cuando despliegas el módulo web, no sale nada y lanza un error: wsdl file META-INF/wsdl/client/......wsdl does not exist for service-ref... Dirás (como yo dije) "pero si compila!!!".. y pensarás "y si consumo el WS dentro del modulo web?". y te negarás porque eso rompería el esquema que pensabas... bueno... alguien también le pasó y también encontró la solución. Nada más hay que revisar el código que crea NetBeans en el EJB cuando consume un WebService: @WebServiceRef(wsdlLocation = "META-INF/wsdl/client/ProductsList/localhost_8084/ProductsListService/ProductsList.wsdl") private ProductsListService service; El EJB lo consume normalemente, porque el WSDL está dentro del mismo proyecto EJB. Cuando es llamado d

NetBeans en la bandeja del sistema (System Tray)

صورة
Encontré un plugin en la ventana "plugins" del NetBeans, llamado "System tray". Lo instalé, y me olvidé que lo habia hecho... hasta que minimicé todas las ventanas, y ví que apareció esto en mi bandeja del sistema Bueno, ahí lo tienen.. el NetBeans en el "System tray". Pueden ver sus opciones en la ficha "System tray" de "Misceláneas" de las opciones de NetBeans.

Rotar las etiquetas en JFreeChart

صورة
Estuve buscando y encontré este código muy práctico para rotar las etiquetas en JFreeChart http://left.subtree.org/2007/08/14/rotate-labels-jfreechart/ Funciona tanto para desktop ... como para web.

getParameter() con JSF y ICEfaces

Cuando se quiere obtener el parámetro de un URL usando JSP, se usa así: String param=request.getParameter("nombre"); En JSF, es un poquitín más largo: String param=FacesContext.getCurrentInstance().getExternalContext() .getRequestParameterMap().get("nombre"); Pero lo anterior no funciona en ICEfaces. Devuelve siempre nulo. Si se quiere obtener el parámetro por URL, se debe escribir: String param=((HttpServletRequest)FacesContext.getCurrentInstance() .getExternalContext().getRequest()).getParameter("nombre");

Filtrar una tabla en JTable

Un alumno me pregunta cómo filtrar los datos de un JTable, siendo estos datos obtenidos de un query. La mejor manera no es manipular el JTable a través de su cantidad de columnas, agregando filas, borrando algunas de ellas, modificando las celdas, etc. Eso es realmente un dolor de cabeza. Recordemos que estamos trabajando en Java que es Orientado  a Objetos.. no en VisualBasic. Así que, si queremos manipular los datos de un JTable, debemos usar una clase que se encargue de manipular los datos, y que el jtable use esa clase. La interfaz TableModel es la indicada. Pero tiene demasiados métodos a implementar. Así que usaremos algo ya casi hecho. Se llama la clase abstracta AbstractTableModel . Simplemente, debemos heredarla: public class PersonasTableModel extends AbstractTableModel {.... Y con eso debemos implementar tres métodos: getRowCount() , getColumnCount() y getValueAt(int rowIndex, int columnIndex) . La clase que estamos creando debe tener un arreglo interno. Este arreglo es el

JDBC para Access sin DSN

Para acceder a Access desde un JDBC, siempre nos han enseñado que se debe a Herramientas Administrativas > Administrador de Orígines de ODBC, crear un nuevo Origen, especificar el nombre del DNS, bla bla bla, y después desde el JDBC escribir como URL el nombre del DNS, bla bla. Lo malo de esta técnica es que en cada máquina donde se va a ejecutar la aplicación java, necesita que se configure el ODBC. Ya que somos profesionales, debemos evitar las configuraciones adicionales para que nuestra aplicación funcione. Java nos hace profesionales :) Así que, ahora evitaremos todo el rollo de crear el DSN en el ODBC. Usemos esto: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String myDB ="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/data/neptuno.MDB"; Connection conn = DriverManager.getConnection(myDB,"",""); Pero no solo es para Access, sino para cualquier ODBC. Veamos como hacer lo mismo pero para con el Excel Class.forName("sun.j

Guardar imágenes en base de datos usando JPA

Hay infinidad de ejemplos de cómo guardar una imagen a base de datos con JDBC, y cómo recuperarla. Pues esta vez mostraré un ejemplo usando JPA. Supongamos que nuestra clase entidad tiene una propiedad llamada imagen que es donde se guardará la imagen. Esta propiedad debe declararse así: @Lob @Column(name = "imagen") private byte[] imagen; Para guardar una imagen (supongamos una que esté en el disco), debemos realizar lo siguiente: Entidad i = new Entidad(); // nuestra entidad File f = new File("D:/Imagen006.jpg"); //asociamos el archivo fisico InputStream is = new FileInputStream(f); //lo abrimos. Lo importante es que sea un InputStream byte[] buffer = new byte[(int) f.length()]; //creamos el buffer int readers = is.read(buffer); //leemos el archivo al buffer i.setImagen(buffer); //lo guardamos en la entidad em.persist(i); //y lo colocamos en el EntityManager Ahora, para recuperar el contenido haremos que se muestre el contenido en un JFrame: Enti

Convirtiendo Date a String / String a Date

Podemos convertir un objeto fecha a String de varias maneras. Cada manera es un tipo de formato establecido por el JVM instalado en nuestro computador. Consideremos este ejemplo: Date d1 = new Date(); DateFormat[] dfa = new DateFormat[6]; dfa[0] = DateFormat.getInstance(); dfa[1] = DateFormat.getDateInstance(); dfa[2] = DateFormat.getDateInstance(DateFormat.SHORT); dfa[3] = DateFormat.getDateInstance(DateFormat.MEDIUM); dfa[4] = DateFormat.getDateInstance(DateFormat.LONG); dfa[5] = DateFormat.getDateInstance(DateFormat.FULL); for (DateFormat df : dfa) { System.out.println(df.format(d1)); } En mi caso, el resultado es: 09/02/09 10:29 AM 09/02/2009 09/02/09 09/02/2009 9 de febrero de 2009 lunes 9 de febrero de 2009 Notemos el resultado del formato obtenido por DateFormat.getInstance() . Es toda la fecha en formato corto, además de la hora. Mientras que si obtenemos el formato con DateFormat.getDateInstance() la fecha se muestra en formato medio (Podemos consultar la configuració