2/21/2008

JSONIC - simple json encoder/decoder for java

JSONIC is a simple JSON encoder / decoder for Java made in Japan. We can get JSONIC from http://sourceforge.jp/projects/jsonic/files/. The use of JSONIC is very easy.

import net.arnx.jsonic.JSON;

// POJO to JSON
String text = JSON.encode(new Hoge());

// JSON to POJO
Hoge hoge = JSON.decode(text, Hoge.class); 

JSONIC can handle POJO's public fields as property well and it also encode / decode java.util.Map and java.util.List.

I recommend JSONIC if you have to handle JSON in Java. It would be a best choice.

The First Seasar2 Example

At first, I show the very simple example to use S2Container. I created following 3 files into "jp.sf.amateras.seasar.example" package.

example.dicon

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
          "http://www.seasar.org/dtd/components24.dtd">
<components>
  <component class="java.util.ArrayList" name="list">
    <initMethod name="add"><arg>"Naoki Takezoe"</arg></initMethod>
  </component>
</components>
<components>
  <component class="jp.sf.amateras.seasar.example.Hello" name="hello">
    <property name="target">list</property>
  </component>
</components> 

Hello.java

package jp.sf.amateras.seasar.example;
import java.util.List;

public class Hello {
 private List target;
 public void setTarget(List target){
   this.target = target;
 }
 public void sayHello(){
   for(int i=0;i<target.size();i++){
     System.out.println("Hello, " + target.get(i));
   }
 }
}

Main.java

package jp.sf.amateras.seasar.example;
import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;

public class Main {
 public static void main(String[] args){
   S2Container container = S2ContainerFactory.create(
              "jp/sf/amateras/seasar/example/example.dicon");
   Hello hello = (Hello)container.getComponent("hello");
   hello.sayHello();
 }
}

Run the "Main" class as a Java application, it displays "Hello, Naoki Takezoe".

2/12/2008

S2Dao: 2-Way SQL

S2Dao can assemble dynamic query using SQL comment. For example:

@Sql("SELECT * FROM emp WHERE empno = /*empno*/7788")
@Arguments("empno")
public Emp selectEmpByEmpNo(int empNo);

/*empno*/ replaces the given argument and 7788 is removed by S2Dao at runtime. We can execute this SQL without no modification with the database client software such as psql. This solutuion is called "2-Way SQL" in S2Dao.

We can also use IF..ELSE statement as SQL comment.

/*IF hoge != null*/hoge = /*hoge*/'abc'/*END*/

And see the following example. If all conditions are false, S2Dao ignores /*BEGIN*/ ... /*END*/ block. So WHERE phrase is removed when it's not needed.

/*BEGIN*/WHERE
  /*IF job != null*/job = /*job*/'CLERK'/*END*/
  /*IF deptno != null*/AND deptno = /*deptno*/20/*END*/
/*END*/

Again, these SQL can be executed with database client software with no modifications. 2-Way SQL makes possible to test SQL easily.

2/11/2008

S2Dao: The most powerfull database access framework

S2Dao is a database access framework based on the Seasar2 and AOP solution. Today, I introduce this great framework to you.

S2Dao makes DAO from Java interface using AOP at runtime. We have to write only Java interface such as:

@S2Dao(bean=UserInfo.class)
public interface UserInfoDao {
  public List<UserInfo> selectAllUserInfos();
  public void insertUserInfo(UserInfo userInfo);
  public void updateUserInfo(UserInfo userInfo);
  public void deleteUserInfo(UserInfo userInfo);
}

SQLs are generated automatically by the entity definition (which is specified by @S2Dao) and DAO method names. So we don't have to write SQL in simple cases such as CRUD to the single table.

Of course, we can use complex SQL instead of auto generated SQL. We can specify WHERE and ORDER BY using @Query:

@Query("DEPTID=? ORDER BY EMPNO")
public List<UserInfo> selectUserInfoByDeptId(int deptId); 

And using @Sql, we can specify all parts of SQL:

@Sql("SELECT COUNT(*) FROM USERINFO")
public int getCount(); 

These are parts of S2Dao great features. If we have to use complex and large SQL, we can write it as an external SQL file named "classname_methodname.sql" and S2Dao also support dynamic query using SQL comment. I will talk about them as another entries.

This is the first entry in Blogger!!

This is the first entry in Blogger!!

I'm making a lot of Eclipse plug-ins at the Project Amateras. Eclipse is the major open source Java Integrated Development Environment. And I'm also commiter of the Click Framework. Click is powerful and simple web application framework for Java.

Now I'm interested in the small web development project using Java. Which frameworks should we use...? My one answer is here:

  • Seasar2 (DI/AOP container made in Japan)
  • S2Dao(Data Access Framework based on Seasar2)
  • Click Framework

Seasar2 is a poweful DI/AOP container made in Japan. I think Seasar2 is more easy than Spring in many cases. However Seasar2 does not have enough English docuements to use it. So I will try to tell about Seasar2 in this blog.