2010년 5월 27일 목요일

jump at the sight of a painapple


웬지 모를 배신감까지 느겼졌던 파인애플의 모습.

2010년 5월 24일 월요일

2010년 5월 23일 일요일

DataGrid Groupping in ASP.net

ASP는 편하기도 하지만 또한 편하지 않기도 하다.
개인적으로 ASP페이지 자체를 잘 안쓰는 편이긴 하지만 간단하게 데이터를 보여줄 때 사용 하면 좋을 것 같다.

http://code.msdn.microsoft.com/ZNetControls

2010년 5월 19일 수요일

find procedure & function in Oracle

가끔 정체 모를 프로시저나 펑션을 찾을 때 사용한다.

select name,text from user_source where text like '%:???%'

get radio button value in Prototype Lib


function $RF(el, radioGroup) {
if($(el).type && $(el).type.toLowerCase() == 'radio') {
var radioGroup = $(el).name;
var el = $(el).form;
} else if ($(el).tagName.toLowerCase() != 'form') {
return false;
}
var checked = $(el).getInputs('radio', radioGroup).find(
function(re) {
return re.checked;
});
return (checked) ? $F(checked) : null;
}


이 function으로 간단하게 가져 올 수 있다.

var value = $RF('radio_btn_id');
var value = $RF('form_id', 'radio_grp_name');

oracle clob insert in class14




/** * oracle의 CLOB을 이용하여 java의 Clob을 생성한다.
* @param clobValue
* @param conn
* @return
* @throws Exception */


public static Clob getClob( String clobValue, Connection conn)
throws Exception{
Clob newClob = null;
if(clobValue != null) {
try{
//env: resin pool connection
if (conn.getClass() == UserConnectionAdapter.class) {
newClob = oracle.sql.CLOB.createTemporary(
(UserConnectionAdapter) conn).getConnection()
,true
, oracle.sql.CLOB.DURATION_SESSION);
}
//env: oracle connection
else if (conn.getClass() == OracleConnection.class) {
newClob = oracle.sql.CLOB.createTemporary(
conn, true, oracle.sql.CLOB.DURATION_SESSION);
}
//env: jennifer connection
else if (conn.getClass() == Connection4Oracle.class) {
conn = ((Connection4Oracle)conn)
.getNativeConnection();
newClob = oracle.sql.CLOB.createTemporary(
((UserConnectionAdapter)conn)
.getConnection()
, true
, oracle.sql.CLOB.DURATION_SESSION);
}
//env: else connection
else {
newClob = oracle.sql.CLOB.createTemporary(
conn, true, oracle.sql.CLOB.DURATION_SESSION);
}

if(newClob! = null) {
((oracle.sql.CLOB)newClob)
.putString(1, clobValue);
}
} catch (Exception e){
e.printStackTrace();
}
}
return newClob;
}

getClob  method를 사용하는 예제는 아래와 같다.


psmt.setClob(psmtIndex++, DaoHelper.getClob( info.getEtcInfo(), conn ));  sp;

get port list in Linux

nmap -sT -O localhost

get GUID in Oracle



SqlServer 에 NEWID() 라는 함수가 있다. 이와 비슷한 함수가 오라클에는 SYS_GUID 함수이다.

데이터베이스 레코드는 각 레코드별로 무결성을 유지 해야한다. 즉 서로다른 레코드가 같은 값을 가지면 않된다. 테이블의 어느 한 필드 값은
반드시 달라야 한다. 하지만 이러한 상태를 유지하기가 어려울 때가 종종 있다.

이런경우 테이블의 한 필드를 반드시 서로 다른 값을 넣어야 한다.
만약 우리가 다른 레코드와 다른 값을 갖도록 유지 하려면 다른 레코드들을 모두 검색해 보아야 할 것이다. 그러나 레코드 수가 많아지면 속도의 유지를 보장할 수 없다. 그러므로,, 항상 어느상황에서든 난수적으로 다른 값이 나오도록 하는 함수가 필연적이다.

이런경우 SYS_GUID함수를 사용한다. SYS_GUID함수의 리턴값은 반드시 호출 할때마다 다른 값의 문자열을 출력하도록 설계 되어 있다.

find java class local location

Foo.class.getResource("Foo.class").getPath();

별게 아니지만 가끔 도무지 생각이 안날때가 있다.

jdbc connection string In Oracle

기본적으로 SID 와 SERVICE NAME의 차이부터 이해하도록 한다.
* SERVIE NAME은 데이터 베이스군(群)
* SID는 각각의 디비 인스턴스

설정도 위에 따라 바뀐다.
각각의 호스트 스트링은 다음과 같다.

SID의 경우
"jdbc:oracle:thin:@host:port:sid"

SERVICE NAME의 경우
"jdbc:oracle:thin:@//host:port/service name"

search special word in Oracle

오라클에서 특정 문자들은 특정한 기능을 수행하도록 예약되어 있다.
예를들면 Wild 문자열
_ (underscore): 문자 하나
% (percentage): 포함하는
' (apostrophe): 문자열의 시작과 끝

