2012-10-31
java] random 사용하여 난수 구하기.
// 1 ~ 10 사이의 정수 난수
for (int i = 1; i <= 20; i++) {
int n = (int) (Math.random() * 10) + 1; <== *10 부분을 100, 1000 으로 늘리면 1-100, 1-1000 까지의 난수를 구할 수 있다.
System.out.println(n);
}
// 0.0 ~ 1.0 사이의 실수 난수
for (int i = 1; i <= 20; i++)
System.out.println(Math.random());
java] Quartz를 사용하여 동적으로 Job 등록하기
출처 : http://zemba.tistory.com/53
Quartz는 작업을 일정 지정한 시간에 Class기능을 수행하도록 만드는 스케쥴러이다.
이를 위해서는 Schduler가 있어야 하며 또 수행할 작업들의 Class가 있어야 한다.
나는 Quartz를 사용하기 위해서 우선 다음과 같이 분류하였다.
분류
|
기능
|
Quartz Scheduler Main
|
실질적인 Scheduler가 Job을 수행시키는 Class
|
Quartz Job Class
|
수행할 작업의 내용이 담겨있는 Class
|
Quartz PropertyLoader
|
Properties에 Job정보를 Main Class에서 읽어 드리도록만든 Loader Class(정해진 규칙에 따라서 등록해야 함)
|
각 분류별 Class의 코드의 내용을 확인해보자.
1.Scheduler Class(THJobMain.class)
- Main에서는 Properties파일에서 등록한 Job내용을 읽어드려 수행하는 작업만 수행한다.
- Scheduler는 StdSchedulerFactory에 스케쥴생성을 통하여 스케쥴러를 시작할수 있다. 단순히 스케쥴러는 시작만한다.
- 스케쥴러 에서 Start후에는 스케쥴러에 등록된 Job Class가 동작하게 되는것이다.
- JobRegist에서 Job을 등록해준다.
- JobRegist에서는 CronTrigger를 사용하여 스케쥴에 등록하여준다.
- JobDetail은 "Name" , "Group" , "Class" 형태로 등록하고
CronTrigger는 "Name" , "Group" , "CronExpression"으로 등록한다.
- 해당 Job을 scheduler.scheduleJob(jobDetail, trigger); 를 사용하여 스케쥴러에 등록해준다.
1.Scheduler Class(THJobMain.class)
- Main에서는 Properties파일에서 등록한 Job내용을 읽어드려 수행하는 작업만 수행한다.
- Scheduler는 StdSchedulerFactory에 스케쥴생성을 통하여 스케쥴러를 시작할수 있다. 단순히 스케쥴러는 시작만한다.
- 스케쥴러 에서 Start후에는 스케쥴러에 등록된 Job Class가 동작하게 되는것이다.
- JobRegist에서 Job을 등록해준다.
- JobRegist에서는 CronTrigger를 사용하여 스케쥴에 등록하여준다.
- JobDetail은 "Name" , "Group" , "Class" 형태로 등록하고
CronTrigger는 "Name" , "Group" , "CronExpression"으로 등록한다.
- 해당 Job을 scheduler.scheduleJob(jobDetail, trigger); 를 사용하여 스케쥴러에 등록해준다.
package tahoe.core.job;import java.text.ParseException; import org.apache.log4j.PropertyConfigurator; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.impl.StdSchedulerFactory; public class THJobMain { private SchedulerFactory schedulFactoty = null; private Scheduler scheduler = null; private JobDetail jobDetail = null; private CronTrigger trigger = null; private String className = null; private String expression = null; THPropertyLoader ThProp = new THPropertyLoader(); public THJobMain() { JobInit(); } private void JobInit() { try { schedulFactoty = new StdSchedulerFactory(); scheduler = schedulFactoty.getScheduler(); scheduler.start(); JobRegist(); } catch (SchedulerException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void JobRegist() { String taskGroups = ThProp.read("TaskGroups"); String taskList = ThProp.read( taskGroups + ".TaskNames"); String[] arTaskGroups = taskList.split(","); for ( int i = 0; i < arTaskGroups.length; i++ ) { Class c = null; className = ThProp.read( arTaskGroups[i] + ".class" ); expression = ThProp.read( arTaskGroups[i] + ".Expression" ); try { c = Class.forName( className ); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } jobDetail = new JobDetail( arTaskGroups[i], arTaskGroups[i], c ); trigger = new CronTrigger( arTaskGroups[i], arTaskGroups[i] ); try { trigger.setCronExpression( expression ); scheduler.scheduleJob(jobDetail, trigger); } catch (SchedulerException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch ( ParseException e2 ) { e2.printStackTrace(); } } } public static void main(String[] args) { PropertyConfigurator.configure("WEB-INF/conf/log4j.properties"); new THJobMain(); } } |
2.PropertyLoader Class(THPropertyLoader.class)
- Param으로 받은 string Value를 사용하여 Properties파일의 해당 내용을 찾는다.
- String으로 값을 Return해준다.
package tahoe.core.job import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class THPropertyLoader { public THPropertyLoader() {} /** * properties 파일 읽기 */ public String read(String propKey) { Properties pp = new Properties(); try { FileInputStream fis = new FileInputStream("WEB-INF/conf/quartz.properties"); pp.load(fis); } catch (IOException ioe) { ioe.printStackTrace(); System.exit(-1); } return pp.getProperty(propKey); } } |
3.Job Class(THJobTest1.class,THJobTest2.class,THJobTest3.class)
- 실재 스케쥴이 시작될때 작업을 해야할 기능이 있는 Class이다.
- Job Class는 Quartz의 Job class를 필수적으로 구현해서 사용해야한다.(implement Job)
- Job 수행은 execute를 통해서 실행된다.(로직을 사용시에 이부분에서 로직을 구현하면 된다.)
- Test를 위해 sysout메세지 출력으로 Test해본다.
public class THJobTest1 implements Job { public void execute(JobExecutionContext context) { System.out.println("Test Job1 = " + new Date()); } } |
public class THJobTest2 implements Job { public void execute(JobExecutionContext context) { System.out.println("Test Job2 = " + new Date()); } } |
public class THJobTest3 implements Job { public void execute(JobExecutionContext context) { System.out.println("Test Job3 = " + new Date()); } } |
이제 Properties파일에 설정한후 실행을 해보자.
현재 Property에 Expression 설정을 매 5초 마다 실행 하도록 설정하였다.
각각 등록후 에 Main에서 수행시킬 경우 다음과 같이 내용이 출력되었다.
이로써 Job Class를 작성한후 매번 Main에서 Job을 등록하지 않아도 Properties파일을 사용하여 작업스케쥴러를
등록하여 편리하게 사용할 수 있다.
[2010:06:15 11:06:58][INFO][org.quartz.simpl.SimpleThreadPool][0(ms)][Tahoe]-Job execution threads will use class loader of thread: main
[2010:06:15 11:06:58][INFO][org.quartz.core.SchedulerSignalerImpl][0(ms)][Tahoe]-Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
[2010:06:15 11:06:58][INFO][org.quartz.core.QuartzScheduler][0(ms)][Tahoe]-Quartz Scheduler v.1.7.3 created.
[2010:06:15 11:06:58][DEBUG][org.quartz.utils.UpdateChecker][0(ms)][Tahoe]-Checking for update...
[2010:06:15 11:06:58][INFO][org.quartz.simpl.RAMJobStore][0(ms)][Tahoe]-RAMJobStore initialized.
[2010:06:15 11:06:58][INFO][org.quartz.impl.StdSchedulerFactory][0(ms)][Tahoe]-Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
[2010:06:15 11:06:58][INFO][org.quartz.impl.StdSchedulerFactory][0(ms)][Tahoe]-Quartz scheduler version: 1.7.3
[2010:06:15 11:06:58][INFO][org.quartz.core.QuartzScheduler][0(ms)][Tahoe]-Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
[2010:07:15 11:07:00][DEBUG][org.quartz.simpl.SimpleJobFactory][0(ms)][Tahoe]-Producing instance of Job 'THJobTest1.THJobTest1', class=tahoe.core.job.THJobTest1
[2010:07:15 11:07:00][DEBUG][org.quartz.core.JobRunShell][0(ms)][Tahoe]-Calling execute on job THJobTest1.THJobTest1
[2010:07:15 11:07:00][DEBUG][org.quartz.simpl.SimpleJobFactory][0(ms)][Tahoe]-Producing instance of Job 'THJobTest2.THJobTest2', class=tahoe.core.job.THJobTest2
[2010:07:15 11:07:00][DEBUG][org.quartz.core.JobRunShell][0(ms)][Tahoe]-Calling execute on job THJobTest2.THJobTest2
[2010:07:15 11:07:00][DEBUG][org.quartz.simpl.SimpleJobFactory][0(ms)][Tahoe]-Producing instance of Job 'THJobTest3.THJobTest3', class=tahoe.core.job.THJobTest3
[2010:07:15 11:07:00][DEBUG][org.quartz.core.JobRunShell][0(ms)][Tahoe]-Calling execute on job THJobTest3.THJobTest3
Test Job3 = Mon Mar 15 11:07:00 KST 2010
Test Job1 = Mon Mar 15 11:07:00 KST 2010
Test Job2 = Mon Mar 15 11:07:00 KST 2010[2010:07:15 11:07:01][DEBUG][org.quartz.utils.UpdateChecker][0(ms)][Tahoe]-No update found.
[2010:07:15 11:07:05][DEBUG][org.quartz.simpl.SimpleJobFactory][0(ms)][Tahoe]-Producing instance of Job 'THJobTest1.THJobTest1', class=tahoe.core.job.THJobTest1
[2010:07:15 11:07:05][DEBUG][org.quartz.core.JobRunShell][0(ms)][Tahoe]-Calling execute on job THJobTest1.THJobTest1
Test Job1 = Mon Mar 15 11:07:05 KST 2010
[2010:07:15 11:07:05][DEBUG][org.quartz.simpl.SimpleJobFactory][0(ms)][Tahoe]-Producing instance of Job 'THJobTest2.THJobTest2', class=tahoe.core.job.THJobTest2
[2010:07:15 11:07:05][DEBUG][org.quartz.core.JobRunShell][0(ms)][Tahoe]-Calling execute on job THJobTest2.THJobTest2
Test Job2 = Mon Mar 15 11:07:05 KST 2010
[2010:07:15 11:07:05][DEBUG][org.quartz.simpl.SimpleJobFactory][0(ms)][Tahoe]-Producing instance of Job 'THJobTest3.THJobTest3', class=tahoe.core.job.THJobTest3
[2010:07:15 11:07:05][DEBUG][org.quartz.core.JobRunShell][0(ms)][Tahoe]-Calling execute on job THJobTest3.THJobTest3
Test Job3 = Mon Mar 15 11:07:05 KST 2010
java Framework/java] PDF 작업 관련 url
- 자바 애플리케이션에서 동적으로 PDF 파일 생성하기 : http://www.yunsobi.com/blog/221
- lucene 에서 PDF 를 text 로 변환하는 소스 : http://blog.naver.com/PostView.nhn?blogId=kgj1&logNo=108051492
- PDF 파일로 이미지(jpg)파일 만들기 : http://zxzx200.tistory.com/17
- PDF renderer : https://pdf-renderer.dev.java.net/
- PDFBOX (apache open source ) : http://pdfbox.apache.org/
- iText에서 한글 처리 문제 해결 :
- iText 에서 장평 처리
- iText의 예제 소스 중 part/chapter14/TextStateOperateors.java 의 59-62 줄 사이의 canvas.setHorizontalScaling(50) 으로 조정 가능(이미지로 처리하는 듯 함)
- iText의 예제 소스 중 part/chapter14/TextStateOperateors.java 의 59-62 줄 사이의 canvas.setHorizontalScaling(50) 으로 조정 가능(이미지로 처리하는 듯 함)
- 거니네(iText관련 문서/강좌??) http://guni.loveyust.net/tag/itext
- IText 예제 샘플 사이트 : http://www.roseindia.net/java/itext/index.shtml
- iText 공식 사이트 : http://www.lowagie.com/iText/download.html
iText.jar : iText-5.0.5.jar
- IText API site : http://api.itextpdf.com/index.html?index-all.html
pdfContentByte 에서 bold 를 사용할 수 있는 방법??
.
// first define a standard font for our textFont helvetica8BoldBlue = FontFactory.getFont(FontFactory.HELVETICA, 8, Font.BOLD, Color.blue);
// create a column object
ColumnText ct = new ColumnText(cb);
// define the text to print in the column
Phrase myText = new Phrase("Lorem ipsum dolor sit amet, ...", helvetica8BoldBlue);
ct.setSimpleColumn(myText, 72, 600, 355, 317, 10, Element.ALIGN_LEFT);
ct.go();
java Framework/java] Object와 JSONObject
[다운]
Java에서 Json 객체로 변환할 때, json-lib라는 오픈 소스를 이용한다.
http://json-lib.sourceforge.net
json-lib에서 array를 변환할 때는 EZMorph 라이브러리가 필요하다.
http://ezmorph.sourceforge.net
자바스크리브에서 객체를 json 객체로 변환시에는 json.js를 이용한다.
http://json.org
[사용법]
Java에서 Json-lib를 사용하기 위해서 필요한 라이브러리는 다음과 같고, eclipse 사용시 Build Path -> Add Exeternal Archives 에 추가한다.
Java에서 Json 객체로 변환할 때, json-lib라는 오픈 소스를 이용한다.
http://json-lib.sourceforge.net
json-lib에서 array를 변환할 때는 EZMorph 라이브러리가 필요하다.
http://ezmorph.sourceforge.net
자바스크리브에서 객체를 json 객체로 변환시에는 json.js를 이용한다.
http://json.org
[사용법]
Java에서 Json-lib를 사용하기 위해서 필요한 라이브러리는 다음과 같고, eclipse 사용시 Build Path -> Add Exeternal Archives 에 추가한다.
json-lib-2.1-jdk15.jar
jakarta commons-lang 2.3
jakarta commons-beanutils 1.7.0
jakarta commons-collections 3.2
jakarta commons-logging 1.1
ezmorph 1.0.4
jakarta commons-lang 2.3
jakarta commons-beanutils 1.7.0
jakarta commons-collections 3.2
jakarta commons-logging 1.1
ezmorph 1.0.4
[예제]
1. 자바스크립트에서
object.toJSONString();
2. 자바에서
JSONObject oJSONObject = JSONObject.fromObject( object );
JSONArray = JSONArray.fromObject( retlist );
json형식 ==>{"jsontest":[{"name":"Mr.Cho","location":"Seoul"}]}
import java.util.Iterator;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JSONParse {
public static void main(String[] ar) {
String s = "{\"jsontest\":[{\"name\":\"Mr.Cho\",\"location\":\"Seoul\"}]}";
JSONObject jo = JSONObject.fromObject(s);
JSONArray ja = jo.getJSONArray("jsontest");
for (Iterator i = ja.iterator(); i.hasNext();) {
JSONObject ob = (JSONObject) i.next();
String a = ob.getString("name");
String b = ob.getString("location");
System.out.println(a);
System.out.println(b);
}
}
}
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JSONParse {
public static void main(String[] ar) {
String s = "{\"jsontest\":[{\"name\":\"Mr.Cho\",\"location\":\"Seoul\"}]}";
JSONObject jo = JSONObject.fromObject(s);
JSONArray ja = jo.getJSONArray("jsontest");
for (Iterator i = ja.iterator(); i.hasNext();) {
JSONObject ob = (JSONObject) i.next();
String a = ob.getString("name");
String b = ob.getString("location");
System.out.println(a);
System.out.println(b);
}
}
}
※
아래 fromObject를 사용할 수 있어서 json.jar (org.json.JSONObject) 보다는 json-lib.jar (net.sf.json.JSONObject) 이 더 편한 것 같다.
JSONObject.fromObject( obj )
obj에 문자열도 가능하며, 이것이 JSONText 규칙에 맞을 경우 적절한 JSON 객체를 만들어준다.
이때, obj에 있는 문자열은 작은따옴표(')도 문자열로 간주한다.
Map states = JSONObject.fromObject("{'':'선택안함','1':'신청','2':'완료','3':'보류'}")
위와 같이 하면 꽤 깔쌈하게 Map 객체를 만들 수 있으며, 이를 Velocity에서도 #set 구문을 이용해서 똑같이 쓸 수도 있다.
JSONObject.fromObject( obj )
obj에 문자열도 가능하며, 이것이 JSONText 규칙에 맞을 경우 적절한 JSON 객체를 만들어준다.
이때, obj에 있는 문자열은 작은따옴표(')도 문자열로 간주한다.
Map states = JSONObject.fromObject("{'':'선택안함','1':'신청','2':'완료','3':'보류'}")
위와 같이 하면 꽤 깔쌈하게 Map 객체를 만들 수 있으며, 이를 Velocity에서도 #set 구문을 이용해서 똑같이 쓸 수도 있다.
라벨:
자바,
프로그래밍,
java,
json,
programing
java] jsp jdbc 연결 예제
출처 : http://allinfo.tistory.com/14
파일명 : jdbctest.jsp
<%@ page contentType="text/html;charset=euc-kr" import="java.sql.*" %>
<% request.setCharacterEncoding("euc-kr"); %>
<%
// 데이터베이스 연결관련 변수 선언
Connection conn = null;
Statement stmt = null;
// 데이터베이스 연결관련정보를 문자열로 선언
String jdbc_driver = "oracle.jdbc.driver.OracleDriver";
String jdbc_url = "jdbc:oracle:thin:@localhost:1521:ORCL";
try{
// JDBC 드라이버 로드
Class.forName(jdbc_driver);
// 데이터베이스 연결정보를 이용해 Connection 인스턴스 확보
conn = DriverManager.getConnection(jdbc_url,"scott","tiger");
// Connection 클래스의 인스턴스로 부터 SQL 문 작성을 위한 Statement 준비
stmt = conn.createStatement();
// username 값을 입력한 경우 sql 문장을 수행.
if(request.getParameter("username") != null) {
String sql = "insert into jdbc_test values('"+request.getParameter("username")+"','"+request.getParameter("email")+"')";
stmt.executeUpdate(sql);
}
}
catch(Exception e) {
System.out.println(e);
}
%>
<HTML>
<HEAD><TITLE>JDBC 테스트 </TITLE></HEAD>
<BODY>
<center>
<H2>이벤트 등록</H2>
<HR>
<form name=form1 method=post action=jdbctest.jsp>
등록이름 : <input type=text name=username>
email주소 : <input type=text name=email size=20>
<input type=submit value="등록">
</form>
<HR>
</center>
# 등록 목록<P>
<%
try{
// select 문장을 문자열 형태로 구성한다. String sql = "select username, email from jdbc_test";
// select 를 수행하면 데이터정보가 ResultSet 클래스의 인스턴스로 리턴됨. ResultSet rs = stmt.executeQuery(sql);
int i=1;
// 마지막 데이터까지 반복함. while(rs.next()) {
out.println(i+" : "+rs.getString(1)+" , "+rs.getString("email")+"<BR>");
i++;
}
// 사용한 자원의 반납.
rs.close();
stmt.close();
conn.close();
}
catch(Exception e) {
System.out.println(e);
}
%>
</BODY>
</HTML>
Java] InputStream 을 String으로 변환하기
InputStream 을 String으로 변환하는 방법
춮처 : http://www.kodejava.org/examples/266.html
package org.kodejava.example.io;
import java.io.InputStream;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class StreamToString {
public static void main(String[] args) throws Exception {
StreamToString sts = new StreamToString();
/*
* Get input stream of our data file. This file can be in the root of
* you application folder or inside a jar file if the program is packed
* as a jar.
*/
InputStream is = sts.getClass().getResourceAsStream("/data.txt");
/*
* Call the method to convert the stream to string
*/
System.out.println(sts.convertStreamToString(is));
}
public String convertStreamToString(InputStream is) throws IOException {
/*
* To convert the InputStream to String we use the BufferedReader.readLine()
* method. We iterate until the BufferedReader return null which means
* there's no more data to read. Each line will appended to a StringBuilder
* and returned as String.
*/
if (is != null) {
StringBuilder sb = new StringBuilder();
String line;
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
} finally {
is.close();
}
return sb.toString();
} else {
return "";
}
}
}
라벨:
자바,
inputStream,
java,
programing,
String
Java] Ibatis 다중링크 사용
출처 : http://mimul.com/pebble/default/2008/02/24/1203779580000.html
웹 어플리케이션에서 하나 이상의 데이터 베이스에 접근하여 어플리케이션이 실행되는 환경들이 많을 것입니다.
iBatis에서 어떻게 활용되는 지 사용방법을 공유합니다.
사용환경은 iBatis와 DBCP입니다.
- database.properties
driver=oracle.jdbc.driver.OracleDriver
jdbc.url1=jdbc:oracle:thin:@mimuluserdb:1521:mimuluser
username1=mimuluser
password1=mimuluser
jdbc.url2=jdbc:oracle:thin:@pepsiuserdb:1521:pepsiuser
username2=pepsiuser
password2=pepsiuser - sqlmap1.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<properties resource="com/mimul/dwr/app/
resource/database.properties"/>
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="40"
maxSessions="20"
maxTransactions="5"
useStatementNamespaces="false"
/>
<transactionManager type="JDBC">
<dataSource type="DBCP">
<property name="driverClassName" value="${driver}"/>
<property name="url" value="${jdbc.url1}"/>
<property name="username" value="${username1}"/>
<property name="password" value="${password1}"/>
<!-- OPTIONAL PROPERTIES BELOW -->
<property name="initialSize" value="5"/>
<property name="maxActive" value="30"/>
<property name="maxIdle" value="20"/>
<property name="maxWait" value="60000"/>
<property name="poolPreparedStatements" value="true"/>
<property name="validationQuery" value="select 0 from dual"/>
<property name="testOnBorrow" value="true"/>
<property name="maximumActiveConnections" value="10"/>
<property name="maximumIdleConnections" value="5"/>
<property name="maximumWait" value="60000"/>
<property name="logAbandoned" value="false"/>
<property name="removeAbandoned" value="false"/>
<property name="removeAbandonedTimeout" value="50000"/>
</dataSource>
</transactionManager>
<sqlMap resource="com/mimul/dwr/app/sql/Mimul.xml"/>
</sqlMapConfig> - sqlmap2.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<properties resource="com/mimul/dwr/app/resource/database.properties"/>
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="40"
maxSessions="20"
maxTransactions="5"
useStatementNamespaces="false"
/>
<transactionManager type="JDBC">
<dataSource type="DBCP">
<property name="driverClassName" value="${driver}"/>
<property name="url" value="${jdbc.url2}"/>
<property name="username" value="${username2}"/>
<property name="password" value="${password2}"/>
<!-- OPTIONAL PROPERTIES BELOW -->
<property name="initialSize" value="5"/>
<property name="maxActive" value="30"/>
<property name="maxIdle" value="20"/>
<property name="maxWait" value="60000"/>
<property name="poolPreparedStatements" value="true"/>
<property name="validationQuery" value="select 0 from dual"/>
<property name="testOnBorrow" value="true"/>
<property name="maximumActiveConnections" value="10"/>
<property name="maximumIdleConnections" value="5"/>
<property name="maximumWait" value="60000"/>
<property name="logAbandoned" value="false"/>
<property name="removeAbandoned" value="false"/>
<property name="removeAbandonedTimeout" value="50000"/>
</dataSource>
</transactionManager>
<sqlMap resource="com/mimul/dwr/app/sql/Pepsi.xml"/>
</sqlMapConfig>
- SqlConfig.java
import java.io.File;
import java.io.Reader;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.jaeminara.common.log.LogPool;
public class SqlConfig {
private static SqlMapClient sqlMap1 = null;
private static SqlMapClient sqlMap2 = null;
private static SqlConfig instance_ = null;
private SqlConfig() throws Exception
{
Reader reader = null;
String resource = null;
try {
if (sqlMap == null) {
resource = "sqlmap1.xml";
reader = Resources.getResourceAsReader(resource);
sqlMap1 = SqlMapClientBuilder.buildSqlMapClient(reader);
resource = "sqlmap2.xml";
reader = Resources.getResourceAsReader(resource);
sqlMap2 = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
}
} catch (Exception e) {
System.out.println(e);
throw e;
} finally {
if (reader != null)
reader.close();
reader = null;
rsc = null;
}
}
public static SqlConfig instance()
{
try {
if (instance_ == null) {
synchronized (SqlConfig.class) {
if (instance_ == null)
instance_ = new SqlConfig();
}
}
} catch (Exception e) {
System.out.println(e);
}
return instance_;
}
/**
* Return SqlMapClient for SDP schema
*
* @return
*/
public static SqlMapClient getSqlMap1Instance()
{
return sqlMap1;
}
/**
* Return SqlMapClient for SDP schema
*
* @return
*/
public static SqlMapClient getSqlMap2Instance()
{
return sqlMap2;
}
}
2012-09-19
javascript] 숫자만 입력받는 함수
회원으로 가입하거나 할때 유용하게 쓰일수 있는 팁이라서 올린다.[초기값 한글/영문으로 지정하기]<input type="text" name="m_name" style="ime-mode:active;"> //초기값이 한글자판
<input type="text" name="m_id" style="ime-mode:inactive;"> //초기값이 영문자판
[숫자 및 특수문자 허용]
// 숫자만 입력받는다. 특수문자('-','.',...)도 허용한다.
function onlyNumber() {
if((event.keyCode > 31) && (event.keyCode < 45) || (event.keyCode > 57)) {
event.returnValue = false;
}
}
// 숫자만 입력받는다. "-"도 받지않는다.
function onlyNumber2(loc) {
if(/[^0123456789]/g.test(loc.value)) {
alert("숫자가 아닙니다.\n\n0-9의 정수만 허용합니다.");
loc.value = "";
loc.focus();
}
}
사용예제) - 주민번호나 전화번호 경우<input name="jumin2" value="" type="text" size="7" maxlength="7" onKeyPress=onlyNumber() onBlur=onlyNumber2(this);>
<input type="text" name="m_id" style="ime-mode:inactive;"> //초기값이 영문자판
[숫자 및 특수문자 허용]
// 숫자만 입력받는다. 특수문자('-','.',...)도 허용한다.
function onlyNumber() {
if((event.keyCode > 31) && (event.keyCode < 45) || (event.keyCode > 57)) {
event.returnValue = false;
}
}
// 숫자만 입력받는다. "-"도 받지않는다.
function onlyNumber2(loc) {
if(/[^0123456789]/g.test(loc.value)) {
alert("숫자가 아닙니다.\n\n0-9의 정수만 허용합니다.");
loc.value = "";
loc.focus();
}
}
사용예제) - 주민번호나 전화번호 경우<input name="jumin2" value="" type="text" size="7" maxlength="7" onKeyPress=onlyNumber() onBlur=onlyNumber2(this);>
라벨:
자바스크립트,
프로그래밍,
함수,
javascript,
programing
피드 구독하기:
글 (Atom)