2008년 2월 18일 월요일

MS-SQL 에 Oralce의 ROWNUM 처럼 구현하기..


Oracle 에서는 rownum >= 10 이런식으로 10개씩 추출할수 있다.

이걸 이용해서 게시판 글수를 추출하기가 편한데, MS-SQL은 그게 없다.

그래서 TOP과 NOT IN을 이용하여 아래와 같은 방법으로 하면 가능하다.


SELECT * FROM (
 SELECT TOP 10 * FROM (
  SELECT * FROM T_BOARD
 ) b
 WHERE SEQ NOT IN (
  SELECT TOP 10 SEQ FROM T_BOARD ORDER BY SEQ DESC
 )
 ORDER BY SEQ DESC
) a


몇개 단위로 보여줄껀지, 빨간 파란색 숫자를 이용하면 가능할 것이다.

Flash 보안 설정...



Flash Player는 로컬과 네트워크간의 통신을 기본적으로 차단합니다.
또한 윈도우 XP SP2 역시 로컬과 네트워크간의 통신을 차단합니다.
그로 인해 생길수 있는 문제.

로컬상에서 테스트할 시 플래시내부에서 자바스크립트 호출 및 http로 나가는 부분 작동하지 않음

해결방법
1번과 2번은 같은 이슈를 해결하기 위한 방법이므로 둘 중 하나만 써도 무관합니다.

1. 플래시 플레이어 전역보안설정

http://www.macromedia.com/support/documentation/kr/flashplayer/help/settings_manager04.html

위 사이트에서 플래시 플레이어 전역보안설정을 해주세요.
신뢰할 수 있는 파일 및 폴더를 지정해줍니다.

2. trust파일 설치

메모장에 신뢰할수 있는 위치 경로를 지정하여 flashTrust.cfg파일을 작성합니다.
로컬상의 모든 위치를 신뢰한다면

C:\
D:\
E:\
.
(중간생략)
.
Z:\

드라이브를 작성하고 flashTrust.cfg 로 저장합니다.(이름은 상관엄꾸요)
위 파일을 아래 경로에 위치시킵니다.

* Windows 모든 사용자:
 <system>\Macromed\Flash\FlashPlayerTrust
 EX) c:\Windows\system32\Macromed\Flash\FlashPlayerTrust\

* Windows 단일 사용자:
 <app data>\Macromed\Flash Player\#Security\FlashPlayerTrust
 EX) c:\Documents and Settings\<사용자이름>\Application Data\Macromedia\Flash Player\Security\FlashPlayerTrust

* Mac OS 모든 사용자:
 <app support>/Macromedia/FlashPlayerTrust
 EX) /Library/Application Support/Macromedia/FlashPlayerTrust

* Mac OS 단일 사용자:
 <app data>/Macromedia/Flash Player/#Security/FlashPlayerTrust
 EX) /User/<UserName>/Library/Preferences/Macromedia/Flash Player/#Security/FlashPlayerTrust

CD타이틀을 배포하기 위한 방침으로 인스톨러를 이용해 위 flashTrust.cfg파일을 사용자의 시스템에 인스톨시켜주는 방법을 생각할 수 있습니다.

3. Windows XP SP2에서 생기는 일
Windows XP SP2에서는 로컬에서 파일을 액세스할 때 Active X 및 javascript 가 포함된 html이 차단됩니다.
이를 해결하기 위해서 html페이지에 Mark of the web 이라는 코드를 삽입해 줍니다.

<!-- saved from url=(0013)about:internet -->

자세한 내용은 아래 사이트를 참고하세요.
http://www.adobe.com/kr/support/flash/ts/documents/xpsp2.htm

또 있을법도 하겠지만...
이정도 설정만 해두면 로컬이든 웹이든 정상적으로 작동을 합니다.




