<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Wysmedia.com &#187; grails</title>
	<atom:link href="http://www.wysmedia.com/category/programming/grails/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.wysmedia.com</link>
	<description>~ We make IT easy for you ~</description>
	<lastBuildDate>Fri, 08 May 2009 07:02:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Native SQL Query on Grails</title>
		<link>http://www.wysmedia.com/2009/05/native-sql-query-on-grails/</link>
		<comments>http://www.wysmedia.com/2009/05/native-sql-query-on-grails/#comments</comments>
		<pubDate>Mon, 04 May 2009 14:50:44 +0000</pubDate>
		<dc:creator>adwin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.wysmedia.com/?p=76</guid>
		<description><![CDATA[As we know, Hibernate Query Language or using GORM are not enough, for example if we want to create complex queries or using native sql functions ie. date() function in MySQL. That&#8217;s why we need to use Groovy SQL to achive that.
 
Before we started, I want to let you know that once we using [...]]]></description>
			<content:encoded><![CDATA[<p>As we know, Hibernate Query Language or using GORM are not enough, for example if we want to create complex queries or using native sql functions ie. date() function in MySQL. That&#8217;s why we need to use Groovy SQL to achive that.</p>
<p> <span id="more-76"></span></p>
<p>Before we started, I want to let you know that once we using native functions in sql, we might got problem when we tried to deploy on another database server. So be wise.</p>
<p>Here is simple example how to do that :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="groovy" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #a1a100;">groovy.sql.Sql</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> ReportController <span style="color: #66cc66;">&#123;</span> 
    <span style="color: #000000; font-weight: bold;">def</span> dataSource <span style="color: #66cc66;">;</span> 
    .....
    <span style="color: #000000; font-weight: bold;">def</span> <span style="color: #993399;">print</span> <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#123;</span>
        .....
        <span style="color: #000000; font-weight: bold;">def</span> sql <span style="color: #66cc66;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #993399; font-weight: bold;">Sql</span><span style="color: #66cc66;">&#40;</span>dataSource<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
        <span style="color: #aaaadd; font-weight: bold;">List</span> lparams <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#91;</span>startDate, endDate<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">;</span>
        <span style="color: #000000; font-weight: bold;">def</span> query2 <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;select * from invoiceh where trx_date between ? and ? &quot;</span><span style="color: #66cc66;">;</span>
        <span style="color: #000000; font-weight: bold;">def</span> result <span style="color: #66cc66;">=</span> sql.<span style="color: #006600;">rows</span><span style="color: #66cc66;">&#40;</span>query2,lparams<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
        ......  <span style="color: #808080; font-style: italic;">// fetch the result into your gsp / you can process it further</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>This code will return result as array / collections.<br />
Simple isn&#8217;t it ?
</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=57a2f476-2a53-8865-b811-e18917781825" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.wysmedia.com/2009/05/native-sql-query-on-grails/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dance with Dynamic Jasper Report</title>
		<link>http://www.wysmedia.com/2009/05/dance-with-dynamic-jasper-report/</link>
		<comments>http://www.wysmedia.com/2009/05/dance-with-dynamic-jasper-report/#comments</comments>
		<pubDate>Sat, 02 May 2009 03:07:35 +0000</pubDate>
		<dc:creator>adwin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[report]]></category>
		<category><![CDATA[dynamic jasper]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[jasper]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.wysmedia.com/?p=64</guid>
		<description><![CDATA[Tutorial on using custom queries with Dynamic Jasper Report in Grails web application]]></description>
			<content:encoded><![CDATA[<div id="attachment_70" class="wp-caption alignleft" style="width: 160px"><img src="http://www.wysmedia.com/wp-content/uploads/2009/05/jasper-report-opensource-150x40.jpg" alt="jasper report " title="jasper-report-opensource" width="150"  class="size-thumbnail wp-image-70" /><p class="wp-caption-text">jasper report </p></div>Dynamic Jasper Report is such a nice thing that exists in this world. You can create a report using powerfull Jasper Engine without creating a jrxml first. You don&#8217;t need iReport anymore. Actually I hate using iReport, it is not fun for me <img src='http://www.wysmedia.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  <span id="more-64"></span></p>
<p>I will show you step by step how to use Dynamic Jasper Report with custom query. I won&#8217;t show how to use <strong>static reportable</strong> in Domain because there are lots of tutorial like <a href="http://blog.lucastex.com/2009/04/16/4of25-jasper-reports-in-grails-with-dynamic-jasper/">this one</a></p>
<p><strong>Installing Plugins</strong><br />
It is as simple typing </p>
<blockquote><p> grails install-plugin dynamic-jasper</p></blockquote>
<p><strong>Generating Domains step</strong><br />
We create 2 domains name: Book and Author simply type</p>
<blockquote><p>
grails create-domain-class Book<br />
grails create-domain-class Author
</p></blockquote>
<p>and add some field on the domains :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="groovy" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> <span style="color: #aaaadd; font-weight: bold;">Book</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #aaaadd; font-weight: bold;">String</span> name <span style="color: #66cc66;">;</span> 
    <span style="color: #aaaadd; font-weight: bold;">String</span> barcode <span style="color: #66cc66;">;</span>
    <span style="color: #aaaadd; font-weight: bold;">String</span> summary<span style="color: #66cc66;">;</span>
    Author author<span style="color: #66cc66;">;</span> 
&nbsp;
    <span style="color: #000000; font-weight: bold;">static</span> belongsTo <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#91;</span>author:Author<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">static</span> constraints <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#123;</span>
        name<span style="color: #66cc66;">&#40;</span>nullable:<span style="color: #000000; font-weight: bold;">false</span>, blank:<span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
        barcode<span style="color: #66cc66;">&#40;</span>nullable:<span style="color: #000000; font-weight: bold;">false</span>, blank:<span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
        summary<span style="color: #66cc66;">&#40;</span>nullable:<span style="color: #000000; font-weight: bold;">false</span>, blank:<span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #aaaadd; font-weight: bold;">String</span> toString<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #ff0000;">&quot;${name}&quot;</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="groovy" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Author <span style="color: #66cc66;">&#123;</span>
    <span style="color: #aaaadd; font-weight: bold;">String</span> name <span style="color: #66cc66;">;</span>
    <span style="color: #aaaadd; font-weight: bold;">String</span> summary <span style="color: #66cc66;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">static</span> hasMany <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#91;</span>books:<span style="color: #aaaadd; font-weight: bold;">Book</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">static</span> constraints <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#123;</span>
        name<span style="color: #66cc66;">&#40;</span>nullable:<span style="color: #000000; font-weight: bold;">false</span>, blank:<span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
        summary<span style="color: #66cc66;">&#40;</span>nullable:<span style="color: #000000; font-weight: bold;">false</span>, blank:<span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #aaaadd; font-weight: bold;">String</span> toString<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #ff0000;">&quot;${name}&quot;</span><span style="color: #66cc66;">;</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p><b> Create a controller for displaying the Jasper </b></p>
<blockquote><p>grails create-controller Report</p></blockquote>
<p>Here we want to create an excel report so we fill ReportController with this :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
</pre></td><td class="code"><pre class="groovy" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #a1a100;">net.sf.jasperreports.engine.*</span><span style="color: #66cc66;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #a1a100;">net.sf.jasperreports.engine.data.*</span><span style="color: #66cc66;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #a1a100;">net.sf.jasperreports.engine.export.*</span><span style="color: #66cc66;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #a1a100;">net.sf.jasperreports.engine.util.*</span><span style="color: #66cc66;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #a1a100;">net.sf.jasperreports.view.*</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #a1a100;">ar.com.fdvs.dj.domain.DynamicReport</span><span style="color: #66cc66;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #a1a100;">ar.com.fdvs.dj.domain.builders.FastReportBuilder</span><span style="color: #66cc66;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #a1a100;">ar.com.fdvs.dj.core.DynamicJasperHelper</span><span style="color: #66cc66;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #a1a100;">ar.com.fdvs.dj.core.layout.ClassicLayoutManager</span><span style="color: #66cc66;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #a1a100;">ar.com.fdvs.dj.output.*</span><span style="color: #66cc66;">;</span>
&nbsp;
&nbsp;
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> ReportController <span style="color: #66cc66;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">def</span> index <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#123;</span> 
        FastReportBuilder drb <span style="color: #66cc66;">=</span> <span style="color: #000000; font-weight: bold;">new</span> FastReportBuilder<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
        drb <span style="color: #66cc66;">=</span> drb.<span style="color: #006600;">addColumn</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Book Name&quot;</span>,<span style="color: #ff0000;">&quot;name&quot;</span>,<span style="color: #aaaadd; font-weight: bold;">String</span>.<span style="color: #000000; font-weight: bold;">class</span>.<span style="color: #006600;">getName</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>,<span style="color: #cc66cc;">30</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
        drb <span style="color: #66cc66;">=</span> drb.<span style="color: #006600;">addColumn</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Barcode&quot;</span>,<span style="color: #ff0000;">&quot;barcode&quot;</span>,<span style="color: #aaaadd; font-weight: bold;">String</span>.<span style="color: #000000; font-weight: bold;">class</span>.<span style="color: #006600;">getName</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>,<span style="color: #cc66cc;">20</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
        drb <span style="color: #66cc66;">=</span> drb.<span style="color: #006600;">addColumn</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Author&quot;</span>,<span style="color: #ff0000;">&quot;author.name&quot;</span>,<span style="color: #aaaadd; font-weight: bold;">String</span>.<span style="color: #000000; font-weight: bold;">class</span>.<span style="color: #006600;">getName</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>,<span style="color: #cc66cc;">30</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
        drb <span style="color: #66cc66;">=</span> drb.<span style="color: #006600;">addColumn</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Author Summary&quot;</span>,<span style="color: #ff0000;">&quot;author.summary&quot;</span>,<span style="color: #aaaadd; font-weight: bold;">String</span>.<span style="color: #000000; font-weight: bold;">class</span>.<span style="color: #006600;">getName</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>,<span style="color: #cc66cc;">70</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
        DynamicReport dr <span style="color: #66cc66;">=</span> drb.<span style="color: #006600;">setTitle</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;My tester &quot;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">setUseFullPageWidth</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">build</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
        JRDataSource ds <span style="color: #66cc66;">=</span> <span style="color: #000000; font-weight: bold;">new</span> JRBeanCollectionDataSource<span style="color: #66cc66;">&#40;</span><span style="color: #aaaadd; font-weight: bold;">Book</span>.<span style="color: #006600;">list</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>   
        JasperPrint jp <span style="color: #66cc66;">=</span> DynamicJasperHelper.<span style="color: #006600;">generateJasperPrint</span><span style="color: #66cc66;">&#40;</span>dr, 
                <span style="color: #000000; font-weight: bold;">new</span> ClassicLayoutManager<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, ds<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
&nbsp;
        <span style="color: #000000; font-weight: bold;">def</span> reportFormat <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'XLS'</span><span style="color: #66cc66;">;</span>
        <span style="color: #000000; font-weight: bold;">def</span> reportFileName <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;myReport&quot;</span><span style="color: #66cc66;">;</span>
        ReportWriter reportWriter <span style="color: #66cc66;">=</span> ReportWriterFactory.<span style="color: #006600;">getInstance</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">getReportWriter</span><span style="color: #66cc66;">&#40;</span>jp, reportFormat, <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>JRHtmlExporterParameter.<span style="color: #006600;">IMAGES_URI</span><span style="color: #66cc66;">&#41;</span>: <span style="color: #ff0000;">&quot;${request.contextPath}/report/image?image=&quot;</span>.<span style="color: #006600;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>reportFileName<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
            response.<span style="color: #006600;">addHeader</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'content-disposition'</span>, <span style="color: #ff0000;">&quot;attachment; filename=${reportFileName}.${reportFormat.toLowerCase()}&quot;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#125;</span>
        reportWriter.<span style="color: #006600;">writeTo</span><span style="color: #66cc66;">&#40;</span>response<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>FastReportBuilder will create columns and do what the jrxml does.<br />
DynamicReport will build the report for you (i think it identical with compiling jrxml to .jasper)</p>
<p>You fill data of the report using JRBeanCollectionDataSource. here we use simple query Book.list(). You might try it using Criteria as well.</p>
<p>To display the report in the browser, we just tell the browser about the header and its content by this code :</p>

<div class="wp_syntax"><div class="code"><pre class="groovy" style="font-family:monospace;">ReportWriter reportWriter <span style="color: #66cc66;">=</span> ReportWriterFactory.<span style="color: #006600;">getInstance</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">getReportWriter</span><span style="color: #66cc66;">&#40;</span>jp, reportFormat, <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>JRHtmlExporterParameter.<span style="color: #006600;">IMAGES_URI</span><span style="color: #66cc66;">&#41;</span>: <span style="color: #ff0000;">&quot;${request.contextPath}/report/image?image=&quot;</span>.<span style="color: #006600;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>reportFileName<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
            response.<span style="color: #006600;">addHeader</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'content-disposition'</span>, <span style="color: #ff0000;">&quot;attachment; filename=${reportFileName}.${reportFormat.toLowerCase()}&quot;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#125;</span>
        reportWriter.<span style="color: #006600;">writeTo</span><span style="color: #66cc66;">&#40;</span>response<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&lt;</span>/blockquote<span style="color: #66cc66;">&gt;</span></pre></div></div>

<p>done &#8230; that&#8217;s so easy.</p>
<p><div id="attachment_68" class="wp-caption alignleft" style="width: 784px"><img src="http://www.wysmedia.com/wp-content/uploads/2009/05/dynamic-jasper-result.png" alt="dynamic jasper result in excel format" title="dynamic-jasper-result" width="550" class="size-full wp-image-68" /><p class="wp-caption-text">dynamic jasper result in excel format</p></div>
<p>more information about dynamice jasper visit:<br />
<a href="http://dynamicjasper.sourceforge.net/">http://dynamicjasper.sourceforge.net/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wysmedia.com/2009/05/dance-with-dynamic-jasper-report/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open Flash Chart .6 for Grails</title>
		<link>http://www.wysmedia.com/2009/03/open-flash-chart-6-for-grails/</link>
		<comments>http://www.wysmedia.com/2009/03/open-flash-chart-6-for-grails/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 03:35:16 +0000</pubDate>
		<dc:creator>adwin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[grails]]></category>

		<guid isPermaLink="false">http://www.wysmedia.comyr.com/?p=53</guid>
		<description><![CDATA[It is released new version for open flash chart for Grails.
the tutorial was on http://mybytes.wordpress.com/
The difference is that 0.6 using OFC version 2 and 0.5 still using version 1. Version 2 is not compatible with version 1 so please watch out when you tried to update that plugin.
More information about Open Flash Chart 2, check [...]]]></description>
			<content:encoded><![CDATA[<p>It is released new version for open flash chart for Grails.<br />
the tutorial was on <a href="http://mybytes.wordpress.com/">http://mybytes.wordpress.com/</a></p>
<p>The difference is that 0.6 using OFC version 2 and 0.5 still using version 1. Version 2 is not compatible with version 1 so please watch out when you tried to update that plugin.</p>
<p>More information about Open Flash Chart 2, check the maker web on <a href="http://teethgrinder.co.uk/open-flash-chart-2/">http://teethgrinder.co.uk/open-flash-chart-2/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wysmedia.com/2009/03/open-flash-chart-6-for-grails/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Grails and Mysql InnoDB</title>
		<link>http://www.wysmedia.com/2009/02/grails-and-mysql-innodb/</link>
		<comments>http://www.wysmedia.com/2009/02/grails-and-mysql-innodb/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 01:03:11 +0000</pubDate>
		<dc:creator>adwin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[innodb]]></category>
		<category><![CDATA[mysq]]></category>

		<guid isPermaLink="false">http://www.wysmedia.comyr.com/?p=42</guid>
		<description><![CDATA[Here is a little tips to let grails create using innodb engine on mysql, everytime grails create a domain/table.

1
2
3
4
5
6
7
 dataSource &#123;
      pooled = true
      driverClassName = &#34;com.mysql.jdbc.Driver&#34;
      username = &#34;wysmedia&#34;
      password = &#34;password&#34;
   [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a little tips to let grails create using innodb engine on mysql, everytime grails create a domain/table.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="groovy" style="font-family:monospace;"> dataSource <span style="color: #66cc66;">&#123;</span>
      pooled <span style="color: #66cc66;">=</span> <span style="color: #000000; font-weight: bold;">true</span>
      driverClassName <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;com.mysql.jdbc.Driver&quot;</span>
      username <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;wysmedia&quot;</span>
      password <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;password&quot;</span>
      dialect <span style="color: #66cc66;">=</span> org.<span style="color: #006600;">hibernate</span>.<span style="color: #006600;">dialect</span>.<span style="color: #006600;">MySQLInnoDBDialect</span>
 <span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>
<strong>dialect = org.hibernate.dialect.MySQLInnoDBDialect</strong> that&#8217;s the main idea to set mysql using innodb. With InnoDB you can use service transaction or database transaction</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wysmedia.com/2009/02/grails-and-mysql-innodb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Checkbox of chaos</title>
		<link>http://www.wysmedia.com/2009/02/checkbox-of-chaos/</link>
		<comments>http://www.wysmedia.com/2009/02/checkbox-of-chaos/#comments</comments>
		<pubDate>Sat, 14 Feb 2009 02:14:22 +0000</pubDate>
		<dc:creator>adwin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[checkbox]]></category>
		<category><![CDATA[gsp]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://www.wysmedia.comyr.com/?p=22</guid>
		<description><![CDATA[Yesterday I got a headache problem with a checkbox. I wrote like this on GSP

1
2
3
4
5
6
&#60;g:form action=&#34;save&#34;&#62;
... table ... 
&#60;g:checkBox name=&#34;myCheckbox&#34; value=&#34;&#34; /&#62;
... other element ... 
&#60;input type='submit' value='Save'/&#62;
&#60;/g:form&#62;

did you know what the happened ? myCheckbox always returned empty or null value everytime I saved the form. I thought Grails has bug at first, I did [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday I got a headache problem with a checkbox. I wrote like this on GSP</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;g:form action=&quot;save&quot;&gt;
... table ... 
&lt;g:checkBox name=&quot;myCheckbox&quot; value=&quot;&quot; /&gt;
... other element ... 
&lt;input type='submit' value='Save'/&gt;
&lt;/g:form&gt;</pre></td></tr></table></div>

<p>did you know what the happened ? myCheckbox always returned empty or null value everytime I saved the form. I thought Grails has bug at first, I did check and create a checkbox using scaffold and I found that value=&#8221;" makes the null value everytime I saved the form<br />
The solution was simple enough:
</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;g:form action=&quot;save&quot;&gt;
... table ... 
&lt;g:checkBox name=&quot;myCheckbox&quot;/&gt;
... other element ... 
&lt;input type='submit' value='Save'/&gt;
&lt;/g:form&gt;</pre></td></tr></table></div>

<p>Just eliminate <i> value=&#8221;"</i> and it all solved. I learned that using <i>value=&#8221;somethingHere&#8221; </i> can be useful if we want to save a value into our database. I hope my tricks can save you from headache. Be aware of checkbox .. hahaha&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wysmedia.com/2009/02/checkbox-of-chaos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trapping Server Error</title>
		<link>http://www.wysmedia.com/2009/02/trapping-server-error/</link>
		<comments>http://www.wysmedia.com/2009/02/trapping-server-error/#comments</comments>
		<pubDate>Sat, 14 Feb 2009 01:14:12 +0000</pubDate>
		<dc:creator>adwin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.wysmedia.comyr.com/?p=16</guid>
		<description><![CDATA[Sometimes we found that our server are not behave normal, like there are bugs or server produce runtime exception (or error 404 etc). Those exception are not returned by ajax. So it will keep hidden and seems nothing happened. But if you have firebug installed, you can found that there are errors happened from your [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes we found that our server are not behave normal, like there are bugs or server produce runtime exception (or error 404 etc). Those exception are not returned by ajax. So it will keep hidden and seems nothing happened. But if you have firebug installed, you can found that there are errors happened from your server.</p>
<p>So here is how you can trap all errors and displayed on your screen (without using firebug).</p>
<p>This example works on grails main layout (but you can use this tips on any programming language, just put this code on main layout). My code using Jquery and JQalert to display the error </p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                $<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ajaxError</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #339933;">,</span> request<span style="color: #339933;">,</span> setting<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                    <span style="color: #003366; font-weight: bold;">var</span> re <span style="color: #339933;">=</span> <span style="color: #009966; font-style: italic;">/&amp;lt;br\/&amp;gt;|&amp;lt;br&amp;gt;/g</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// for replacing all &amp;lt;br/&amp;gt; with empty string in error 404</span>
                    <span style="color: #003366; font-weight: bold;">var</span> txt <span style="color: #339933;">=</span> request.<span style="color: #660066;">responseText</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span>re<span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    jqalert<span style="color: #009900;">&#40;</span>txt<span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;Server Error&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.wysmedia.com/2009/02/trapping-server-error/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Autobase plugins</title>
		<link>http://www.wysmedia.com/2009/02/autobase-plugins/</link>
		<comments>http://www.wysmedia.com/2009/02/autobase-plugins/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 16:47:33 +0000</pubDate>
		<dc:creator>adwin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[autobase]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[liquibase]]></category>
		<category><![CDATA[migration]]></category>

		<guid isPermaLink="false">http://www.wysmedia.comyr.com/?p=4</guid>
		<description><![CDATA[Sometimes, we need to refactor our domain / database table.  For example, our first domain looks like this :

1
2
3
4
class Person &#123;
String personName ;
BigDecimal monthlyIncome ;
&#125;

Now we want to eliminate/change the monthlyIncome and replace it with  BigDecimal weeklyIncome
we type

1
2
3
4
class Person &#123;
String personName ;
BigDecimal weeklyIncome;
&#125;

But, when we look at the table, it still have monthlyIncome field. [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes, we need to refactor our domain / database table.  For example, our first domain looks like this :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="groovy" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Person <span style="color: #66cc66;">&#123;</span>
<span style="color: #aaaadd; font-weight: bold;">String</span> personName <span style="color: #66cc66;">;</span>
<span style="color: #aaaadd; font-weight: bold;">BigDecimal</span> monthlyIncome <span style="color: #66cc66;">;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Now we want to eliminate/change the monthlyIncome and replace it with  <code>BigDecimal weeklyIncome</code></p>
<p>we type</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="groovy" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Person <span style="color: #66cc66;">&#123;</span>
<span style="color: #aaaadd; font-weight: bold;">String</span> personName <span style="color: #66cc66;">;</span>
<span style="color: #aaaadd; font-weight: bold;">BigDecimal</span> weeklyIncome<span style="color: #66cc66;">;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>But, when we look at the table, it still have monthlyIncome field. That&#8217;s why we need to eliminate it. If we works as a team, this could be a messy and troublesome, because <code>monthlyIncome</code> is not nullable. So it produce error (JDBC errors) when someone tried to update or save into that table.</p>
<p>That&#8217;s why we need Autobase for this dirty job. Autobase is Grails plugin that created base on <a href="http://www.liquibase.org">Liquibase</a>. Liquibase, however using xml format to do <em>database migration</em>. I hate to write on xml actually.<br />
Luckily, <a href="http://wiki.github.com/RobertFischer/autobase">Robert Fischer</a>, wrote this useful Grails&#8217;s plugin, so that we can write it using Groovy DSL.<br />
<span id="more-4"></span></p>
<p>Here is the steps we need to make:</p>
<ol>
<li>command line: grails install-plugin autobase. This command willl install autobase plugin into your project. You can download manually from <a href="http://plugins.grails.org">http://plugins.grails.org</a></li>
<li>command line: grails create-migration Person, this will produce migration script under migrations/computerName/PersonMigration.groovy</li>
<li>write this inside PersonMigration.groovy

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="groovy" style="font-family:monospace;">changeSet<span style="color: #66cc66;">&#40;</span>id:<span style="color: #ff0000;">'PersonMigration-1'</span>, author:<span style="color: #ff0000;">'R61'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
preConditions<span style="color: #66cc66;">&#123;</span>
columnExists<span style="color: #66cc66;">&#40;</span>tableName:<span style="color: #ff0000;">&quot;person&quot;</span>, columnName:<span style="color: #ff0000;">&quot;monthly_income&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
<span style="color: #66cc66;">&#125;</span>
comment<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;remove monthly_income from person table&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
sql<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;alter table person drop monthly_income&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

</li>
<li>Re run your grails and this script will be executed.</li>
</ol>
<p>For more details about the syntax that you can have inside migration file, try to read the documentation at <a href="http://www.liquibase.org/manual/">liquibase manual</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wysmedia.com/2009/02/autobase-plugins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- www.000webhost.com Analytics Code -->
<script type="text/javascript" src="http://analytics.hosting24.com/count.php"></script>
<noscript><a href="http://www.hosting24.com/"><img src="http://analytics.hosting24.com/count.php" alt="web hosting" /></a></noscript>
<!-- End Of Analytics Code -->
