Menu

Connection

2008-07-24
2013-04-19
  • Andrey Muravyov

    Andrey Muravyov - 2008-07-24

    А 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 вместо твоих параметров..

     
    • Dmitry Korotin

      Dmitry Korotin - 2008-07-24

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

       
      • Andrey Muravyov

        Andrey Muravyov - 2008-07-24

        Я смотрю DriverManager тоже может полный jdbc адрес принимать (те вместе с юзером и паролем)
        Предлагаю для дальнейшего удобства тестирования брать этот адрес (connectString) из сессии. Мой фильтр сможет ее туда засунуть. pageContext в этом случае не нужен, тк у меня проверка выполняется не в jsp а в фильтре. Согласен?

        Если согласен, говори, как будет параметр в сессии называться? напр "conn"

         
    • Andrey Muravyov

      Andrey Muravyov - 2008-07-30

      Диман, что мне лучше приделать в DBConnection, чтобы фреймворк брал строку коннекта из сессии?
      У меня она будет храниться в следующем виде:
      String conn = "jdbc:oracle:thin:mlc/mlc@//192.168.0.208:1521/tstdb";
      session.setAttribute("conn", conn);

       
      • Dmitry Korotin

        Dmitry Korotin - 2008-07-30

        нужно передать в OpenConnection реквест <OpenConnection(HttpServletRequest request)> и брать коннекшн так:
        <this.conn = request.getSession().getAttribute("conn");>

         
        • Andrey Muravyov

          Andrey Muravyov - 2008-07-30

          Ты не хочешь навсегда так сделать?

           
          • Dmitry Korotin

            Dmitry Korotin - 2008-07-31

            у меня пока не определенность с коннектом, я не пойму как его использовать, класс DBConnection писался для получения коннекта при тестировании компонентов, как это должно быть на самом деле я ума не приложу. могу конечно переделать как ты просишь, но тогда мне придется делать сервлет который будет пихать конн. в сессию, мне пока это не удобно, поэтому предлагаю каждому остаться при своей организации связи с БД. такой ваиант устраивает? а потом - ближе к финалу подумаем как всетаки это сделать. возможно это будет отдельный тег <jdbf:connection>.

             
            • Andrey Muravyov

              Andrey Muravyov - 2008-07-31

              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-ю строку
              А дальше тогда посмотрим..

               
              • Dmitry Korotin

                Dmitry Korotin - 2008-08-05

                >> Вставляем
                >> 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);

                сделал.

                 
    • Andrey Muravyov

      Andrey Muravyov - 2008-07-31

      А, ну и забыл сказать про StatementTag - там в вызове OpenConnectin нужно будет поменять контекст на реквест..

       
    • Dmitry Korotin

      Dmitry Korotin - 2008-07-31

      >>1. Что это за финал, о котором ты говоришь? :)
      я имею ввиду тот момент когда мы наконец получим основной перечень тегов с которыми можно будет комфортно работать и развивать их дальше :)

      >> 2. Отдельный тэг нужно будет встраивать.........................................
      пару вопросов:
      как на данный момент у тебя сделанна организация открытия/закрытия коннекта?
      ты используешь пул, или коннект постояннен все http сессию?

      >> 3. Для удобства тестирования и с моей и с твоей.............

      ок поправлю на досуге.
      -------------------------------------------

      почему я хочу отдельный тег:
      1) ловить коннест из сессии забота не стейтмента
      2) есть явное открытие и освобождение коннекта при пуловой организации, кто кроме тега <connection> должен заботится об освобождении соединения с БД?!

      тег <connection> точно также как ты и хотел будет брать соединение из http сессии, как мне кажется он больше подходит на эту роль. давай еще подумаем, чем все это может грозить или наоборот...

       
    • Andrey Muravyov

      Andrey Muravyov - 2008-07-31

      В принципе действительно можно встроить Connection в тэг Frame, кстати, для чего нужен тэг Page - ато мож и туда..
      Короче смысл в том, чтобы отображать типа в строке статуса имя юзера и базы и кнопку со ссылкой на logon.jsp для переконнекта..

       
    • Andrey Muravyov

      Andrey Muravyov - 2008-07-31

      В этом случе соединение будет браться 1 раз на страницу из пула и закрываться по окончании генерации form или page - смотря чего там по идеологии..

       
    • Andrey Muravyov

      Andrey Muravyov - 2008-07-31

      А грозить это может следующим:
      Злоумышленник может перехватить идентификатор сессии и сформировать http запрос таким образом, чтобы сервер отдал ему переменную в сессии..
      Это чисто теоретически..
      На самом деле для этого на аппсерве должен быть соответствующий механизм отдачи переменной сессии - те нужно взломать аппсерв, тогда в принципе ты получаешь возможность получить доступ к БД, но это вполне удовлетворительно - надо защищать аппсерв.. :)
      Вот скажем у нас на аппсервах еще и не то хранится ;)

       
    • Dmitry Korotin

      Dmitry Korotin - 2008-07-31

      >> В принципе действительно можно встроить 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">
      ----------------------

      по поводу остальнова втыкаю...

       
    • Andrey Muravyov

      Andrey Muravyov - 2008-07-31

      А, это вкладки чтоль? Понятно..
      Тогда нужен тэг Connection - однозначно.. Этот тэг предлагаю делать контейнером всей странички..
      С выводом в строку статуса, как я уже писал..

       
      • Dmitry Korotin

        Dmitry Korotin - 2008-11-13

        тег реализован.

         

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.