Sunday, February 11, 2007

Top down Design - -'


เง้ออออ... - -'

Saturday, February 10, 2007

การติดต่อกับ AS400 โดยผ่าน JDBC

การทำงานกับระบบ AS/400 โดยผ่านทาง JDBC จะเหมือนกับการทำงานกับ Database อื่นๆ เพราะว่าบน AS/400 จะมี DB2 Engine อยู่ ซึ่งคำสั่ง SQL โดยส่วนใหญ่ของ DB2 จะใช้กับ AS/400 ได้อยู่แล้ว

ขั้นตอน
  1. ขั้นแรกจะต้องมี JDK ก่อน ตั้งแต่ version 1.4 ขึ้นไป
  2. สามารถ Download JDBC ของ AS/400 ได้จาก http://jt400.sourceforge.net/
  3. เมื่อ download เสร็จแล้วก็ extract file .jar ไปไว้ที่ $JAVA_HOME/jre/lib/ext
  4. ใน AS/400 จะมี Object อยู่หลายๆอย่าง แต่ที่เกี่ยวข้องก็คือ LIBRARY ซึ่งก็เหมือน Folder และ File เหมือน Table เวลาจะอ้างอิง Table บน AS/400 จะต้องอยู่ในรูปแบบ LIBRARY.FILE
  5. ตัวอย่าง Function ที่ใช้ Connection
public Connection getAS400Connection() throws ClassNotFoundException, SQLException{
Connection conn=null;
final String HOST="10.251.1.20";
final String USER="nidex";
final String PASSWORD="nidex";
try{
Class.forName("com.ibm.as400.access.AS400JDBCDriver");
conn=DriverManager.getConnection("jdbc:as400://"+HOST,USER,PASSWORD);
}catch(ClassNotFoundException cex){
cex.printStackTrace();
throw cex;
}catch(SQLException sex){
sex.printStackTrace();
throw sex;
}
return conn;
}

Database Tool ที่ใช้เปิด Connection ไปยัง Database ต่างๆ รวมถึง AS/400
ตัวอย่าง Source Code เต็มๆ

package csi.sample;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;


public class As400Conn {

public static void printColTypes(ResultSetMetaData rsmd)
throws SQLException {
int columns = rsmd.getColumnCount();
for (int i = 1; i <= columns; i++) {
int jdbcType = rsmd.getColumnType(i);
String name = rsmd.getColumnTypeName(i);
System.out.print("Column " + i + " is JDBC type " + jdbcType);
System.out.println(", which the DBMS calls " + name);
}
}
public Connection getAS400Connection()
throws ClassNotFoundException, SQLException{
Connection conn=null;
final String HOST="10.251.1.20";
final String USER="nidex";
final String PASSWORD="nidex";
try{
Class.forName("com.ibm.as400.access.AS400JDBCDriver");
conn=DriverManager.getConnection("jdbc:as400://"+HOST,USER,PASSWORD);
}catch(ClassNotFoundException cex){
cex.printStackTrace();
throw cex;
}catch(SQLException sex){
sex.printStackTrace();
throw sex;
} return conn;
}
public static void main(String[] args) {
try{
As400Conn as400=new As400Conn();
final String LIBRARY="MVXCDTA3";
final String TABLE="MITMAS";
Connection conn=as400.getAS400Connection();
Statement stmt=conn.createStatement();
String query="select * from "+LIBRARY+"."+TABLE;
ResultSet rs = stmt.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();
printColTypes(rsmd);
System.out.println("");
int numberOfColumns = rsmd.getColumnCount();
for (int i = 1; i <= numberOfColumns; i++) {
if (i > 1) System.out.print(", ");
String columnName = rsmd.getColumnName(i);
System.out.print(columnName);
}
System.out.println("");
while (rs.next()) {
for (int i = 1; i <= numberOfColumns; i++) {
if (i > 1) System.out.print(", ");
String columnValue = rs.getString(i);
System.out.print(columnValue);
}
System.out.println("");
}
}
catch(Exception ex){
ex.printStackTrace();
}
}
}


Monday, January 01, 2007

สวัสดีปีใหม่ 2550

เมื่อวานวันสิิ้นปี อยู่บ้านเล่น Linux กับเขียน Program ไปเรื่อยเปื่อย
แต่ก็มีความคืบหน้าอยู่บ้าง คือได้แก้ปัญหาอยู่สองอย่างคือ
1. เปลี่ยน default sound card ใน ubuntu
sudo asoundconf list #ดู sound card
sudo asoundconf set-default-card Live #เปลี่ยนเป็น Live
2. IceFaces ไม่ยอม render เพราะใน faces-config.xml Default จะใส่ application view ไว้เป็น com.icesoft.faces.facelets.D2DFaceletViewHandler ก็ให้เอาออกแล้วจะ Run ได้

Monday, December 25, 2006

ตัวอย่าง Hibernate Annotation

ส่วนที่สำคัญคือการ Generate ID ใช้ Concept Table Generate

