Ancient Programming

What I encounter in my software part of life is in danger of being commented upon here

Archive for the 'java' Category


Fixedformat4j moves to github

Posted by Jacob von Eyben on 5th May 2015

After google has decided to close code.google.com I have migrated the fixedformat4j sourcecode to github: https://github.com/jeyben/fixedformat4j

Posted in fixedformat4j, java | No Comments »

Logging sql statements and parameters using hibernate

Posted by Jacob von Eyben on 12th November 2009

If you need to log sql statements using hibernate you can turn debug on for the org.hibernate.sql logger.
That will log all sql statement, but the actual parameter values will not be logged.

To log the values bound to the hibernate prepared statements, you can turn on trace for the org.hibernate.type logger.

Unfortunately (apparently because of perfomance) the value of the org.hibernate.type logger is evaulated once in a static block, and cached, see: EnumType.java.

That prevents you from turning the log on and off during runtime using a simple jsp page like the log4jAdmin.jsp. Note that if it were possible you still had to add trace to the page as debug is currently the lowest value.

Of course there must be a reason why the hibernate implementation are caching the value of the org.hibernate.type logger, but I believe it is still valuable to be able to turn on sql logging with parameters at runtime.

For that purpose I came across the logDriver. A simple database driver written by Ryan Bloom, that is wrapping an existing jdbc driver.

To use the logdriver all you have to do is set the driver and connection url as follows:

driver:net.rkbloom.logdriver.LogDriver
url:jdbc:log_real_driver_class:real_jdbc_connection_url

Now you can turn on logging by setting the net.rkbloom.logdriver logger to debug.

Posted in how to, java | 1 Comment »

Any good maven support for Google Appengine?

Posted by Jacob von Eyben on 5th June 2009

Yesterday I created a appengine project testing the JPA/Spring/Wicket stack.

This was created using the build.xml file found in the appengine documentation. It all worked fine, but I would like to build my project using maven so I started looking for a good maven plugin.

I found this blog talking about what features a good plugin should contain and a guy from the kindleit company claiming that they actually had implemented a maven-gae-plugin capable of executing most of these tasks.

Unfortunately I ran into several problems using this plugin, hence I have created an issue.

Untill these tasks in the issue has been fixed I would like to use another plugin.
Can anybody guide me in the direction of a more stable plugin?

Posted in java, maven | 1 Comment »

Fixedformat4j now supports primitive datatypes as well as innerclasses

Posted by Jacob von Eyben on 16th October 2008

Support for primitive datatypes is added to the latest 1.2.1 release of fixedformat4j. I would like to thank Marcos Lois Bermúdez for contributing with this extension. The latest release can be downloaded here.

The same 1.2.1 release also fixed the bug that made it impossible to use annotate and format static nested classes and inner classes

The complete changelist can be found on the project website.

In a few days the release should be available from ibiblio.

I encourage all users of fixedformat4j to contribute or create issues if they find a bug or would like new features to be added.

Posted in fixedformat4j, java | No Comments »

Fixedformat4j 1.2.0 released

Posted by Jacob von Eyben on 12th June 2008

This evening I released a new version of fixedformat4j containing improved error reporting when failing to parse data using the FixedFormatManager.

The lack of good error reporting was a bit of a pain. It was not easy to see where in the parsing failed and it was not possible to get a complete list of format instructions.

A new ParseException is now thrown which contains the nessesary information.

See example of the new and improved stacktrace:

com.ancientprogramming.fixedformat4j.format.ParseException: failed to parse 'barfooba' at offset 16 as java.util.Date from 'foobarfoobarfoobarfoobar'. Got format instructions from com.ancientprogramming.fixedformat4j.format.impl.MyRecord.getDateData. See details{FormatContext{offset=16, dataType=java.util.Date, formatter=com.ancientprogramming.fixedformat4j.format.impl.ByTypeFormatter}, FormatInstructions{length=8, alignment=LEFT, paddingChar=' ', fixedFormatPatternData=FixedFormatPatternData{pattern='yyyyMMdd'}, fixedFormatBooleanData=FixedFormatBooleanData{trueValue='T', falseValue='F'}, fixedFormatNumberData=FixedFormatNumberData{signing=NOSIGN, positiveSign='+', negativeSign='-'}, fixedFormatDecimalData=FixedFormatDecimalData{decimals=2, useDecimalDelimiter=false, decimalDelimiter='.'}}}
 at com.ancientprogramming.fixedformat4j.format.impl.FixedFormatManagerImpl.readDataAccordingFieldAnnotation(FixedFormatManagerImpl.java:179)
 at com.ancientprogramming.fixedformat4j.format.impl.FixedFormatManagerImpl.load(FixedFormatManagerImpl.java:70)

Feel free to download the latest version and take a look at the changelist.

Posted in java | No Comments »

How to create macros for maven-site-plugin

Posted by Jacob von Eyben on 5th June 2008

Many maven projects uses the maven site plugin to generate there documentation.

The maven-site-plugin uses the doxia to let authors write xdoc, apt and fml documents as the source for there project documentation. These written documents is processed by doxia to generate html and merged into the complete project site by the maven-site-plugin.

I found doxia and especially the apt language somehow lacking in functionality. I would like to use the syntaxhighlighter to be able to highlight code examples on the fixedformat4j project.

Doxia comes out-of-the-box with a small bunch of macros and you have the ability to write custom macros as well.

Custom macro

I wrote a simple macro based on the core snippet macro:

