Thursday, August 27, 2009

ก่อนจะไป Narisa tech talk 7

เนื่องจากวันเสาร์ที่ 27/08/2009 นี้จะมีงาน narisa tech talk ครั้งที่ 7 ผมในนามของคนที่มีอาชีพแขวนอยู่บนคอมพิวเตอร์และ โปรแกรมมิ่ง จึงอยากจะไปเปิดหูเปิดตาบ้างโดยจุดมุ่งหวังในครั้งนี้ของผมนั้นคือจะได้รู้จัก หัวข้อต่างๆที่พวกพี่ๆนำมาพูดกัน เพราะความรู้ของผมค่อนข้างจะแคบจริงๆ ได้เข้าใจก็จะดีมากแล้วครับ

Tuesday, July 14, 2009

Log4j JDBCAppender

การ config log ลง database โดยใช้ log4j

1. config log4j.properties eg.

log4j.logger.jdbclog4j=INFO, A2,D1

#กำหนดให้ใช้ JDBCAppender ซึ่งจะ writelog ลง database
log4j.appender.D1=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.D1.URL=jdbc:derby://localhost:1527/sun-appserv-samples
log4j.appender.D1.User=app
log4j.appender.D1.Password=app
log4j.appender.D1.layout=org.apache.log4j.PatternLayout
log4j.appender.D1.layout.ConversionPattern=%5r %-5p [%t] %c{2} - %m%n

#SQLstatement ที่จะ insert ลง database จะต้อง สร้าง TABLE รองรับ
log4j.appender.D1.sql = insert into LogTable (Thread, Class, Message) values ('%t', '%c', '%m')


2. สร้าง TABLE LOGTABLE สำหรับลง LOG

CREATE TABLE LOGTABLE
(
SEQ_ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
THREAD VARCHAR(255),
CLASS VARCHAR(255),
MESSAGE VARCHAR(255)=,
UNIQUE (SEQ_ID)
)


*Conversion Character

d For example, %d{HH:mm:ss,SSS} or %d{dd MMM yyyy HH:mm:ss,SSS}

Friday, February 13, 2009

การสร้าง DATABASE LINK (Oracle)

ดังนี้
CREATE DATABASE LINK "LINK_NAME" CONNECT TO "remoteUser" IDENTIFIED by "remotePassword" USING 'destinationDB'


บรรยายตัวแปร
LINK_NAME = ชื่อ link ที่เราจะใช้อ้าง
remoteUser = username ของ database ปลายทางที่จะ remote ไป
remotePassword = password ของ database ปลายทางที่จะ remote ไป
destinationDB = ชื่อ database ที่จะ remote ไป

eg.
CREATE DATABASE LINK "LINK_2.REGRESS.RDBMS.DEV.US.ORACLE.COM" CONNECT TO "BKUSER" IDENTIFIED by "**********" USING 'SOBETDB'



ตัวอย่างการใช้งาน
มี db สองตัวคือ mydb1 มี table name และ mydb2 มี table surname หากต้องการ query จาก mydb1 ต้องสร้าง dbLink ชื่อ mydb2link ที่ mydb1 และใช้คำสั่ง query ตัวอย่างดังนี้้
eg. select * from surname@mydb2link

เป็นต้น

Wednesday, January 28, 2009

simple xml-parser by Apache-Digester

example.

create file example.xml

<ATSSYNC>
<DERIVERED>
<SERIAL></SERIAL>
<SERIAL></SERIAL>
</DERIVERED>
<EFFECTIVEDATE>12JUNE09</EFFECTIVEDATE>
</ATSSYNC>


coding main.java

Digester digester = new Digester();
digester.setValidating(false);
digester.addObjectCreate("ATSSYNC", SalePointSync.class);
digester.addBeanPropertySetter("ATSSYNC/EFFECTIVEDATE", "effectiveDate");

digester.addObjectCreate("ATSSYNC/DERIVERED", Derivered.class);
digester.addCallMethod("ATSSYNC/DERIVERED/SERIAL", "addSerial", 1);
digester.addCallParam("ATSSYNC/DERIVERED/SERIAL", 0);
digester.addSetNext("ATSSYNC/DERIVERED", "addDerivered");


File inputFile = new File("example.xml");
SalePointSync salePointSync = null;
salePointSync = (SalePointSync) digester.parse(inputFile);
System.out.println(salePointSync.toXML());


coding SalePointSync.java

public class SalePointSync {

private Vector derivered;
private Vector returning;
private String effectiveDate;

public SalePointSync() {
derivered = new Vector();
returning = new Vector();
}
public void addDerivered(Derivered derivered){
this.derivered.addElement(derivered);
}
public Vector getDerivered() {
return derivered;
}
public void addReturning(Returning returning){
this.returning.addElement(returning);
}
public Vector getReturning() {
return returning;
}

public String getEffectiveDate() {
return effectiveDate;
}

public void setEffectiveDate(String effectiveDate) {
this.effectiveDate = effectiveDate;
}

public String toXML() {
StringBuffer sb = new StringBuffer();
sb.append("");
for(int i=0;i" + getEffectiveDate() + "");
sb.append("
");
return sb.toString();
}
}

coding Derivered.java

public class Derivered {
private Vector serial;
public Derivered(){
serial = new Vector();
}
public Vector getSerial() {
return serial;
}

public void addSerial(String serial) {
this.serial.addElement(serial);
}

public String toXML(){
StringBuffer sb = new StringBuffer();
sb.append("");
for(int i=0;i"+s+"");
}
sb.append("
");
return sb.toString();
}
}



Monday, December 1, 2008

maven: working with manifests (MANIFEST.MF)

mในกรณีการทำ excution jar จะต้องมีการกำหนด main-class ,classpath ใน /META-INF/MANIFEST.MF
เพื่อให้สามารถรันได้ maven จะช่วยให้ง่ายขึ้น
ตัวอย่าง แก้ไขไฟล์ pom.xml โดยเพิ่ม plugin ดังนี้
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<configuration>
<archive>
<manifest>
<mainClass>com.gosoft.app.App</mainClass>
<packageName>com.gosoft.app</packageName>
<addClasspath>true</addClasspath>
<addExtensions />
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<mode>development</mode>
<url>ddddd</url>
</manifestEntries>
</archive>
</configuration>
</plugin>

maven: copy libraries to classpath

การเพิ่มคำสั่งให้ maven copy library ที่ dependencies ไปยัง target path ที่ทำการ package .jar ของเราเอาไว้
ตัวอย่าง แ้ก้ไขที่ pom.xml เพิ่ม plug-in ที่ช่วย copy library ไปยัง targetpath
.......
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNever>true</overWriteIfNever>
</configuration>
</execution>
</executions>
</plugin>
.......

Tuesday, November 11, 2008

use flex Object like java.util.Map

it, easiest

private var myobject:Object = new Object();
myobject["A"] = "Hello";
myobject["B"] = "World";
myobject["C"] = "foobar";

//trace object
trace(myobject["A"]);
trace(myobject["B"]);
trance(myobject["C"]);

//result
// "Hello World foobar"


End. let try..