@GeneratedValue(strategy = GenerationType.TABLE, generator ="IdGen")
@javax.persistence.TableGenerator(
name="IdGen",
table="_ID_GENERATOR",
pkColumnName="GEN_KEY",
valueColumnName="GEN_VALUE",
pkColumnValue="Event_ID",
allocationSize=1
)
Class
package nidec.pcm.mapping;

import java.util.Date;

import javax.persistence.*;

@Entity
@Table (name="Event")
public class Event {

@Id
@Column (name="uid")
@GeneratedValue(strategy = GenerationType.TABLE, generator ="IdGen")
@javax.persistence.TableGenerator(
name="IdGen",
table="_ID_GENERATOR",
pkColumnName="GEN_KEY",
valueColumnName="GEN_VALUE",
pkColumnValue="Event_ID",
allocationSize=1
)
private Long id;
@Column (name="date")
private Date date;
@Column (name="title")
private String title;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}

Table
Generate Table
CREATE TABLE _id_generator
(
gen_key varchar(20) NOT NULL,
gen_value int4 NOT NULL
)
-- Data Table
CREATE TABLE event
(
uid int4 NOT NULL,
date date,
title varchar(30),
CONSTRAINT pk_event PRIMARY KEY (uid)

Hibernate Config

เพิ่ม mapping class ใน hibernate.cfg.xml ด้วย

Object/Relational Mapping

เริ่มต้นกับ ORM ควรอ่านบทความนี้ก่อน
http://www.twoguru.com/playground/cs_tutorial/oop/o_r_mapping.htm

Friday, September 29, 2006

Nidex Solution

1. นำ JSF Technology มาใช้ใน Project
JSF (JavaServer Faces) เป็น Java Web Application Framework ที่เป็นที่ยอมรับเป็นมาตรฐานในปัจจุบันโดย Sun เป็นผู้ออก Spec.
ประโยชน์
- เพิ่ม Productivity งานออกได้เร็ว
- ลดความซับซ้อนในการ Coding
- Debug ได้ง่าย
- มี Standard Coding
- ใช้ MVC model ในการ Develop ทำให้แยกส่วนการ Develop ได้เด็ดขาด ทำให้ง่ายในการ Maintenance โดยมีผลกระทบต่อกันน้อยในแต่ละส่วน

2. นำ iReport และ JasperReport มาใช้ใน Project
iReport เป็นเครื่องมือในการสร้าง Report โดยที่มีความสามารถเทียบเท่ากับ Crystal Report แต่เป็น Open Source
JasperReport เป็น Library ในการออก Report ใน Format ต่างๆเช่น ReportViewer, PDF, Excel, Word, CSV
ประโยชน์
- เพิ่ม Productivity โดยสร้าง Report เพียงครั้งเดียวสามารถออกเป็น Format ได้หลายแบบ
- สร้าง Report ออกผ่าน Web โดย Export เป็น PDF ทำให้ Report ออกมาได้สวยงาม
- Formula ต่างๆใน iReport เขียนด้วย Java จึงไม่ต้องเรียนรู้ใหม่

3. ทำ Solution โดยไม่มี Cost ของ License Software
Server
OS : Debian Linux
Database : PostgreSQL
Web Server : Apache Tomcat
Development
OS : All development tool can use in Linux (but real working using Windows)
IDE : Eclipse
Report Designer : iReport
Framework : JSF, J2EE
Source Control : CVS (but using Source Safe by CSI standard )
User Client
Client : Web Browser (any) and PDF viewer

4. Plan to upgrade to Nidex 2.0
1. More user friendly with AJAX technology
2. Using Web Service to commuticate with Customer and Vendor
3. Develop Service Component for using with another Java Application
4. Create Work Flow module, paper less
5. Upgrade Tomcat to another Application Server such as JBoss, WebSphere, Apache Geronimo
6. Using App Wizard for create new Program in Nidex
7. Using Spring and Hibernate Framework for more productivity

Sunday, September 24, 2006

Open Source for Windows

http://osswin.sourceforge.net/

Thursday, September 21, 2006

Writely the Document Editor Killer

http://www.writely.com รวมทุกสิ่งที่ Document Editor ควรจะทำได้ไว้หมด
  • Word Processor (Insert Image, Table, etc)
  • Public Document (Blog, Web)
  • Share Document
  • Version Control
  • AJAX
  • etc.

Open Declaration จาก JSF file

เพิ่งรู้ว่า Eclipse with Exadel 4.00 ทำ Open Declaration จาก JSF file ได้ด้วย
โดยการกด Ctrl ค้างไว้แล้วกด Click

Firefox Extension Tutorial

http://businesslogs.com/technology/firefox_extension_tutorial.php
ไว้ว่างๆจะอ่านแล้ว Review ดู

Database Tool - Execute Query

http://executequery.org/

ใช้ได้นะตัวเนี้ยเล็กๆแต่ความสามารถหลากหลาย
แต่บางที่น่ามีแต่ดันไม่มีเช่นพวก Edit Store procedure