Struts 설정 연결 탱크 오류 해결 문제 및 인 스 턴 스 2006 - 12 - 04 10: 55 Struts 설정 연결 탱크 오류 해결 문제

Struts 설정 연결 탱크 오류 해결 문제 및 인 스 턴 스 2006 - 12 - 04 10: 55 Struts 설정 연결 탱크 오류 해결 문제
돌리다http://hi.baidu.com/dburu/blog/item/55a32e0196a5dd0e7bec2c81.html)
1、Cannot create JDBC driver of class '' for connect URL ''
문제: jdbc 드라이버 를 찾 을 수 없 지만 알림 메시지 의 class 값 은 null 이기 때문에 Tomcat 에서 server. xml 의 Resource 설정 정 보 를 찾 지 못 했다 고 단정 할 수 있 습 니 다.가능 한 이 유 는 다음 과 같 습 니 다. (1) 리 소스 를 설정 하지 않 았 습 니 다.(2) 리 소스 설정 정보 가 설 치 된 위치 가 잘못 되 었 습 니 다.(3) 쉽게 발견 할 수 없 는 오류, driverClassName 과 url 맞 춤 법 오류.해결 방법: 리 소스 설정 이 정확 한 지 확인 하고 Default Context 또는 Context 설정 절 에 넣 어야 합 니 다.
2、Cannot create JDBC driver of class 'xxx' for connect URL ''
해결 방법: 설 정 된 데이터베이스 구동 클래스 xxx 가 잘못 되 었 습 니 다. 검사 하고 수정 하면 됩 니 다.정확 한 것 을 확인 하면 구동 라 이브 러 리 를 찾 을 수 없습니다. jar 를 Tomcat / common / lib 에 복사 하면 됩 니 다.
3、Cannot create JDBC driver of class '' for connect URL 'xxx'
해결 방법: 설 정 된 url 문자열 문법 이 잘못 되 었 습 니 다. 검사 후 수정 하면 됩 니 다.
4, PoolableConnectionFactory 를 만 들 수 없습니다, 원인: 이오 이상: 연결 거부
문제: 연결 탱크 공장 대상 을 만 들 수 없습니다. 연결 이 거부 되 었 기 때 문 입 니 다.해결 방법: url 문자열 을 검사 합 니 다. 서버 주소, 포트, 데이터베이스 이름 또는 데이터베이스 인 스 턴 스 이름 등 정보 오류 가 발생 할 수 있 습 니 다.수정
5. No suitable driver 에 일치 하 는 드라이버 가 없습니다.
분석: 드라이버 설정 오류 입 니 다. Tomcat 의 common / lib 하위 디 렉 터 리 에 데이터베이스 드라이버 가 있 는 지 확인 하 십시오.
6. 리 소스 인 스 턴 스 를 만 들 수 없습니다. 데이터 원본 인 스 턴 스 를 만 들 수 없습니다.
문제: comons - dbcp - 1.1. jar (버 전이 다 를 수 있 음) 해결 방법 을 찾 을 수 없습니다. comons - dbcp - 1.1. jar 라 이브 러 리 파일 을 Tomcat / Common / lib 하위 디 렉 터 리 에 복사 합 니 다.
7、root cause:
java. lang. NoClassDef Foundation Error: org / apache / comons / collections / cursorableLinkedList 문제: comons - collections. jar 를 찾 을 수 없습니다.해결 방법: comons - collections. jar 라 이브 러 리 파일 을 Tomcat / Common / lib 하위 디 렉 터 리 에 복사 합 니 다.
8、root cause:
java. lang. NoClassDef Foundation Error: org / apache / comons / pool / impl / GenericObjectPool 문제: comons - pool - 1.1. jar 를 찾 을 수 없습니다. (버 전이 다 를 수 있 습 니 다.)해결 방법: comons - pool - 1.1. jar 라 이브 러 리 파일 을 Tomcat / Common / lib 하위 디 렉 터 리 에 복사 합 니 다.11 월 13 일 21: 11 | 댓 글 추가 | 고정 링크 | 참조 알림 (0) | 기록 | J2EE 는 도대체 Struts 로 연결 하 는 것 이 좋 습 니까? 아니면 tomcat 로 연결 하 는 것 이 좋 습 니까?그리고 struts 의 SQL Server 연결 풀 은 어떻게 설정 합 니까?
나의: struts - config 에 쓰기:

<data-sources>
  <data-source key="xxxx"  type="org.apache.commons.dbcp.BasicDataSource">
  <set-property property="driverClassName"
   value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />
  <set-property property="url" 
   value="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=xxxxx"/>
  <set-property property="maxActive" 
   value="5" />
  <set-property property="username" 
   value="xx" />
  <set-property property="password"
   value="xx" />
  <set-property property="autoCommit" 
   value="true" />
  </data-source>
</data-sources>


tomcat 와 struts 에 서 는 쓰기 가 좋 지 않 습 니 다. tomcat 에서 자체 적 으로 가지 고 있 는 연결 풀 은 성숙 하지 않 은 프로젝트 일 뿐 입 니 다.
가장 좋 은 것 은 학습 과 소형 항목 에 만 쓰 는 것 이다.struts 는 계층 구 조 를 나타 내 고 바 텀 데이터 관리 에 더욱 적합 하지 않다.
다른 연결 탱크 (예 를 들 어 hibenate 자체 테이프, poolman 등) 가 없 을 때 상대 적 으로 tomcat 에서 설정 하 는 것 이 좋 습 니 다.
Tomcat 의 연결 탱크 는 사실 dbcp 입 니 다. 제 가 유행 하 는 dbcp, c3p 0, proxool 세 가지 연결 탱크 를 비교 해 봤 는데 인터넷 에서 많은 자 료 를 수집 한 결과 모두 proxool 이 가장 좋 았 습 니 다.현재 hibenate 3 에 서 는 dbcp 통합 을 포기 하 였 습 니 다. 저 는 hibenate 의 공식 사이트 에서 hibenate 의 작 가 를 보 았 습 니 다. 이렇게 하 는 이 유 는 실천 과정 에서 dbcp 가 불안정 하 다 는 것 을 발 견 했 기 때 문 입 니 다. c3p 0 에 대해 저 는 외국 에서 몇 편의 글 이 효율 이 높 지 않다 는 것 을 본 적 이 있 습 니 다. 그러나 구체 적 으로 어 떻 습 니까? 저 는 해 본 적 이 없습니다.우리 회사 의 하루 방 문 량 이 수 십 만 에 달 하 는 사 이 트 는 바로 proxool 로 매우 안정 적 이라는 것 을 증명 한다.struts 의 연결 탱크 는 사용 해 본 적 이 없습니다. 연결 탱크 의 효율 과 안정성 이 매우 관건 적 이 라 고 생각 합 니 다. 만약 에 대형 응용 에서 연결 탱크 를 선택 하면 신중 해 야 합 니 다.
다 중 연결 방법
------------------------------------
Struts 의 응용 시스템 을 디자인 하 는 과정 에서 웹 / 표시 층 (presentation layer) 과 비 즈 니스 논리 류 (모든 데이터 접근 작업 을 포함 하 는 층) 사이 에서 Action 류 를 소형 어댑터 (thin adapter) 로 정의 하 는 것 이 좋 습 니 다.
  따라서 비 즈 니스 API (business API) 를 먼저 정의 할 수 있 습 니 다. 이 API 들 은 간단 한 자바 류 입 니 다.이 대상 에 게 파 라 메 터 를 전달 하고 이 대상 에서 자바 빈 이나 자바 빈 의 집합 을 되 돌려 줄 수 있 습 니 다.이 Action 클래스 는 이 대상 을 호출 하고 되 돌아 오 는 값 을 웹 / 표시 층 에 전달 합 니 다.
  일반적으로, 당신 이 호출 해 야 할 모든 비 즈 니스 방법 / 비 즈 니스 클래스 API 에 Action 클래스 를 만 들 수 있 습 니 다.이상 적 인 상황 에서 모든 데이터베이스 접근 코드 는 이러한 비 즈 니스 API 클래스 에 봉인 되 어 있 기 때문에 Struts 는 당신 이 사용 하고 있 는 지구 층 (persistent layer) 을 모 릅 니 다.이것 은 메 인 키 (Key) 나 조회 파 라 메 터 를 전달 한 다음 에 되 돌아 오 는 결과 bean 이나 bean 집합 을 처리 해 야 합 니 다.이렇게 하면 다른 응용 환경 에서 이러한 비 즈 니스 API 류 를 재 활용 할 수 있 고 Struts 나 HTTP 환경 에 독립 된 비 즈 니스 API 를 단일 테스트 할 수 있 습 니 다.
  시작 할 때 가장 간단 한 방법 은 1: 1 의 방안 을 설계 하여 모든 비 즈 니스 API 입구 (entry - point) 에 Action 류 를 정의 하 는 것 입 니 다.경험 이 풍부 해 지면 디 스 패 치 액 션 그룹 을 사용 할 수 있 습 니 다.모든 비 즈 니스 클래스 를 호출 하기 위해 간단 한 '프레임 워 크' Action 을 정의 할 수 있 습 니 다.contrib 디 렉 터 리 에서 Scaffold 가 디자인 한 ProcessAction 을 찾 을 수 있 습 니 다. 이것 은 '프레임 워 크' Action 의 완전한 실현 입 니 다.이런 방안 을 사용 하면 더 적은 Action 클래스 를 사용 할 수 있 지만, Struts 와 MVC 프레임 워 크 의 밑바닥 실현 에 대해 깊 은 이 해 를 가 져 야 한다.시작 할 때 너무 많은 Action 을 정의 하 는 것 을 두려워 하지 마 세 요. Struts 의 설정 방안 은 나중에 디자인 을 재 구성 하 는 데 충분 한 자 유 를 줄 수 있 습 니 다. Action 류 를 유연 하 게 바 꿀 수 있 고 응용 프로그램 에 영향 을 주지 않 기 때 문 입 니 다.
  이상 적 인 상황 에서 비 즈 니스 논리 층 (business logic layer) 은 데이터베이스 연결 을 포함 한 모든 데이터 접근 디 테 일 을 패키지 해 야 합 니 다.그러나 일부 응용 프로그램의 디자인 요구 호출 자 는 DataSource 대상 에서 데이터 베 이 스 를 연결 할 수 있 습 니 다.이 경우 Struts DataSource 관리 자 는 필요 할 때 이 DataSource 자원 을 설정 할 수 있 습 니 다.
  Struts DataSource 관리 자 는 Struts 설정 파일 (Struts - config. xml) 에서 정의 합 니 다.이 관리 자 는 javax. sql. dataSource 인 터 페 이 스 를 실현 하 는 데이터베이스 연결 풀 (connection pool) 을 배포 하고 설정 할 수 있 습 니 다.DBMS 나 용기 에 이러한 요구 에 맞 는 연결 탱크 가 내장 되 어 있다 면 우선 선택 할 수 있 습 니 다.