pom.xml:



    org.apache.maven.doxia
    doxia-modules
    1.0-alpha-11
  
  4.0.0
  com.ancientprogramming.maven.doxia
  doxia-module-syntaxhighlighter
  1.0-alpha-11
  Doxia :: syntaxhighlighter
  


        org.codehaus.plexus
        plexus-maven-plugin
        
          
            
              descriptor
            
          
        
      
    
  

Changes to the snippet plugin:

...
  public void execute(Sink sink, MacroRequest request)
      throws MacroExecutionException {
    System.out.println("ancientprogramming - running execute");
    String id = (String) request.getParameter("id");

    required(id, "id");

    String urlParam = (String) request.getParameter("url");

    String fileParam = (String) request.getParameter("file");

    String codeParam = (String) request.getParameter("code");

    required(codeParam, "code");

    URL url;

    if (!StringUtils.isEmpty(urlParam)) {
      try {
        url = new URL(urlParam);
      }
      catch (MalformedURLException e) {
        throw new IllegalArgumentException(urlParam + " is a malformed URL");
      }
    } else if (!StringUtils.isEmpty(fileParam)) {
      File f = new File(fileParam);

      if (!f.isAbsolute()) {
        f = new File(request.getBasedir(), fileParam);
      }

      try {
        url = f.toURL();
      }
      catch (MalformedURLException e) {
        throw new IllegalArgumentException(urlParam + " is a malformed URL");
      }
    } else {
      throw new IllegalArgumentException("Either the 'url' or the 'file' param has to be given.");
    }

    StringBuffer snippet;

    try {
      snippet = getSnippet(url, id);
    }
    catch (IOException e) {
      throw new MacroExecutionException("Error reading snippet", e);
    }

   sink.rawText("... syntaxhighlighter prefix ...");
   sink.rawText(snippet.toString());
   sink.rawText("... syntaxhighlighter postfix ...");
}
...

Note: wordpress obfuscates the above code where I wrote the syntax hightlighter pre and post fix. You can see what you actually should write at the syntaxhighligther project.

Use custom macro
To be able to use the macro you have to add your macro as dependency to the maven-site-plugin:


  org.apache.maven.plugins
   maven-site-plugin
   
     ${basedir}/src/site
     src/site/fixedformat4j-template.vm
   
   
    
      com.ancientprogramming.maven.doxia
      doxia-module-syntaxhighlighter
      1.0-alpha-11
    
  


Now you can use the macro by writing the following in your apt files:

%{code-snippet|id=basicusage|code=java|file=../../BasicUsageRecord.java}

Change your site template
Before the the source can be highlighted in your documentation you should add the syntaxhighlighter javascript and stylesheets to your template.
See how to change your template here.

Posted in how to, java, maven | 1 Comment »

Fixedformat4j scores well on sonar

Posted by Jacob von Eyben on 5th June 2008

Today I found fixedformat4j was obtained at sonarsoftware and it was exciting to see that it scored pretty well compared to some other very well known opensource projects like the commons series, some of the spring module and even the Apache Maven project.

I didn’t know sonar before today. They describe them as:

Sonar is an entreprise quality control tool, distributed under the terms of the GNU LGPL. Its basic purpose is to join existing continuous integration tools to place Java development projects under quality control.

Even though the metrics at sonar doesn’t draw the complete picture on how good or mature a project is, it still gives a hint.

Posted in fixedformat4j, java | No Comments »

Fixedformat4j 1.1.1 released

Posted by Jacob von Eyben on 30th May 2008

We use fixedformat4j on my current project and I am developing fixedformat4j along the way. We have found the initial 1.0.0 release lacking in the ability to parse signed numbers like:

00011050+, that equals a two digit signed bigdecimal number 100.50

The fixedformatnumber annotation was introduced with the ability to add a signed attribute.

This is how you would annotate your method to be able to read and write a string like 000010050+:

...
@Field(offset = 1, length = 10, align = Align.RIGHT, paddingChar = '0')
@FixedFormatDecimal(useDecimalDelimiter = true)
@FixedFormatNumber(sign = Sign.APPEND)
public BigDecimal getBigDecimalData() {
  return bigDecimalData;
}
...

This was added in version 1.1.0, but some bugs was spotted and fixed so quickly a 1.1.1 version was released.

Feel free to download the latest version and take a look at the changelist.

Posted in fixedformat4j, java | No Comments »

Fixedformat4j released!

Posted by Jacob von Eyben on 25th May 2008

At my current project we decided to use fixedformat4j.
So after all your feedback on my recent draft implementation I have been working quite hard this weekend to get fixedformat4j shined up.

The implementation looks pretty much what Niels proposed here and I implemented support for bigdecimal as Bob wished. That means that javassist is gone and fixedformat4j is now much less intrusive - you don’t have ti extend or implement anything to be able to load and export data.

You can see just how easy on the “getting started” at the frontpage of the project.

At this time of writing the api is only available through the download page, but I have send a maven upload request so soon it will be available from ibiblio.

Posted in fixedformat4j, java | No Comments »

fixedformat4j api - bring on your feedback!

Posted by Jacob von Eyben on 17th March 2008

Earlier I wrote about reading and writing fixed formatted text files. Fortunately you all were eager to comment and provide suggestions on how to do this.
Inspired by your suggestions I decided to write an open source api to manipulate these fixed formatted data and promised to get back when I had code that was releasable.

That time is now!

I have deliberately not released a version yet as I would like some feedback before I commit myself to an api.

Please take a look at the documentation at http://fixedformat4j.ancientprogramming.com/ and let me know your thoughts on the api.

The sourcecode can be browsed here.

I hope you will bring me some feedback before I do a final release.

Posted in fixedformat4j, java | 9 Comments »