이러한 특수 문자들은 오라클이 쿼리를 해석할때 글자 그대로 해석하지 않기 때문에 쿼리를 만들때 반드시 이를 고려해야 한다.

예를들면 데이타베이스 테이블 "mytable"에 다음과 같이 데이타가 들어 있는 경우
ID, NAME
-------------
100, ABC
101, ABC%1
102, ABC%2
103, ABCD1
104, ABCD2


ID 101 ABC% 를 구하기 위하여 포함된 질의 결과를 얻으려고 할 때

SELECT * FROM mytable WHERE name like 'ABC%%' 을 수행하면 ABC로 시작하는 모든 레코드가 리턴된다.

이 경우 ABC%로 시작하는 레코드를 구하기 위하여는 아래와 같이

SELECT * FROM mytable WHERE name like 'ABC!%%' ESCAPE '!' 처럼 Escape 문자열이 어떤 것인지 명시적으로 알려 줘야 한다.

다시 말하면 ESCAPE 라는 키워드를 통해서 오라클로 하여금 특정 스페셜 문자를 글자 그대로 해석하도록 지정 할 수 있다.

Ex)
SELECT t.*, a.admincode
FROM usrgrp_type t, usrgrp_admincodes a
WHERE a.usrgrpid = t.usrgrpid
AND a.admincode like 'A!%%' ESCAPE '!'
ORDER BY a.admincode, a.usrgrpid

select * from em_account_his where resulttxt like '%!%%' ESCAPE '!'

Working with JDOM, XPath ans XSML

이런 글을 올리는 분들에게 감사할 따름이다.

http://javaboutique.internet.com/tutorials/jdom&/article.html

soap xml message logging in AXIS

디버깅을 위해 요청 및 응답을 통해 생성되는 XML 코드를 캡처해야 하는 경우가 종종 있습니다. Java(Axis 사용), Python 및 Perl에서 생성된 XML을 캡처하는 방법은 다음과 같습니다.

Java - XML 결과물을 Apache Axis로 캡처
해당 파일을 Axis 클라이언트의 작업 디렉토리에 client-config.wsdd라는 이름으로 저장합니다. Axis에서 해당 파일을 자동으로 로드합니다. 아래와 같이 구성하면 Axis에서 모든 수신 및 전송 XML을 axis.log라는 파일로 저장합니다.

<?XML:NAMESPACE PREFIX = [default] http://xml.apache.org/axis/wsdd/ NS = "http://xml.apache.org/axis/wsdd/" /><deployment xmlns="http://xml.apache.org/axis/wsdd/" java="http://xml.apache.org/axis/wsdd/providers/java">;

<handler name="log" type="java:org.apache.axis.handlers.LogHandler">;</handler>;

<globalconfiguration>;
<requestflow>;
<handler type="log">;</handler>;
</requestflow>;
<responseflow>;
<handler type="log">;</handler>;
</responseflow>;
</globalconfiguration>;

<transport name="http" pivot="java:org.apache.axis.transport.http.HTTPSender">;</transport>;

</deployment>;

log4j properties setting

프로퍼티 파일 위치는 class 폴더 (WEB-INF/class 같은) 또는 java -Dlog4j.configuration=file:/home/httpd/html/log4j.properties 같이 직접 지정.(http.sh 파일 등에)

log4j.rootLogger=DEBUG, stdout
log4j.logger.foo.boo=INFO, serviceInfo, serviceWarn, mail

#Console Log
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=INFO
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p at %C{3}.%M(%13F:%L) %3x - %m%n
#info level File Log
log4j.appender.serviceInfo=org.apache.log4j.DailyRollingFileAppender
log4j.appender.serviceInfo.Threshold=INFO
log4j.appender.serviceInfo.File=/home/httpd/log/interpark/serviceInfo.log
log4j.appender.serviceInfo.DatePattern='.'yyyy-MM-dd
log4j.appender.serviceInfo.layout=org.apache.log4j.PatternLayout
log4j.appender.serviceInfo.layout.ConversionPattern=[%d] %-5p at %C{3}.%M(%13F:%L) %3x - %m%n
#debug level File Log
log4j.appender.serviceWarn=org.apache.log4j.DailyRollingFileAppender
log4j.appender.serviceWarn.Threshold=WARN
log4j.appender.serviceWarn.File=/home/httpd/log/interpark/serviceWARN.log
log4j.appender.serviceWarn.DatePattern='.'yyyy-MM-dd
log4j.appender.serviceWarn.layout=org.apache.log4j.PatternLayout
log4j.appender.serviceWarn.layout.ConversionPattern=[%d] %-5p at %C{3}.%M(%13F:%L) %3x - %m%n
#mail는 SMTPAppender(SMTP 메일)에 출력
log4j.appender.mail=org.apache.log4j.net.SMTPAppender
log4j.appender.mail.Threshold=ERROR
log4j.appender.mail.BufferSize=512
log4j.appender.mail.SMTPHost=mail.foo.co.kr
log4j.appender.mail.SMTPUsername=foo
log4j.appender.mail.SMTPPassword=boo
log4j.appender.mail.TimeFrame=30
log4j.appender.mail.MaxEMails=10
log4j.appender.mail.From=foo@foo.co.kr
log4j.appender.mail.To=boo@boo.co.kr
log4j.appender.mail.Subject=장애 안내
log4j.appender.mail.layout=org.apache.log4j.PatternLayout
log4j.appender.mail.layout.ConversionPattern=%d{ISO8601} %5p [%t] (%F:%L) - %m%n

