Разъяснение пула соединений JDBC - PullRequest
0 голосов
/ 08 февраля 2012

Я настроил пул соединений jdbc в среде java-ee, выполнив следующие изменения.

    The context.xml 

<Context> 
        <Resource name="jdbc/mysybase" auth="Container" 
                  type="javax.sql.DataSource" driverClassName="com.sybase.jdbc3.jdbc.SybDriver" 
                  url="jdbc:sybase:Tds:H2S33.studtrack.com:2025/student" 
                  username="scott" password="tiger" maxActive="20" maxIdle="10" 
                  maxWait="-1"/> 
    </Context> 


    In The web.xml file 
    <resource-ref> 
     <description>Sybase Datasource example</description> 
     <res-ref-name>jdbc/mysybase</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <res-auth>Container</res-auth> 
    </resource-ref> 


    And the jsp page 

    <%@page import="java.sql.*"%> 
    <%@page import="javax.naming.Context"%> 
    <%@page import="javax.naming.InitialContext"%> 
    <%@page import="java.sql.Connection"%> 
    <%@page import="java.sql.SQLException"%> 
    <%@page import="java.sql.ResultSet"%> 
    <%@page import="javax.sql.DataSource"%> 
    <html> 
    <head> 
    <title>Obtaining a Connection</title> 
    </head> 
    <body> 

    <% 
        Connection conn = null; 
        ResultSet result = null; 
        Statement stmt = null; 
         try { 
           Context initContext = new InitialContext(); 
        Context envContext  = (Context)initContext.lookup("java:/comp/env"); 
           DataSource ds = (DataSource)envContext.lookup("jdbc/mysybase"); 
           conn = ds.getConnection(); 
        if (conn != null)  
        { 
            String message = "Got Connection " + conn.toString() + ", "; 
            out.write(message); 
        } 
        else 
        { 
            out.write("hello no conn obtained"); 

        } 

            stmt = conn.createStatement(); 
            result = stmt.executeQuery("SELECT * FROM Student"); 
        while(result.next()) 
        { 
            out.write(result.getString("name")); 
        } 

         } 
         catch (SQLException e) { 
             out.write("Error occurred " + e); 
          } 

    %> 

    </body> 
    </html>

Теперь я хочу, чтобы пул jdbc был доступен и в обычных классах java.Нужно ли вносить какие-либо изменения, если я хочу, чтобы пул был доступен в классах Java.Могу ли я получить объект подключения в Java-классе так же, как я получил соединение в JSP, как показано выше.

Connection conn = null; 
ResultSet result = null; 
Statement stmt = null;
Context initContext = new InitialContext(); 
Context envContext  = (Context)initContext.lookup("java:/comp/env"); 
DataSource ds = (DataSource)envContext.lookup("jdbc/mysybase"); 
conn = ds.getConnection(); 

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Да, вы использовали стандарт JNDI (Java Naming and Directory Interface) для подготовки соединения, поэтому вы можете использовать тот же код в java-классах для доступа к соединению (конечно, вы должны использовать исходный экземпляр Context, чтобы, например, использовать его для установки).фабрика соединений для него).

Я вижу ваш код и нахожу эти примечания, для лучшего применения вы должны соблюдать его:

  1. Вы используете jdbc на уровне представления, лучше подходить так:"desing Data Access layer".
  2. Вы можете использовать известные пулы соединений, такие как "C3P0" и "Apache Tomcat 7 Connection Pool", у этих пулов соединений есть больше возможностей для корпоративных приложений. (конечно, у вас естьчтобы проверить ваш текущий пул соединений с этим предложением)
  3. Вы можете использовать ORM для уровня доступа к данным, это объектно-ориентированный дизайн.
1 голос
/ 08 февраля 2012

1.) Вы можете установить contextListener для инициализации соединения только один раз и получить логическое соединение из пула (возможно, вы используете DBCP tomcat).

2.) Да, как только вы начнете соединение (наборы драйверовсокет и пул инициализируются) из контекстных данных, вы можете получить соединение (из пула), правильно вызывая его из любого java-класса.

3.) Старайтесь не помещать чистый код Java в JSP.Просто правило дороги: это плохое решение.

...