Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема синхронизация java метода на jsp / 2 сообщений из 2, страница 1 из 1
14.08.2007, 12:15:49
    #34726034
siton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема синхронизация java метода на jsp
Здравствуйте уважаемые участники форума. Я хотел бы обратится со следующим вопросом.
Существует некий класс (GetXmlFromSQL) который имеет один статический метод (getXMLDocumentFromSQL), который возвращает строковое значение. Строка представляет собой XML данные. Метод подключается к серверу БД, берет данне и по ним формирует XML дерево.
Вот код этого класса:
=================GetXmlFromSQL.java=================
Код: 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.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
 package  com.pb.analyse;

 import  java.lang.*;
 import  java.util.ArrayList;
 import  java.sql.ResultSet;
 import  java.sql.SQLException;
 import  java.sql.ResultSetMetaData;
 import  java.sql.Connection;
 import  java.sql.Statement;
 import  java.util.Hashtable;
 import  java.util.Date;
 import  java.text.*;
 import  java.util.Properties;
 import  java.sql.DriverManager;

/**
 * <p>Методы формирования списка</p>
 */
 public   class  GetXmlFromSQL  extends  MethodAnalyzeUtils{

  /**
   * dsFromSQL - датасет по которому будет строится XML-дерево
   */
   private  ArrayList dsFromSQL;
   private  ArrayList dsFromSQL1;
   private  ArrayList dsFromSQL2;
   private  String sUID;
   private  Hashtable TableDataSet;
  /** execSQL - запрос который возвращает датасет
   * Датасет должен состоять из двух полей:
   *  1 - ID записи (будет поподать в поле ввода на jsp при выборе из дерева)
   *  2 - Name наименование записи (то что будет отображатся в дереве)
   */
   private  String execSQL;

  /** GetXmlVal aGetXmlVal*/
   private   static  GetXmlFromSQL aGetXmlFromSQL =  null ;
  /**
   * метод getGetXmlFromSQL
   *
   * @return GetXmlFromSQL
   */
   public   static  GetXmlFromSQL getGetXmlFromSQL() {
     if  (aGetXmlFromSQL ==  null ) {
      aGetXmlFromSQL =  new  GetXmlFromSQL();
    }
     return  aGetXmlFromSQL;
  }

  /**
   * метод getXMLDocumentFromSQL 146099 = dend is null
   *
   * @param execName String
   * @param Params String
   * @param Login int
   * @return String
   */
   public   final  String getXMLDocumentFromSQL(String execName, String Params, String Login) {

    if  (execName.equalsIgnoreCase("GetUserTask_add")|| execName.equalsIgnoreCase("GetUserTask")||
       execName.equalsIgnoreCase("GetPodrName")|| execName.equalsIgnoreCase("GetPodrName_add"))
      { sUID=  new  String("");
        sUID=GetParamsStrintg(Params, "uid");
        sUID = sUID.substring(sUID.lastIndexOf("(")+ 1 ,sUID.length()- 1 );
        //System.out.println("sUID="+sUID);
      }


  //Выбираем статьи капитала
    if  (execName.equalsIgnoreCase("GetStat"))
   {
     execSQL="exec get_kod_sv @dat_od='"+DataFormatSQL(GetParamsStrintg(Params, "Dat_od"))+"'";
     dsFromSQL=  new  ArrayList( 0 );
     GetArray(execSQL, dsFromSQL, Login);

    }

       //Выбираем группы подьзователей
     if  (execName.equalsIgnoreCase("GetGrUser") ||
        execName.equalsIgnoreCase("GetGrUser_s"))

    {
    execSQL="select substring(full_name,1,50)+'('+convert(varchar,uid)+')',''"+
            " from ausers where  is_group='Y' and uid<>0";
    dsFromSQL=  new  ArrayList( 0 );
    GetArray(execSQL, dsFromSQL, Login);
    }


    //Выбираем подьзователей
     if  (execName.equalsIgnoreCase("GetUsers") )
    {
    execSQL="exec asGetUsers";
    dsFromSQL=  new  ArrayList( 0 );
    GetArray(execSQL, dsFromSQL, Login);
    }



      //Выбираем доступные задачи
     if  (execName.equalsIgnoreCase("GetUserTask"))
   {  //execSQL="exec asGet_UserMenus @uid="+GetParamsStrintg(Params, "uid")+",@fweb=1";
      execSQL="exec asGet_UserMenus @uid="+sUID+",@fweb=1";
      dsFromSQL=  new  ArrayList( 0 );
      GetArray(execSQL, dsFromSQL, Login);
    }

   //Выбираем доступные подразделения
     if  (execName.equalsIgnoreCase("GetPodrName")){
       //String nGr=GetParamsStrintg(Params, "uid");
       execSQL="select m.s_kod,m.name from apermgr p, main_gr m where p.uid="+
               sUID+" and m.igr=p.igr order by name";
       dsFromSQL=  new  ArrayList( 0 );
       GetArray(execSQL, dsFromSQL, Login);
     }

    //Выбираем недоступные подразделения
    if  (execName.equalsIgnoreCase("GetPodrName_add")){
     //String nGr=GetParamsStrintg(Params, "uid");
     execSQL="exec asGetUser_gr @uid="+sUID;
     dsFromSQL=  new  ArrayList( 0 );
     GetArray(execSQL, dsFromSQL, Login);
     }


    //Выбираем недоступные задачи
     if  (execName.equalsIgnoreCase("GetUserTask_add"))
   {
      execSQL="exec asGet_UserMenus @uid="+sUID+",@fweb=1,@fno=1";
      dsFromSQL=  new  ArrayList( 0 );
      GetArray(execSQL, dsFromSQL, Login);
   }


     //Выбираем подьзователей из специальной группы
     if  (execName.equalsIgnoreCase("GetSpUser")||execName.equalsIgnoreCase("GetSpUser_s"))
    {
    execSQL="select substring(full_name,1,50)+'('+convert(varchar,uid)+')',''"+
           "from ausers where  puid=15325 order by name";
    dsFromSQL=  new  ArrayList( 0 );
    GetArray(execSQL, dsFromSQL, Login);
    }


    //Выбираем доступные задачи
       if  (execName.equalsIgnoreCase("GetTaskName")){
      String nGr=GetParamsStrintg(Params, "Uid");
      execSQL="select t.tid,t.name from apermtasks p,atasks t  where p.uid="+nGr+" and t.tid=p.tid order by ptid,tid";
      dsFromSQL=  new  ArrayList( 0 );
      GetArray(execSQL, dsFromSQL, Login);
      }


     //Выбираем нормативы
     if  (execName.equalsIgnoreCase("GetNormat")){
	String endDt=DataFormatSQL(GetParamsStrintg(Params, "DEND"));
    execSQL="select n.normativ,o.name_obj from spr_norm n,spr_ob o"+
	    "  where (n.dbeg is null or n.dbeg<='"+endDt+
	     "') and (n.dend is null or n.dend>='"+endDt+
	     "') and n.ob<>'*****' and n.ob=o.ob "+"and (o.dbeg is null or o.dbeg<='"+endDt+
	     "') and (o.dend is null or o.dend>='"+endDt+"')"+" and n.normativ<>'HH1'"+
	     " order by n.normativ ";

    dsFromSQL=  new  ArrayList( 0 );
    GetArray(execSQL, dsFromSQL, Login);
    }
      //Выбираем статьи резерва
     if  (execName.equalsIgnoreCase("GetStRez")){
    execSQL="exec Get_SpravRezName_WEB @bizn='99', @dat='"+
        DataFormatSQL(GetParamsStrintg(Params, "DBEG"))+
         "', @dat_e='"+DataFormatSQL(GetParamsStrintg(Params, "DEND"))+"'";
    dsFromSQL=  new  ArrayList( 0 );
    GetArray(execSQL, dsFromSQL, Login);
    }
    //Выбираем статьи резерва для расчета по бизнесам
     if  (execName.equalsIgnoreCase("GetStRezBiz")){
    execSQL="exec Get_SpravRezName_WEB @bizn='0', @dat='"+
        DataFormatSQL(GetParamsStrintg(Params, "DBEG"))+
         "', @dat_e='"+DataFormatSQL(GetParamsStrintg(Params, "DEND"))+"'";
    dsFromSQL=  new  ArrayList( 0 );
    GetArray(execSQL, dsFromSQL, Login);
    }

    //Выбираем банки
     if  (execName.equalsIgnoreCase("GetBanks")){
    execSQL="select bbn_bnmn, bbn_bnmnd from uc_in..bnpb";
    dsFromSQL=  new  ArrayList( 0 );
    GetArray(execSQL, dsFromSQL, Login);
    }
    //Выбираем бизнесы
     if  (execName.equalsIgnoreCase("GetBizn") || execName.equalsIgnoreCase("GetBiznProfit")){
    execSQL="asGet_UserBiznes @dat_od='"+DataFormatSQL(GetParamsStrintg(Params, "DEND"))+"', @login='"+GetParamsStrintg(Params, "login")+"'";
    dsFromSQL=  new  ArrayList( 0 );
    GetArray(execSQL, dsFromSQL, Login);
    }
    //Выбираем продуктов
     if  (execName.equalsIgnoreCase("GetProd")){
      execSQL = "select case when KOD_PROD=0 then -1 else KOD_PROD end as KOD_PROD,NAME_PROD from prod_bizn";
      dsFromSQL =  new  ArrayList( 0 );
      GetArray(execSQL, dsFromSQL, Login);
    }
    //Выбираем уровни подразделений
     if  (execName.equalsIgnoreCase("GetHlevName")){
    execSQL="select hlev,name from spr_hlev order by hlev";
    dsFromSQL=  new  ArrayList( 0 );
    GetArray(execSQL, dsFromSQL, Login);
    }
    //Выбираем операции (новые коды аналитики)
     if  (execName.equalsIgnoreCase("GetNewOp")){
    execSQL="exec Get_NewOp_WEB";
    dsFromSQL=  new  ArrayList( 0 );
    GetArray(execSQL, dsFromSQL, Login);
    }
    //Выбираем коды показателей нормативов по MP
     if  (execName.equalsIgnoreCase("Get_sel_kodMP")) {
         execSQL="select kod,name from spr_kod_mp where kid>0 and isnull(web_an,0)=1 order by kod";
         dsFromSQL=  new  ArrayList( 0 );
         GetArray(execSQL, dsFromSQL, Login);
     }
     //Выбираем банки-контрагенты
        if  (execName.equalsIgnoreCase("GetBankKontr")){
       execSQL="select case when ec7_cna='UA' and isnull(baz,'')<>'' then baz "
           +" else bank end, bank from spr_bank_kg (index spr_bank_kg$cna) "+
          " where ec7_cna='"+GetParamsStrintg(Params, "CNA")+"' order by bank";
       dsFromSQL=  new  ArrayList( 0 );
       GetArray(execSQL, dsFromSQL, Login);
       }
       //Выбираем вид кредитования
        if  (execName.equalsIgnoreCase("VidKredit")){
        execSQL=" select distinct s.newop, l.bl4_OCD  from spr_ankr_newop s, uc_in..l4pb l "+
                " where s.kod_ankr in ('nepr','kr_pr') and l.bl4_oc=convert(char(4),newop) "+
                "  and s.dend>='"+DataFormatSQL(GetParamsStrintg(Params, "Dat_od"))+
                "'  and s.dbeg<='"+DataFormatSQL(GetParamsStrintg(Params, "Dat_od"))+
                "' order by s.newop";
       dsFromSQL=  new  ArrayList( 0 );
       GetArray(execSQL, dsFromSQL, Login);
    }

    System.out.println(execSQL);

  StringBuffer xmlstr =  new  StringBuffer();
 
      for ( int  i =  0 ; i < dsFromSQL.size(); i++)
     {
        if  (((ArrayList)dsFromSQL.get(i)).get( 1 ).toString().indexOf("data")!=- 1 )
       {xmlstr.append("<userdata name='"+((ArrayList)dsFromSQL.get(i)).get(1).toString()+"'>"+((ArrayList)dsFromSQL.get(i)).get( 0 ).toString()+"</userdata>");  continue ;}
       xmlstr.append("\n<item child='0'" +
                    " id='"+((ArrayList)dsFromSQL.get(i)).get(0).toString()+
                    "' text='" +(execName.equalsIgnoreCase("GetBankKontr")?"":
                             "["+((ArrayList)dsFromSQL.get(i)).get(0).toString()+"] ")+
                    ((ArrayList)dsFromSQL.get(i)).get(1).toString()+
                    "' im0=\"analyse_xtree_book_titel.gif\">" +"</item>");
     }
   
   

  return  xmlstr.toString();
 }

  /**
   * метод GetArray
   *
   * @param query String
   * @param data ArrayList
   * @param Login String
   * @return ArrayList
   */
   private  ArrayList GetArray (String query, ArrayList data, String Login) {
    Connection connection =  null ;
     try  {connection = GetConnect(MethodAnalyzeUtils.getNameSystemServer(), Login);}
      catch  (Exception ex) {ex.printStackTrace(); }
    Statement statement =  null ;
     try  {
      statement = connection.createStatement();
      ResultSet rs = statement.executeQuery(query);
       if  (statement.getResultSet() !=  null ) {
         ResultSetMetaData metaData = rs.getMetaData();
          while  (rs.next()) {
            ArrayList row =  new  ArrayList();
             for  ( int  i =  0 ; i < metaData.getColumnCount(); i++) {
            row.add(rs.getObject(i +  1 ));
           }
           synchronized  (data) {
          data.add(row);
           }
         }
      rs.close();
      statement.close();
      connection.close();
    }
   }
     catch  (SQLException ex1) {ex1.printStackTrace(); }
    return  data;
  }

 
  /**
   * метод формирует Hashtable со всеми таблицами, которые вернулись после
   * окончания работы процедуры
   *
   * @param query String
   * @param Login String
   * @return Hashtable
   * @throws SQLException
   * @throws ClassNotFoundException
   */
   private  Hashtable GetTable (String query, String Login)  throws  SQLException, ClassNotFoundException {
    Hashtable TableRezultQuery =  new  Hashtable();
    Connection connection =  null ;
     try  {connection = connection = GetConnect(MethodAnalyzeUtils.getNameSystemServer(),Login);}
     catch  (Exception ex) {ex.printStackTrace(); }

     int  DatasetNumber =  0 ;         //кол-во таблиц возвращаемых запросом
    Statement statement =  null ;
    statement = connection.createStatement();
    statement.executeQuery(query);

     if  (statement.getResultSet() !=  null ) {
       while  (true) {
          ResultSet rs = statement.getResultSet();
          ResultSetMetaData metaData = rs.getMetaData();
          ArrayList data =  new  ArrayList();
          ArrayList columnName =  new  ArrayList();
          ArrayList columnType =  new  ArrayList();
          ArrayList columnDisplaySize =  new  ArrayList();
           if  (rs !=  null ) {

             for ( int  i= 0 ; i<metaData.getColumnCount(); i++) {
               boolean  f = !(metaData.getColumnLabel(i+ 1 ).equalsIgnoreCase("")) ?
                  columnName.add(metaData.getColumnLabel(i+ 1 )) : columnName.add("field" + (i+ 1 ));
               Class  type =  Class .forName(metaData.getColumnClassName(i+ 1 ));
              columnType.add(type);
              columnDisplaySize.add( new  Integer(metaData.getColumnDisplaySize(i+ 1 )));
            }

            data.add(columnType);        //строка с типами полей
            data.add(columnDisplaySize); //строка с шириной полей
            data.add(columnName);        //строка с именами колонок

             while  (rs.next()) {
              ArrayList row =  new  ArrayList();
               for  ( int  i =  0 ; i < metaData.getColumnCount(); i++) {
                row.add(rs.getObject(i +  1 ));
              }
               synchronized  (data) {
                data.add(row);
              }
            }
            TableRezultQuery.put( new  Integer(DatasetNumber), data);
            DatasetNumber++;
          }
          rs.close();
           if  (statement.getMoreResults())  continue ;
           else   break ;
      }

    }
    statement.close();
    connection.close();
     return  TableRezultQuery;
  }

  /**
   * GetConnect
   *
   * @param srName String
   * @param Login String
   * @return Connection
   */
   private   static  Connection GetConnect (String srName, String Login)
    {
      String url="";
      url = MethodAnalyzeUtils.getSQLSrvUrl (srName);

       Properties prop =  new  Properties();
       prop.setProperty("user", "siton");
       prop.setProperty("password", "siton");
       prop.setProperty("applicationname","EAS_"+Login);
       Connection connection =  null ;
      // com.sybase.jdbc2.jdbc.SybDriver driver = new com.sybase.jdbc2.jdbc.SybDriver();
       try  {
       // DriverManager.registerDriver(driver);
       com.sybase.jdbc3.jdbc.SybDriver driver =  new  com.sybase.jdbc3.jdbc.SybDriver();
       DriverManager.registerDriver(driver);
        connection = DriverManager.getConnection(url, prop);
      }
       catch  ( SQLException ex){ return   null ;}

       return  connection;
  }

}

