Posts

Using the Crystal Reports Java API to generate PDF

I recently had to investigate how to generate a PDF from a Crystal Report created by another team. Without knowing anything about Crystal Reports, I had to google around for information and piece it all together. It turns out to be really simple once you know how. We were using Business Objects 4.0, and probably the most important thing was to get the Java library - download 'SAP Crystal Reports for Java runtime components - Java Reporting Component (JRC)' from http://www.businessobjects.com/campaigns/forms/downloads/crystal/eclipse/datasave.asp There are a lot of samples on the web to look at - you might find something to help here: http://wiki.sdn.sap.com/wiki/display/BOBJ/Java+Reporting+Component++SDK+Samples A good example to start with is “JRC EXPORT REPORT”: http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/40d580ce-bd66-2b10-95b0-cc4d3f2dcaef If you have an RPT file, the java to generate the report is relatively simple - : ReportClientDocument reportClie...

Easy classpaths with Java 6

Back in the day it used to be a bit more difficult than it is now to dynamically generate your java application classpath - you'd have to write a script to loop over all the jar files in a directory, appending them to your classpath variable - like this . Since Java 6 though, its been a lot easier - you can use wildcards to specify all jars in a directory. See the "Understanding class path wildcards" in the Java SE 6 documentation . Now its as simple as: java -cp /my/lib/dir/* MyClass Simple! As it should be!

Turning off JDK logging

I've been developing a simple little command line application and one of the libraries I'm using seems to log debug information to the console. To clean up the console output, I had to turn off the JDK by using: LogManager.getLogManager().reset(); This seemed to do the trick for me, but it sounds like in some cases you may need to go a bit further and turn off logging at the global logger level: LogManager.getLogManager().reset(); Logger globalLogger = Logger.getLogger(java.util.logging.Logger.GLOBAL_LOGGER_NAME); globalLogger.setLevel(java.util.logging.Level.OFF);

JUnit parameterized test with Spring autowiring AND transactions

I've been writing JUnit Parameterized tests (a nice intro here - also see Theories ) to do some data driven API testing. Now, when introducing Spring into the mix there are a couple of extra things to do . I came unstuck though because I was trying to do Transactional tests - since I'm now using @RunWith(Parameterized.class) and setting up my Spring TestContextManager manually the @Transaction annotations caused an exception: java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given I couldn't find any built in solution, so I've gone with manual transaction management in my test, using doInTransaction: @RunWith(Parameterized.class) @ContextConfiguration(locations = "classpath*:/testContext.xml") public class MyTest { @Autowired PlatformTransactionManager transactionManager; private TestContextManager testContextManager; public MyTest (... parameters for test) { // store parameters in instance v...

Week in Review - 2011-33

I've occasionally been frustrated by the output of 'ps -ef' not showing the full command line for the processes. Well, it turns out that the solution is as simple as piping the output to a file - i.e. 'ps -ef > ps.txt' - now I can easily see the FULL command line for my java processes. I bought a new WIFI router this week. My old one was getting flaky, and for some reason I've always had trouble with some of the url shorteners such as bit.ly and t.co - they just couldn't be resolved. So I bought a basic Netgear WNR1000 which satisfied all of my criteria. One of the things I like most is that it has a switch to turn off the wireless when I don't need it. This helps with security as well as saving power. I've almost finished porting my latest application to AppEngine (Python). Lucky its a small application! I'm constantly being reminded that its useful to have skills in a lightweight technology to bootstrap and test ideas quickly. If that id...

Week in Review 2011-32

This post is on the money. Humorous and accurate. I've seen this all before. There is a very interesting podcast on the software patent situation at NPR Planet Money. I'm in a bind! I'm ready to launch a new app (Grails based), but my VPS with 768MB memory can't handle it (its running vsconsole already, and apache, mysql etc). Unfortunately I can't add more memory until next month! They are out of stock!! I signed up for CloudFoundry.com (still in BETA), but it I haven't been able to find out how to use my own domain, or how to extract the data when/if I need to. I could easily port it to AppEngine (Python). It's a small app so it wouldn't be much effort but I'd rather spend the effort on new features!

Week in Review - 2011-31

I am currently working on a JSF2 application at work, and I mostly use Firefox during the development process because I use SeleniumIDE as a development/productivity tool to quickly log in as different users and drive the browser to a certain point. Imagine my surprise when I found out that something didn't work in IE8 . I could see IE reporting a JavaScript error, but the details were useless. Even with the developer tools in IE, I couldn't identify what or where the error was. This page didn't have any JavaScript written by me - its all the JSF generated code. All I could do is use the process of elimination and trial and error to rearrange the page and subtlety change code  until it worked. Its hard to believe that IE is still in this state, especially when faced with the competition from Chrome (built in developer tools ) and Firefox (add-on FireBug for developer tools). I'm using VMWare Fusion on my MacBook AIR to run an Ubuntu server for testing purposes. I...