[자카르타 의 공공 연결 풀 구현 - Basic DataSource]
  만약 당신 이 가지 고 있 는 연결 탱크 의 로 컬 (native) 이 실현 되 지 않 는 다 면 자카르타 가 제공 하 는 공공 연결 탱크 를 사용 하여 [org. apache. comons. dbcp. BasicDataSource] 를 실현 할 수 있 습 니 다. DataSource 관리자 와 잘 합작 할 수 있 습 니 다.또한, Struts 는 util 가방 에 GenericDataSource 류 를 포함 하고 있 으 며, 이것 도 연결 탱크 의 실현 이다.그러나 이것 은 아주 간단 한 실현 방안 일 뿐 사용 을 추천 하지 않 습 니 다. Struts 의 향후 버 전에 서 Basic DataSource 나 다른 데이터 원본 으로 대 체 될 수 있 기 때 문 입 니 다.
  다음은 Struts - config. xml 프로필 의 데이터 원본 설정 (GenericDataSource 데이터 원본 으로 구현) 입 니 다. 시스템 에 맞 는 설정 을 변경 할 수 있 습 니 다.

<!-- configuration for GenericDataSource wrapper -->
<data-sources>
         <data-source>
           <set-property
                 property="autoCommit"
                 value="false"/>
           <set-property
                 property="description"
                 value="Example Data Source Configuration"/>
           <set-property
                 property="driverClass"
                 value="org.postgresql.Driver"/>
           <set-property
                 property="maxCount"
                 value="4"/>
           <set-property
                 property="minCount"
                 value="2"/>
           <set-property
                 property="password"
                 value="mypassword"/>
           <set-property
                 property="url"
                 value="jdbc:postgresql://localhost/mydatabase"/>
           <set-property
                 property="user"
                 value="myusername"/>
         </data-source>
