Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как быть с коннекшном? / 4 сообщений из 4, страница 1 из 1
20.04.2009, 11:49
    #35941652
Коннектор
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как быть с коннекшном?
Есть зачаток веб-приложения (первого) на JSP. Возникает вопрос как быть с коннекшном? Если для каждого обращения к БД создавать новое то получается достаточно ресурсоемкая весчь (около полсекунды на открытие на семпроне 2600+, 1Гб). На данный момент создаю по одному коннекшну на сессию и держу его открытым. Чувствую, что изобретаю велосепед. Как правильно поступать в таких случаях?
...
Рейтинг: 0 / 0
20.04.2009, 13:43
    #35941955
Коннектор
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как быть с коннекшном?
Надо пользовать пул коннекшнов. Сорри за тупизм. =)
...
Рейтинг: 0 / 0
21.04.2009, 13:12
    #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
21.04.2009, 13:29
    #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
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как быть с коннекшном? / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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