HOME
Andrew Schwabe's Blog : Java

Flex 2 Boot Camp

I decided to attend a one-day bootcamp for Flex 2 in New York City which was piggy backed onto a RealWorld Java Conference.  Our instructors were Yakov Fain and Victor Rasputnis from www.faratasystems.com (they make some cool Flex add-ons you should check out).

It was a day of intensive brain crunching.  It seemed to me that it was definitely aimed at Java developers (how many CF developers know what ant is?) more than anything else.  A lot of the topics covered were already very familiar to me, including a lot of the Flex code itself -- at least until the second part of the day.  What was significant about the second part of the day was the software engineering insight as to how to approach flex apps over the "out of the box" approach Adobe (and formerly Macromedia) used to present. 

We covered topics such as compiling re-usable code into SWC files, logging and optimizing data traffic between your DB and Flex using ADF instead of slower verbose web services.  These were topics I haven't seen covered anywhere else.

Overall money well spent, though there were some clear holes in the offering as a whole.  We jumped into advanced topics pretty quickly; we only covered a few simple UI components; Mac problems.  Don't get me started on the Mac problems....  word to those out there:  Macs may me great for desktop publishing, but dont expect things to run smoothly when you are trying to develop enterprise class client-server apps on your Mac.  nuf sed.

The Good:

- Low cost (around $1000)
- No long hotel stays
- Good material (enterprise application architecture, modularized code, technique)
- Good foundation of when/how to use Flex for an app.
- Excellent coverage of ADF and communication with server side apps
- You walk away with working code on your laptop
The Bad:
- Don't expect all the dev software it to work on your Mac
(I use a PC -- with no problems i might add -- , so im not "talking" about myself here)
The Mac delays caused us to lose about an hour of instruction time -- which for a single day seminar really hurt.... (hey Yakov and Victor -- if you see this, maybe a discount is in order for future bootcamps?)
- Topics jumped from relatively simple to very advanced in the blink of an eye
- Not quite enough coverage of the UI components in Flex
- No coverage of "states" in Flex (pretty essential if you ask me)
- Not enough coverage of http and web service connections (since 90% of flex developers will use this exclusively over ADF/server side components)
Hope this is helpful.  Watch my blog for announcements of new exciting flex stuff I am building!

Aptana plugin for Eclipse

Hopefully a lot of you ColdFusion developers are using Eclipse now with the CFEclipse plugin.  Many developers dont know about the Aptana plugin however (http://www.aptana.com/).  This free plugin gives you all the stuff that you miss from DreamWeaver or Homesite+ -- html and css editing, etc.  In addition you get an XML editor, and a fantastic ftp interface, which is sorely needed in Eclipse.  Aptana has a very nice ftp synchronization tool set which allows you to effectively develop locally and synchronize to an ftp site.

For those who are curious about how we have our Eclipse configured, here it is:

Eclipse 3.2.x
CF Eclipse 1.3.x
RDS Plugin (from Flex Builder 2)
Aptana plugins
Violet UML plugin


Server side HTTP Post using JSP

Ok, so I use a rapid application development technology (ColdFusion or PHP) most of the time because customers demand such quick turnaround.  This time I needed to go back to goold old Java and do some integration.

Our email list management service (Sound-Off 3) manages people's email lists and lets them schedule mailings, etc.  I needed to integrate a website build on JRun (using Java Server Pages aka jsp) so that when people register, it relays the info to Sound-Off 3.

In ColdFusion, you can easily do this with a CFHTTP tag.  In JSP it is a little more involved.  My struggle is your benefit, b/c here is the code that does it in JSP.

This code will do an HTTP POST from the WEB SERVER to the remote site, all behind the scenes on the server.  The "parameters" string contains the form values that will be sent to the remove server.  Note the leading/trailing &'s and that the form values must be URL encoded.

try
{
    String stuff = null;
    String pagecontent = "";
    String parameters = "&message=hello+world&";
    java.net.URL url = new java.net.URL(http://www.yourhost.com/page.cfm);
    java.net.HttpURLConnection conn = (java.net.HttpURLConnection)url.openConnection();
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Content-Length", "" + Integer.toString(parameters.getBytes().length));
    conn.setRequestProperty("Content-Language", "en-US");
    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    conn.setDoInput(true);
    conn.setDoOutput(true);
    conn.setUseCaches(false);
    conn.setAllowUserInteraction(true);
    java.io.DataOutputStream printout = new java.io.DataOutputStream (conn.getOutputStream ());
    printout.writeBytes (parameters);
    printout.flush ();
    printout.close ();
    java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(conn.getInputStream()));
    while ((stuff = in.readLine()) != null)
    {
         pagecontent += stuff;
    }
    in.close();

    %>success! <%
}
catch (Exception e)
{
    %>error!<%
}
%>

And thats it!   You can (and should) do further error checking by examinging the contents of "pagecontent" which will have the html code returned from remote website.

Have fun...

Using JFreeChart with ColdFusion

This was originally posted in Christian Cantrell's blog.

Well, your post just helped me figure out a long time nagging problem. I have been working on a CF wrapper for JFreeChart to generate on-the-fly charts, and have been stumped with corrupted output, until I saw your fix about the double getResponse() method calls. With that change, all works great!

For those who don't understand WHY you might need to do this, here is sampe code that creates a bar chart on-the-fly (no caching on the file system) and outputs directly to the browser a JPEG image (or a PNG with incredible quality!):

<!--- first generate some data --->
barDataset = CreateObject("java", "org.jfree.data.category.DefaultCategoryDataset");
Randomize(numberformat(timeformat(now(),"ss")));
rval = int(randrange(1,500));
barDataset.setValue(numberformat(rval), "2001", "Q1");
rval = int(randrange(1,500));
barDataset.setValue(numberformat(rval), "2001", "Q2");
rval = int(randrange(1,500));
barDataset.setValue(numberformat(rval), "2001", "Q3");
rval = int(randrange(1,500));
barDataset.setValue(numberformat(rval), "2001", "Q4");
rval = int(randrange(1,500));
barDataset.setValue(numberformat(rval), "2002", "Q1");
rval = int(randrange(1,500));
barDataset.setValue(numberformat(rval), "2002", "Q2");
rval = int(randrange(1,500));
barDataset.setValue(numberformat(rval), "2002", "Q3");
rval = int(randrange(1,500)); barDataset.setValue(numberformat(rval), "2002", "Q4");

<!--- create the chart objects --->
chart = CreateObject("java", "org.jfree.chart.JFreeChart");
chartfactory = CreateObject("java", "org.jfree.chart.ChartFactory");
chartorient = CreateObject("java", "org.jfree.chart.plot.PlotOrientation");
chartutil = CreateObject("java", "org.jfree.chart.ChartUtilities");

<!--- create our chart --->
chart = chartfactory.createBarChart3D ("Sample Bar Chart", "Category", "Value", barDataset, chartorient.VERTICAL, true, true, true);

<!--- MAGICALLY get the correct response object... --->
response = getPageContext().getResponse().getResponse();
response.setContentType("image/jpeg");

<!--- write chart directly to output stream --->
chartutil.writeChartAsJPEG(response.getOutputStream(),
   100, // jpeg quality 0-100
   chart, // chart object
   500, // width
   300); // height

response.flush();
response.close();

If anybody else needs help with the above code, email me.

cheers