</data-sources>


Basic DataSource 데이터 원본 을 사용 하여 구현 하 는 설정 방안 은 다음 과 같 습 니 다.

<data-sources>
        <!-- configuration for commons BasicDataSource -->
        <data-source type="org.apache.commons.dbcp.BasicDataSource">
                <set-property
                  property="driverClassName"
                  value="org.postgresql.Driver" />
                <set-property
                  property="url"
                  value="jdbc:postgresql://localhost/mydatabase" />
                <set-property
                  property="username"
                  value="me" />
                <set-property
                  property="password"
                  value="test" />
                <set-property
                  property="maxActive"
                  value="10" />
                <set-property
                  property="maxWait"
                  value="5000" />
                <set-property
                  property="defaultAutoCommit"
                  value="false" />
                <set-property
                  property="defaultReadOnly"
                  value="false" />
                <set-property
                  property="validationQuery"
                  value="select COUNT(*) FROM market" />
        </data-source>
</data-sources>

  응용 시스템 에서 하나의 데이터 원본 만 정의 할 수 있 습 니 다. 필요 에 따라 여러 데이터 원본 을 정의 하고 논리 적 이름 (logical name) 을 각각 만 들 수 있 습 니 다.이렇게 하면 응용 시스템 에 더 좋 은 안전성 과 측정 가능 성 (scalability) 을 제공 할 수 있 고 테스트 에 사용 할 데이터 원본 도 정의 할 수 있다.
  DataSource 를 설정 하면 응용 시스템 에서 이 데이터 원본 을 사용 할 수 있 습 니 다.이 코드 는 Action 류 의 execute 방법 에서 이 데이터 원본 을 통 해 데이터베이스 연결 을 만 드 는 방법 을 보 여 줍 니 다.

public ActionForward execute(
        ActionMapping mapping,
        ActionForm form,
        HttpServletRequest request,
        HttpServletResponse response)
        throws Exception
{
        DataSource dataSource;
        Connection cnn;

        try
        {
                dataSource = getDataSource(request);
                cnn = dataSource.getConnection();
                //          ,           
        }
        catch (SQLException e)
        {
                getServlet().log("       ", e);
        }
        finally
        {
                //  finally        
                //             
                try
                {
                        cnn.close();
                }
                catch (SQLException e)
                {
                        getServlet().log("       ", e);
                }
        }
}

  메모: 공공 Basic DataSource 를 사용 하면 pingQuery 속성 에 대한 조회 문 구 를 제공 합 니 다. (설정 되 어 있다 면) 최소한 한 줄 의 기록 을 되 돌려 야 합 니 다.
예: selectCOUNT (*) FROM VALIDTABLE
데이터베이스 에 포 함 된 유효한 테이블 로 VALIDTABLE 를 바 꿀 수 있 습 니 다.
[여러 데이터 원본 사용]
모듈 (Module) 에서 하나 이상 의 데이터 원본 을 사용 해 야 한다 면 설정 파일 의 < data - source > 요소 에 key 속성 을 포함 할 수 있 습 니 다.

<data-source>
        <data-source key="A" type="org.apache.commons.dbcp.BasicDataSource">
                …     ,   …
        </data-source>
        <data-source key="B" type="org.apache.commons.dbcp.BasicDataSource">
                …     ,   …
        </data-source>
</data-source>