log4j properties setting

프로퍼티 파일 위치는 class 폴더 (WEB-INF/class 같은) 또는 java -Dlog4j.configuration=file:/home/httpd/html/log4j.properties 같이 직접 지정.(http.sh 파일 등에)

log4j.rootLogger=DEBUG, stdout
log4j.logger.foo.boo=INFO, serviceInfo, serviceWarn, mail

#Console Log
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=INFO
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p at %C{3}.%M(%13F:%L) %3x - %m%n
#info level File Log
log4j.appender.serviceInfo=org.apache.log4j.DailyRollingFileAppender
log4j.appender.serviceInfo.Threshold=INFO
log4j.appender.serviceInfo.File=/home/httpd/log/interpark/serviceInfo.log
log4j.appender.serviceInfo.DatePattern='.'yyyy-MM-dd
log4j.appender.serviceInfo.layout=org.apache.log4j.PatternLayout
log4j.appender.serviceInfo.layout.ConversionPattern=[%d] %-5p at %C{3}.%M(%13F:%L) %3x - %m%n
#debug level File Log
log4j.appender.serviceWarn=org.apache.log4j.DailyRollingFileAppender
log4j.appender.serviceWarn.Threshold=WARN
log4j.appender.serviceWarn.File=/home/httpd/log/interpark/serviceWARN.log
log4j.appender.serviceWarn.DatePattern='.'yyyy-MM-dd
log4j.appender.serviceWarn.layout=org.apache.log4j.PatternLayout
log4j.appender.serviceWarn.layout.ConversionPattern=[%d] %-5p at %C{3}.%M(%13F:%L) %3x - %m%n
#mail는 SMTPAppender(SMTP 메일)에 출력
log4j.appender.mail=org.apache.log4j.net.SMTPAppender
log4j.appender.mail.Threshold=ERROR
log4j.appender.mail.BufferSize=512
log4j.appender.mail.SMTPHost=mail.foo.co.kr
log4j.appender.mail.SMTPUsername=foo
log4j.appender.mail.SMTPPassword=boo
log4j.appender.mail.TimeFrame=30
log4j.appender.mail.MaxEMails=10
log4j.appender.mail.From=foo@foo.co.kr
log4j.appender.mail.To=boo@boo.co.kr
log4j.appender.mail.Subject=장애 안내
log4j.appender.mail.layout=org.apache.log4j.PatternLayout
log4j.appender.mail.layout.ConversionPattern=%d{ISO8601} %5p [%t] (%F:%L) - %m%n

Soap message logging in AXIS

client-config.wsdd로 soap로그를 남기는 것이 가능해졌지만 org.apache.axis.handlers.LogHandler는 common-logging을 사용하는 관계로 맘에 들지 않는다.
import org.apache.axis.handlers.BasicHandler를 상속받거나 handler를 구성하면 간단하게 적용시킬 수 있다.

public class AxisLogHandler extends BasicHandler{
Logger logger = Logger.getLogger(AxisLogHandler.class);

public void invoke(MessageContext messageContext)
throws AxisFault {
try{
logger.info(messageContext.getMessage().getSOAPBody() );
} catch (SOAPException e) { .....}
}
}
구현 후 client-config.wsdd를 수정해 주면 된다.

change host file in Linux

이 요약은 사용할 수 없습니다. 이 글을 보려면 여기를 클릭하세요.

double underscore in XStream

XmlFriendlyReplacer xfr = new XmlFriendlyReplacer("_", "_");
XStream xstream = new XStream(new DomDriver("UTF-8", xfr));

이런식으로 리플레이서를 바꿀 수 있다.

참조 : http://jira.codehaus.org/browse/GRAILS-4167

VI 명령어

도무지 외울 수가 없는 VI 명령어와 단축키들...
글쓴이에게 감사하며..

http://omen666.tistory.com/106

regex

도무지 정규식은 외워 지지 않는다.

글쓴이에게 감사하며

http://litlhope.springnote.com/pages/1786498


http://searcher.tistory.com/156

http://java.sun.com/docs/books/tutorial/essential/regex/pattern.html

Open Development Environment


  • IDE : eclipse

    • install Java SDK

    • Install Eclipse (download...here)



  • SVN : XP-dep

    • Code Project

    • Tigris

    • SourceForge

    • xp-dev (private project service. but 200MG limit)

      • crate account in site

      • setup eclipse (help... this)





  • Server : Google Web App

    • development & deploy (help...here)



Eclipse error : JVM terminated. Exit code=-1

갈릴레오가 나온 지금에도 고쳐지지 않고 있다.

--launcher.XXMaxPermSize
256M

으로 되어 있는 부분을

--launcher.XXMaxPermSize = 256M

처럼 수정하면 된다.