추가로.. 플래시를 로컬로 배포 할때 2번 방법으로 사용하여 자동배포 EXE를 설치하게 만들어주고,
플래시를 띄우도록 하면 간단하게 배포 할수도 있겠습니다.

2008년 2월 4일 월요일

Tomcat & Oracle DBCP 설정


 

pool.jocl

<object class="org.apache.commons.dbcp.PoolableConnectionFactory"
    xmlns="http://apache.org/xml/xmlns/jakarta/commons/jocl">

   <object class="org.apache.commons.dbcp.DriverManagerConnectionFactory">
      <string value="jdbc:oracle:thin:@taesuz.net:1521:taesuzdb" />
      <string value="taesuz" />
      <string value="1111" />
   </object>
 
   <object class="org.apache.commons.pool.impl.GenericObjectPool">
      <object class="org.apache.commons.pool.PoolableObjectFactory" null="true" />
      <int value="10" />
      <byte value="1" />
      <long value="10000" />
      <int value="10" />
      <int value="3" />
      <boolean value="true" />
      <boolean value="true" />
      <long value="600000" />
      <int value="5" />
      <long value="3600000" />
      <boolean value="true" />
   </object>
 
   <object class="org.apache.commons.pool.impl.GenericKeyedObjectPoolFactory" null="true" />


   <string null="true" />
 
   <boolean value="false" />
 
   <boolean value="true" />
</object>



 

DBCPInit.java

package taesuz.dbpool;

import javax.servlet.http.HttpServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import java.util.StringTokenizer;

public class DBCPInit extends HttpServlet {

    public void init(ServletConfig config) throws ServletException {
        try {
            String drivers = config.getInitParameter("pool");
            StringTokenizer st = new StringTokenizer(drivers, ",");
            while (st.hasMoreTokens()) {
                String DB = st.nextToken();
                Class.forName(DB);
            }
           
            Class.forName("org.apache.commons.dbcp.PoolingDriver");
           
        } catch(Exception ex) {
            throw new ServletException(ex);
        }
    }
}


 

web.xml

<web-app>
 <servlet>
  <servlet-name>DBCPInit</servlet-name>
  <servlet-class>taesuz.dbpool.DBCPInit</servlet-class>
  <init-param>
   <param-name>pool</param-name>
   <param-value>oracle.jdbc.driver.OracleDriver</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
</web-app>






설정 끝~~~~



테스트를 위한 JSP와 커넥션을 가져오는 클래스

DBConnect.java

package taesuz.dbpool;

import java.sql.*;

public class DBConnect {
 /**
  * APP/Web 환경에서 쓰이도록 지정 DBCP를 사용한다.
  * default poolName : pool
  * @return Connection
  * @throws SQLException
  */

 public static Connection getConnection() throws SQLException {
  return DriverManager.getConnection("jdbc:apache:commons:dbcp:/pool");
 }

 /**
  * APP/Web 환경에서 쓰이도록 지정 DBCP를 사용한다.
  * @param poolName
  * @return Connection
  * @throws SQLException
  */

 public static Connection getConnection(String poolName) throws SQLException {
  return DriverManager.getConnection("jdbc:apache:commons:dbcp:/"
    + poolName);
 }

}



test.jsp

<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page import="java.sql.*" %>
<%@ page import="taesuz.dbpool.DBConnect" %>

<%
try{
 Connection conn = null;
 Statement stmt = null;
 ResultSet rs = null;

 conn = DBConnect.getConnection();
 String query = "select * from DUAL";
 stmt = conn.createStatement();
 rs = stmt.executeQuery(query);
 
 if(rs.next())
  out.print(rs.getString(1));


} catch(Exception e) {
 System.out.println(e);
} finally {
     if (rs != null) try { rs.close(); } catch (Exception e) {}
     if (stmt != null) try { stmt.close(); } catch (Exception e) {}
     if (conn != null) try { conn.close(); } catch (Exception e) {}
 }

%>



다른 관련 설정 트랙백 참조.