по поводу организации коннекта вобще пока мыслей нет, я просто реализовал что подруку попалось, для тестирования компонентов вполне годится.
по поводу пула - это на мой взгляд единственный правильный подход использования коннекта к бызе, но в его сторону пока не копал.
вобще небыло даже мыслей встраивать конест в компонеты, т.к. у каждого проекта организация коннекта к БД своя, поэтому компоненты просто должны использовать существующий. как это правильно организовать, пока не заню.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Я смотрю DriverManager тоже может полный jdbc адрес принимать (те вместе с юзером и паролем)
Предлагаю для дальнейшего удобства тестирования брать этот адрес (connectString) из сессии. Мой фильтр сможет ее туда засунуть. pageContext в этом случае не нужен, тк у меня проверка выполняется не в jsp а в фильтре. Согласен?
Если согласен, говори, как будет параметр в сессии называться? напр "conn"
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Диман, что мне лучше приделать в DBConnection, чтобы фреймворк брал строку коннекта из сессии?
У меня она будет храниться в следующем виде:
String conn = "jdbc:oracle:thin:mlc/mlc@//192.168.0.208:1521/tstdb";
session.setAttribute("conn", conn);
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
нужно передать в OpenConnection реквест <OpenConnection(HttpServletRequest request)> и брать коннекшн так:
<this.conn = request.getSession().getAttribute("conn");>
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
у меня пока не определенность с коннектом, я не пойму как его использовать, класс DBConnection писался для получения коннекта при тестировании компонентов, как это должно быть на самом деле я ума не приложу. могу конечно переделать как ты просишь, но тогда мне придется делать сервлет который будет пихать конн. в сессию, мне пока это не удобно, поэтому предлагаю каждому остаться при своей организации связи с БД. такой ваиант устраивает? а потом - ближе к финалу подумаем как всетаки это сделать. возможно это будет отдельный тег <jdbf:connection>.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
1. Что это за финал, о котором ты говоришь? :) Не хотелось бы говорить о финале :) Пусть все продолжается :)
2. Отдельный тэг нужно будет встраивать в каждую страничку? Не хотелось бы.. Или тэг спецом для страницы с логоном? Так бы меня устроило, я ведь не обязан использовать тэг в этом случае, мне достаточно лишь получить аналогичный результат..
Соответственно возникает вопрос: каков будет результат работы тэга? Наверняка самым удобным будет переменная в сессии, в которой будет строка коннекта, как я и предлагаю??
Давай рассмотрим предпосылки и сразу поймем, как нужно делать правильно..
Тебе не обязательно делать сервлет, тебе просто надо организовать пользовательский логон. С сервлетом или без - это уже второй вопрос.
3. Для удобства тестирования и с моей и с твоей стороны предлагаю следующее:
А)Передаем в OpenConnection вместо контекста - реквест
Б)Вместо строки
this.conn = DriverManager.getConnection(sc.getInitParameter("DBConnetion"), sc.getInitParameter("UserName"), sc.getInitParameter("Password"));
где в conn_str ты подставишь твою строку.
У тебя все будет работать как раньше, а мне нужно будет просто раскомментировать 2-ю строку
А дальше тогда посмотрим..
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
>>1. Что это за финал, о котором ты говоришь? :)
я имею ввиду тот момент когда мы наконец получим основной перечень тегов с которыми можно будет комфортно работать и развивать их дальше :)
>> 2. Отдельный тэг нужно будет встраивать.........................................
пару вопросов:
как на данный момент у тебя сделанна организация открытия/закрытия коннекта?
ты используешь пул, или коннект постояннен все http сессию?
>> 3. Для удобства тестирования и с моей и с твоей.............
ок поправлю на досуге.
-------------------------------------------
почему я хочу отдельный тег:
1) ловить коннест из сессии забота не стейтмента
2) есть явное открытие и освобождение коннекта при пуловой организации, кто кроме тега <connection> должен заботится об освобождении соединения с БД?!
тег <connection> точно также как ты и хотел будет брать соединение из http сессии, как мне кажется он больше подходит на эту роль. давай еще подумаем, чем все это может грозить или наоборот...
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
В принципе действительно можно встроить Connection в тэг Frame, кстати, для чего нужен тэг Page - ато мож и туда..
Короче смысл в том, чтобы отображать типа в строке статуса имя юзера и базы и кнопку со ссылкой на logon.jsp для переконнекта..
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
А грозить это может следующим:
Злоумышленник может перехватить идентификатор сессии и сформировать http запрос таким образом, чтобы сервер отдал ему переменную в сессии..
Это чисто теоретически..
На самом деле для этого на аппсерве должен быть соответствующий механизм отдачи переменной сессии - те нужно взломать аппсерв, тогда в принципе ты получаешь возможность получить доступ к БД, но это вполне удовлетворительно - надо защищать аппсерв.. :)
Вот скажем у нас на аппсервах еще и не то хранится ;)
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
только не забудь css подключить: <link HREF="<%=request.getContextPath().toString()%>/jdbf-content/styles/pagecontrol.css" REL="STYLESHEET" TYPE="text/css">
----------------------
по поводу остальнова втыкаю...
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
А, это вкладки чтоль? Понятно..
Тогда нужен тэг Connection - однозначно.. Этот тэг предлагаю делать контейнером всей странички..
С выводом в строку статуса, как я уже писал..
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
А DriverManager - это принципиально?
Я, например, использую классы
OracleDataSource и Connection
Например:
String connectString = "jdbc:oracle:thin:mlc/mlc@//192.168.0.241:1521/uk";
OracleDataSource ods = new OracleDataSource();
ods.setURL(connectString);
Connection conn = ods.getConnection();
PreparedStatement s = conn.prepareStatement("SELECT COMMON_PKG.PGET_PRJ_PWD_CHK(UPPER(?), UPPER(?)) C FROM DUAL");
s.setString(1, username);
s.setString(2, password);
ResultSet rset = s.executeQuery();
rset.next();
...
Вроде все через пул идет, грамотно..
Чем DriverManager лучше? Я просто не пользовался никогда, а гуглить лень, лучше тебя спрошу..
Если использовать мой метод, тогда в контексте можно хранить connectString вместо твоих параметров..
по поводу организации коннекта вобще пока мыслей нет, я просто реализовал что подруку попалось, для тестирования компонентов вполне годится.
по поводу пула - это на мой взгляд единственный правильный подход использования коннекта к бызе, но в его сторону пока не копал.
вобще небыло даже мыслей встраивать конест в компонеты, т.к. у каждого проекта организация коннекта к БД своя, поэтому компоненты просто должны использовать существующий. как это правильно организовать, пока не заню.
Я смотрю DriverManager тоже может полный jdbc адрес принимать (те вместе с юзером и паролем)
Предлагаю для дальнейшего удобства тестирования брать этот адрес (connectString) из сессии. Мой фильтр сможет ее туда засунуть. pageContext в этом случае не нужен, тк у меня проверка выполняется не в jsp а в фильтре. Согласен?
Если согласен, говори, как будет параметр в сессии называться? напр "conn"
Диман, что мне лучше приделать в DBConnection, чтобы фреймворк брал строку коннекта из сессии?
У меня она будет храниться в следующем виде:
String conn = "jdbc:oracle:thin:mlc/mlc@//192.168.0.208:1521/tstdb";
session.setAttribute("conn", conn);
нужно передать в OpenConnection реквест <OpenConnection(HttpServletRequest request)> и брать коннекшн так:
<this.conn = request.getSession().getAttribute("conn");>
Ты не хочешь навсегда так сделать?
у меня пока не определенность с коннектом, я не пойму как его использовать, класс DBConnection писался для получения коннекта при тестировании компонентов, как это должно быть на самом деле я ума не приложу. могу конечно переделать как ты просишь, но тогда мне придется делать сервлет который будет пихать конн. в сессию, мне пока это не удобно, поэтому предлагаю каждому остаться при своей организации связи с БД. такой ваиант устраивает? а потом - ближе к финалу подумаем как всетаки это сделать. возможно это будет отдельный тег <jdbf:connection>.
1. Что это за финал, о котором ты говоришь? :) Не хотелось бы говорить о финале :) Пусть все продолжается :)
2. Отдельный тэг нужно будет встраивать в каждую страничку? Не хотелось бы.. Или тэг спецом для страницы с логоном? Так бы меня устроило, я ведь не обязан использовать тэг в этом случае, мне достаточно лишь получить аналогичный результат..
Соответственно возникает вопрос: каков будет результат работы тэга? Наверняка самым удобным будет переменная в сессии, в которой будет строка коннекта, как я и предлагаю??
Давай рассмотрим предпосылки и сразу поймем, как нужно делать правильно..
Тебе не обязательно делать сервлет, тебе просто надо организовать пользовательский логон. С сервлетом или без - это уже второй вопрос.
3. Для удобства тестирования и с моей и с твоей стороны предлагаю следующее:
А)Передаем в OpenConnection вместо контекста - реквест
Б)Вместо строки
this.conn = DriverManager.getConnection(sc.getInitParameter("DBConnetion"), sc.getInitParameter("UserName"), sc.getInitParameter("Password"));
Вставляем
String conn_str = "jdbc:oracle:thin:mlc/mlc@//192.168.0.208:1521/tstdb";
//String conn_str = request.getSession().getAttribute("conn").toString();
this.conn = DriverManager.getConnection(conn_str);
где в conn_str ты подставишь твою строку.
У тебя все будет работать как раньше, а мне нужно будет просто раскомментировать 2-ю строку
А дальше тогда посмотрим..
>> Вставляем
>> String conn_str = "jdbc:oracle:thin:mlc/mlc@//192.168.0.208:1521/tstdb";
>> //String conn_str = request.getSession().getAttribute("conn").toString();
>> this.conn = DriverManager.getConnection(conn_str);
сделал.
А, ну и забыл сказать про StatementTag - там в вызове OpenConnectin нужно будет поменять контекст на реквест..
>>1. Что это за финал, о котором ты говоришь? :)
я имею ввиду тот момент когда мы наконец получим основной перечень тегов с которыми можно будет комфортно работать и развивать их дальше :)
>> 2. Отдельный тэг нужно будет встраивать.........................................
пару вопросов:
как на данный момент у тебя сделанна организация открытия/закрытия коннекта?
ты используешь пул, или коннект постояннен все http сессию?
>> 3. Для удобства тестирования и с моей и с твоей.............
ок поправлю на досуге.
-------------------------------------------
почему я хочу отдельный тег:
1) ловить коннест из сессии забота не стейтмента
2) есть явное открытие и освобождение коннекта при пуловой организации, кто кроме тега <connection> должен заботится об освобождении соединения с БД?!
тег <connection> точно также как ты и хотел будет брать соединение из http сессии, как мне кажется он больше подходит на эту роль. давай еще подумаем, чем все это может грозить или наоборот...
В принципе действительно можно встроить Connection в тэг Frame, кстати, для чего нужен тэг Page - ато мож и туда..
Короче смысл в том, чтобы отображать типа в строке статуса имя юзера и базы и кнопку со ссылкой на logon.jsp для переконнекта..
В этом случе соединение будет браться 1 раз на страницу из пула и закрываться по окончании генерации form или page - смотря чего там по идеологии..
А грозить это может следующим:
Злоумышленник может перехватить идентификатор сессии и сформировать http запрос таким образом, чтобы сервер отдал ему переменную в сессии..
Это чисто теоретически..
На самом деле для этого на аппсерве должен быть соответствующий механизм отдачи переменной сессии - те нужно взломать аппсерв, тогда в принципе ты получаешь возможность получить доступ к БД, но это вполне удовлетворительно - надо защищать аппсерв.. :)
Вот скажем у нас на аппсервах еще и не то хранится ;)
>> В принципе действительно можно встроить Connection в тэг Frame, кстати, для чего нужен тэг Page - ато мож и туда..
Frame т.е. form? если так то не пойдет, ни кто не мешает на странице объявить несколько таких форм...
Page это из контекста pagecontrol.
<jdbf:pagecontrol>
<jdbf:page>
111
</jdbf:page>
<jdbf:page>
222
</jdbf:page>
<jdbf:page>
333
</jdbf:page>
</jdbf:pagecontrol>
только не забудь css подключить: <link HREF="<%=request.getContextPath().toString()%>/jdbf-content/styles/pagecontrol.css" REL="STYLESHEET" TYPE="text/css">
----------------------
по поводу остальнова втыкаю...
А, это вкладки чтоль? Понятно..
Тогда нужен тэг Connection - однозначно.. Этот тэг предлагаю делать контейнером всей странички..
С выводом в строку статуса, как я уже писал..
тег реализован.