powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как быть с коннекшном?
4 сообщений из 4, страница 1 из 1
Как быть с коннекшном?
    #35941652
Коннектор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть зачаток веб-приложения (первого) на JSP. Возникает вопрос как быть с коннекшном? Если для каждого обращения к БД создавать новое то получается достаточно ресурсоемкая весчь (около полсекунды на открытие на семпроне 2600+, 1Гб). На данный момент создаю по одному коннекшну на сессию и держу его открытым. Чувствую, что изобретаю велосепед. Как правильно поступать в таких случаях?
...
Рейтинг: 0 / 0
Как быть с коннекшном?
    #35941955
Коннектор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надо пользовать пул коннекшнов. Сорри за тупизм. =)
...
Рейтинг: 0 / 0
Как быть с коннекшном?
    #35944133
Коннектор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПРодолжаю тупизм. Допустим, так если поступить
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
import java.sql.*;
import com.ibm.db2.jcc.*;
import java.util.ArrayList;

public class DBAccess {
    
    private static DBAccess _instance = null;
    private static String dbName = "testdb";
    private static String serverName = "192.168.1.1";
    private static String login  = "login";
    private static String passw  = "pasword";
    private DB2PooledConnection pool = null;

    
    private DBAccess(){
        try{

            DB2ConnectionPoolDataSource db2pc = new DB2ConnectionPoolDataSource();
            db2pc.setDatabaseName(dbName);
            db2pc.setPortNumber( 50000 );
            db2pc.setServerName(serverName);
            db2pc.setUser(login);
            db2pc.setPassword(passw);
            pool = (DB2PooledConnection)db2pc.getPooledConnection();
            //con = DriverManager.getConnection(dbpath,login,passw);

        }
        catch (Exception e){}
    }
    
    public static DBAccess getInstance(){
        if (_instance == null)
        {
            try{
                Class.forName("com.ibm.db2.jcc.DB2Driver");                
            }
            catch(Exception e) {return null;}

            _instance = new DBAccess();
            return _instance;
        }
        else return _instance;
    }

    public BuisenessObject[] getBuisenessObjects(){
        CallableStatement cstmt = null;
		ResultSet rs = null;
        try {
            Connection con = pool.getConnection();
            PreparedStatement com = con.prepareStatement("SELECT ...");
            //Ну и понеслась
	    }
	    catch (Exception e) {
            e.printStackTrace();
            return null;
	    }

	   	finally {
            //все подчистить
        }
    }

    public AnotherBuisenessObject[] getAnotherBuisenessObject(){
        try {
            String sql = "select ... ";
            Connection con = pool.getConnection();
            PreparedStatement com = con.prepareStatement(sql);
            //Ну и т.д.
	    }
	    catch (Exception e) {
            e.printStackTrace();
            return null;
	    }

	   	finally {
            //все подчистить
	    }
    }
}
А в коде страниц писать что-то типа
DBAcess db = DBAcess.getInstance();
db.getXXXXXX();// ну и т.д.
это же тоже будет неправильно, потому, что db будет не е единственном экземпляре, а присутствовать в каждом сеансе?
...
Рейтинг: 0 / 0
Как быть с коннекшном?
    #35944220
Ответ: "Использовать пулы соединений" был совершенно правильным.
1. Пул соединений конфигурируется средствами сервера приложений. Читать в доке на сервер приложений. Там будет и имя класса драйвера, и логин, и пароль и т.п. параметры.
2. В приложении (для веб-приложения это будет WEB-INF\web.xml) описывается ссылка на внешний ресурс. На основании этой ссылки нужно будет провести привязку (binding) к пулу сервера во время разворачивания приложения на сервере.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    <resource-ref id="ResourceRef_1168431556765">
        <description></description>
        <res-ref-name>jdbc/SampleDB</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>
3. В коде приложения нужно получить ссылку на ресурс (пул) и потом получить соединение.
Код: plaintext
1.
2.
3.
4.
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/SampleDB");
Connection conn = ds.getConnection();
<SQL-действия>
conn.close() // - Обязательно, если было успешное conn.open()! 
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как быть с коннекшном?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]