martes, 22 de abril de 2008

generar pdf con actionscript usando AlivePDF

En muchos proyectos, siempre surge el "y no puedo imprimirme esto?"... si la aplicación es un entorno web, se suele recurrir entonces a generar un PDF.
Trabajando con Flex y ActionScript, me he topado con AlivePDF, una librería SWC que permite generar este tipo de documentos desde ActionScript. En la web hay un par de video tutoriales muy sencillos y para empezar vienen muy bien.
Aunque en los ejemplos utilizan un PHP para devolver el documento, yo he probado con el servlet de Java que tienen posteado, y también funciona.

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class CreatePDFServlet extends HttpServlet {

public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
doGet(req, resp);
}

public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
int i = 0;
int k = 0;
int maxLength = req.getContentLength();
byte[] bytes = new byte[maxLength];
String method = req.getParameter("method");
String name = req.getParameter("name");
ServletInputStream si = req.getInputStream();
while (true)
{
k = si.read(bytes,i,maxLength);
i += k;
if (k <= 0)
break;
}
if (bytes != null)
{
ServletOutputStream stream = resp.getOutputStream();
resp.setContentType("application/pdf");
resp.setContentLength(bytes.length);
resp.setHeader("Content-Disposition",method + ";filename=" + name);
stream.write(bytes);
stream.flush();
stream.close();
}
else
{
resp.setContentType("text");
resp.getWriter().write("bytes is null");
}
}
}


Se puede hacer de todo con el documento, hasta dibujar, usando el API que proporciona.

AS:
myPDF = new PDF( Orientation.PORTRAIT, Unit.MM, Size.A4 );
myPDF.setDisplayMode( Display.FULL_PAGE, Layout.SINGLE_PAGE );


lunes, 7 de abril de 2008

Spring Hibernate - Lazy initialization

Lazy Initialization and the DAO pattern with Hibernate and Spring

Este artículo me ha venido de maravilla para poder integrar SpringWF con Hibernate. Como el autor explica, Hibernate ofrece ambos modos de carga de datos, "lazy" y "no-lazy". La diferencia es importante, ya que en modo "no-lazy", al inicializar el objeto, Hibernate inicializará también los objetos relacionados, esto puede suponer un número elevado de SQL's al inicializar una entidad. Además la situación empeorará si en el sistema existen relaciones bidireccionales entre las entidades, lo que puede suponer la necesidad de cargar gran parte de la base de datos.

Yo lo he probado con el con la configuración del Interceptor, y funciona bien, por ese motivo no he llegado a probar la configuración con el Filter, aunque entiendo que también funcionará.
Se puede incluso configurar Spring para que cree automaticamente los "target beans" del "interceptor", resulta cómodo aunque hay que seguir la regla de nombres.

<bean class=
"org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames"><value>*myTargetBean</value></property>
<property name="interceptorNames">
<list>
<value>myInterceptor</value>
</list>
</property>
</bean>

martes, 1 de abril de 2008

trasteando con HSQLDB

Esta es una pequeÑa tarea Ant, que arranca el servidor local de HSQLDB.
Es un servidor de base de datos implementado en Java, muy práctico para desarrollo en local.
Hay que tener en cuenta que no es servidor para producción.
El JAR incluye definición de tareas para ANT, y también existen plugins de Maven2 o plugins para Eclipse.
Aunque hacerlo con ANT resulta sencillo, y es fácil de gestionar con la vista ANT de Eclipse.

<!-- RUN HSQLDB -->
<target name="run-hsqldb" depends="init">
<echo message="Run HSQLDB"/>
<java classname="org.hsqldb.Server" fork="true" failonerror="true">
<classpath refid="hsqldb_classpath"/>
<arg line="-database.0 src/main/database/DBNAME -dbname.0 DBNAME"/>
</java>
</target>

En "init" definir el classpath incluyendo el jar de HSQLDB.
También incluye un DB Manager visual, lo justo para ejecutar SQL, que no es poco...

<!-- DB MANAGER -->
<target name="dbmanager" depends="run-hsqldb" description="Start HSQLDB manager" >
<echo message="Start DB Manager"/>
<java classname="org.hsqldb.util.DatabaseManagerSwing"
fork="yes" classpathref="compile.classpath" failonerror="true">
<arg value="-url"/>
<arg value="jdbc:hsqldb:hsql://localhost/DBNAME"/>
<arg value="-driver"/>
<arg value="org.hsqldb.jdbcDriver"/>
</java>
</target>

Ya por último, para ejecutar SQL que tengamos almacenados en fichero:

<!-- MY SCRIPTS -->

<target name="createDatabase" >
<sql classpathref="compile.classpath"
driver="org.hsqldb.jdbcDriver"
url="jdbc:hsqldb:hsql://localhost/DBNAME"
userid="sa"
password=""
src="src/main/database/mySQLScript.sql"
/>
</target>

Movie & TV Show Preview Widget

Springframework.org -

We Heart Code

Eclipse Plugin Central