Метод этого класса используется на jsp странице, которая при обращении к ней возвращает XML-документ.
Вот код jsp страницы:
========GetSQLXML.jsp==================
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<%="<?xml version=\"1.0\" encoding=\"UTF-8\"?>"%>
<%@page contentType="text/xml; charset=UTF-8"%>
<%request.setCharacterEncoding("UTF-8");%>
<%@page buffer="256kb"%>
<%@page  import ="com.pb.analyse.*"%>
<%@page  import ="java.util.Enumeration"%>
<%
    String execName= new  String();
    execName= request.getParameter("execName");
    Enumeration menum = request.getParameterNames();
    String par_str =  new  String();
    String cur_par_name =  new  String();
     while  (menum.hasMoreElements()) {
      cur_par_name = menum.nextElement().toString();
       par_str = par_str + java.net.URLDecoder.decode(cur_par_name, "CP1251") + "=" +
                  java.net.URLDecoder.decode(request.getParameter(cur_par_name).toString(), "CP1251") + "&";
   }
%>
<%="\n<tree id=\"0\">"%>
<%="<item id=\"998\" text=\"Весь список\" open=\"1\">"%>
<%=GetXmlFromSQL.getGetXmlFromSQL().getXMLDocumentFromSQL(execName,par_str, session.getAttribute("log").toString())%>
<%="\n</item>"%>
<%="\n</tree>"%>
Проблема в том что при одновременном обращении к этой странице она не всегда возвращает XML дерево.
Я предполагаю что необходимо при обращении к jsp странице создавать каждый раз новый экземпляр класса либо синхронизировать метод getXMLDocumentFromSQL. Посоветуйте пожалуйста правильное решение.
...
Рейтинг: 0 / 0
14.08.2007, 13:43:18
    #34726478
siton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема синхронизация java метода на jsp
Все я разобрался - нужно было синхронизировать метод который отдает экземпляр класса (getGetXmlFromSQL())
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема синхронизация java метода на jsp / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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