2014-11-05 6 views
2

면책 조항 : 오늘 밤 액세스 할 수없는 다른 PC에서 내 코드가 집에있을 때이 질문을 직장에서 (메모리에서) 쓰고 있습니다. 나는 내 기억에 새삼 스러울 때 질문을 쓰고있다. 그래서 어떤 실수라도 사과한다.Tomcat 7/Tomee/Java 데이터 소스

질문 : 나는 Tomee에 MySQL 데이터베이스에 연결하는 웹 응용 프로그램을 작성하고 있습니다. 아래 그림과 같이 나는 성공적 Tomee에서 데이터 소스를 만들었습니다.이 아주 잘 작동하지만이 데이터 소스에 의존 않습니다

<Resource auth="Container" 
      driverClassName="com.mysql.jdbc.Driver" 
      maxActive="100" 
      maxIdle="30" 
      maxWait="10000" 
      name="jdbc/TestDB" 
      type="javax.sql.DataSource" 
      url="jdbc:mysql://localhost:3306/java" 
      username="u5ser" 
      password="p4ssword"/> 

어떤 구성되고/나는 내 코드를 배포 톰캣/Tomee의 모든 인스턴스 궁극적으로 나는 Glassfish 나 Weblogic 또는 다른 Tomcat/Tomee와 같은 다른 컨테이너에이 코드를 배포 할 수 있기를 바랍니다. 일명 전쟁 파일에있는 데이터 소스를 원합니다.

이 점을 고려하여 My Datasource를 Java (MyDataSource.class)로 작성하고이를 WAR 파일에 번들로 묶어 WebListener로 초기화하는 방법이 있습니까?

본질적으로 : 위의 XML 코드를 내 데이터 소스에 코딩하는 방법을 알고 싶습니다. (권장되는 방법이 아니더라도 - 실제로 실험하고 있습니다.)

또한 코드를 작성하여 속성 파일에서 읽고 데이터 소스의 구성 요소를 구성 가능하도록 설정할 것을 고려합니다.

나는 웹상에서 몇 가지 예제를 발견했다. 코드에서 연결 풀을 만들 수 있도록 maxActive, maxIdle, maxWait 비트가있다. 이것들은 빠진 것 같습니다.

도움을 주시면 감사하겠습니다.

답변

1

당신은 당신의 자신의 데이터 소스를 만들려면 WAR Apache Commons DBCPApache Commons Pool에 포함 할 수 있습니다 : 당신이 Reading Properties file in Java를 참조 특성 파일을 사용하려면

package com.company.app.util; 

import java.sql.Connection; 
import java.sql.SQLException; 
import javax.sql.DataSource; 
import org.apache.commons.dbcp.BasicDataSource; 

public final class ConnectionProvider { 
    private static final DataSource DATA_SOURCE; 
    static { 
     try { 
      BasicDataSource dataSource = new BasicDataSource(); 
      dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 
      dataSource.setUrl("jdbc:mysql://localhost/test"); 
      dataSource.setUsername("root"); 
      dataSource.setPassword(""); 
      dataSource.setValidationQuery("select now()"); 
      dataSource.setTestOnBorrow(true); 
      dataSource.setRemoveAbandoned(true); 
      DATA_SOURCE = dataSource; 
     } catch (Throwable t) { 
      throw new ExceptionInInitializerError(t); 
     } 
    } 
    public static Connection getConnection() throws SQLException { 
     return DATA_SOURCE.getConnection(); 
    } 
} 

을하고 위의 코드에서 속성을 대체

+0

나는 이걸 나중에 (또는 내가 집에서 컴퓨터를 사용할 수있을 때마다) 이걸주고 싶어한다. – thonnor

+0

나는 이것을 가장 좋은 대답으로 받아 들일 것이다. 아이러니 컬 한 다른 프로젝트에서 사용할 수 있습니까? 그러나 이것은 또 다른 질문을 제기했습니다. 아마도 SO, Google 및 일반적인 용의자를 사용하여 여기에서 질문 할 것입니다. 도와 주셔서 감사합니다. – thonnor

1

Java에서 JDBC DriverManager 인터페이스를 사용하여 MySQL을 사용할 수 있습니다.

당신은 당신이 그렇게 할 수 :-)이 실험이다 말했듯이

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 

try { 
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java?user=u5ser&password=p4ssword"); 
} catch (SQLException ex) { 
    // handle any errors 
    System.out.println("SQLException Message: " + ex.getMessage()); 
    System.out.println("SQLState: " + ex.getSQLState()); 
} 

을 가져와야합니다.

+0

좋은 답변입니다. 이것은 연결 풀링을 허용합니까? – thonnor

0

@DataSourceDefinition 또는 해당하는 xml (web.xml)을 보았습니까?

+0

나는 두려워하지 않았다. 나는 몇 가지 시도를 끝내고 데이터 소스가 정의 된 META-INF/context.xml을 작성하기로 결정했다. 그것은 (바람둥이 어쨌든) 확인 작동합니다. 나는 Weblogic/Glassfish에 대해 재고 할 필요가있을 것이다. 그러나 그것은 아직 멀다. – thonnor