코드 에서 키 를 통 해 다른 데이터 원본 을 얻 을 수 있 습 니 다.코드 는 다음 과 같 습 니 다:

…
try
{
        dataSourceA = getDataSource(request, "A");
        dataSourceB = getDataSource(request, "B");
…

너 는 필요 에 따라 모든 모듈 에 여러 개의 데이터 원본 을 설정 할 수 있다.그러나 같은 모듈 에서 모든 데이터 원본 의 key 속성 은 유일 해 야 합 니 다. Struts 모듈 시스템 은 모든 모듈 단위 로 네 임 스페이스 를 관리 하기 때 문 입 니 다.
  2006 년 10 월 27 일 오후 12: 49 에 발표 | 논평 (0)
Struts 데이터 원본 설정 과정 (Action 에 연결 되 지 않 음) JDBC 데이터 원본 (Data Source) 의 사용 은 데이터베이스 연결 과정 을 간소화 합 니 다. truts 에 서 는 JDBC 2.0 표준 확장 패키지 의 javax. sql. Data Source 인 터 페 이 스 를 사용 하여 데이터 원본 을 실현 합 니 다.확장 팩 은 jdbc 20-stdext.jar。,jdk 1.4 후 버 전에 이 확장 패 키 지 를 포함 합 니 다.예 를 들 어 아래 의 예.데이터베이스 이름 "classuser", 표: "classuser".Struts 프로필 'struts - config. xml' 에서 Struts 데이터 원본 을 설정 합 니 다. 이 데이터 원본 은 ActionServlet 에서 관리 합 니 다.다음 코드 는 Struts - config. xml 설정 입 니 다.

<struts-config> 
<data-sources>
  <data-source key="oracleDB1" type="org.apache.commons.dbcp.BasicDataSource">
   <set-property property="driverClassName" 
    value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />
   <set-property property="url"
    value="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=classuser;" />
   <set-property property="maxActive"
    value="5"/>
   <set-property property="username"
    value="sa"/>
   <set-property property="password"
    value=""/>
   <set-property property="autoCommit"
    value="true"/>
  </data-source>
 </data-sources> 

모델 류 DBUser 를 정의 하고 이 클래스 에 데이터베이스 작업 과 관련 된 업무 논 리 를 패키지 합 니 다.

package classmate;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;public class DBUser { DataSource dataSource;
 
 public DBUser(DataSource dataSource) {
  
   this.dataSource = dataSource;
 }
 
 
 public boolean checkUser(String name,String psw) throws Exception{
        Connection connect = null;
  String strSql;
  ResultSet rs;
  boolean result=false;
        strSql = "select * from classuser where username='"
     + name + "' and password='" + psw + "'";
  try {
   connect = dataSource.getConnection();
   Statement stmt = connect.createStatement();
   rs = stmt.executeQuery(strSql);
   if ( rs.next()) {
    result=true;
   }
  }
  catch(SQLException ex) {
   ex.printStackTrace();
  }
  finally{
   if(connect!=null)
    connect.close();
  }
  return result;
 
 }
 
}
  Action Bean LoginAction,             oracleDB1。 ServletContext context = servlet.getServletContext();
  DataSource dataSource = (DataSource)context.getAttribute("oracleDB1");
      
        DBUser dbuser = new DBUser(dataSource);
        HttpSession session = request.getSession();
       
        if (!dbuser.checkUser(name,psw)) {
   ActionMessages errors = new ActionMessages();
   errors.add(ActionMessages.GLOBAL_MESSAGE,
    new ActionMessage("label.deny"));
    
   if (!errors.isEmpty()) {
    saveErrors(request, errors);
   }
     return  mapping.findForward("failed");  //    
  }
  else{
       return (mapping.findForward("successed"));//         
  } 
 }
} 

또한 Struts 구조 에서 필요 에 따라 설정 파일 에 여러 개의 데이터 원본 을 설명 할 수 있 습 니 다. 이 때 는 'key' 속성 을 사용 하여 모든 데이터 원본 에 유일한 key 값 을 할당 하고 특정한 데이터 원본 을 표시 해 야 합 니 다.

좋은 웹페이지 즐겨찾기