powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / создание независимых потоков на EAS
1 сообщений из 1, страница 1 из 1
создание независимых потоков на EAS
    #34107445
arbak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с проблемой:-
Есть jsp которая вызывает метод addTask статического класса TaskManager:

Код: plaintext
1.
TaskManager.getInstance().addTask(session.getAttribute("log").toString(), 
request.getParameter("sTask").toString(), par_str);

Этот метод добавляет в массив (хранящийся в памяти EAS) строку с параметрами,
необходимую для выполнения хранимой на sql-сервере процедуры, а затем вызывает конструктор класса
LogicTasksExecute:

Код: plaintext
 new  LogicTasksExecute(Login, dTime, sTask, sParams);

В конструкторе класса LogicTasksExecute идет проверка параметра sTask:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 public  LogicTasksExecute(String Login,  long  Time, String sTask, String ParametersForm) {
 this .Login = Login;
 this .Time = Time;
 this .sTask = sTask;
 if  (sTask.equalsIgnoreCase("miHelp")) miHelp(ParametersForm);
 if  (sTask.equalsIgnoreCase("miMiscViewOemF")) miMiscViewOemF(ParametersForm);
 if  (sTask.equalsIgnoreCase("miGetVersion")) miGetVersion(ParametersForm);
}

и после вызывается соответствующий метод, в котором создается экземпляр класса RunTasks,
инициализирующего поток для выполнения экзека sql-процедуры:

Код: plaintext
1.
2.
 private   void  miHelp(String ParametersForm) {
 new  RunTasks(Login, Time, sTask, "exec aMenusNameNotPmid", ParametersForm);
}

Конструктор класса RunTasks выглядит так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 public  RunTasks(String Login,  long  Time, String sTask, String StringExecuteProc, String Params) {
 this .NameThread = Login + sTask + Time;
 this .Time = Time;
 this .Login = Login;
 this .sTask = sTask;
 this .StringExecuteProc = StringExecuteProc;
 this .Params = Params;
 new  Thread( this , NameThread).start();
}

В методе run() класса RunTasks создается коннект к sql-серверу через
ConnectionCaches EAS-а и запускается экзэк процедуры. После этого меняются значения
полей на конкретную задачу в статическом массиве (устанавливается статус "Выполнено", время выполнения и т.д.).

Метод run() класса RunTasks выглядит так:

Код: 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.
 public   void  runn() {
Connection connection =  null ;
 try  {
connection = MainSQLRequests.getConnection();
/* это метод getConnection для инициализации коннекта к sql-серверу
public static Connection getConnection() throws Exception {
    try {
      InitialContext context = new InitialContext();
      DataSource ds = (DataSource) context.lookup(
          "java:comp/env/jdbc/AnalyseConnectionCache");
      if (ds == null) {
        throw new Exception("no mapping connection cache");
      }
      Connection con = ds.getConnection();
      if (con == null) {
        throw new Exception("no empty connections");
      }
      return con;
    }
    catch (Exception ex) {
      throw new Exception("no empty connections");
    }
  }
*/
statement = connection.createStatement();
AllDatasetResult = GetTable(StringExecuteProc);
}  catch  (Exception ex) { }

 for  ( int  i =  0 ; i<( (ArrayList) TaskManager.getInstance().TaskList.get(Login)).size();i++) {
 if  ( ( (ArrayList) ( (ArrayList) TaskManager.getInstance().TaskList.get(Login)).get(i)).get( 3 ).equals( new   Long (Time))) {
//устанавливаем время завершения работы процедуры
( (ArrayList) ( (ArrayList) TaskManager.getInstance().TaskList.get(Login)).get(i)).set( 3 , new   Long ( (System.currentTimeMillis() - Time)));
//устанавливаем статус "Выполнено - 1"
( (ArrayList) ( (ArrayList) TaskManager.getInstance().TaskList.get(Login)).get(i)).set( 2 ,  new  Integer( 1 ));
}
}
//для построения отчета
 new  CreateReportInFile(getHashtable(), sTask, Params);
}

При создании нового потока падает служба Jaguar EAS-а.
EAS в свой лог пишет следующее:

180908-Thread::threadData: tml_keydata_get() failed

Пробовал создавать коннект не используя пул EAS-а:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
String url = "jdbc:sybase:Tds:10.1.101.67:5000";
    Properties prop =  new  Properties();
    prop.setProperty("user", "ufr30");
    prop.setProperty("password", "ufrufr");
    Connection connection =  null ;
     try  {
      connection = DriverManager.getConnection(url, prop);
      statement = connection.createStatement();
       try  {
        //метод формирования Hashtable всех таблиц возвращенных процедурой
        AllDatasetResult = GetTable(StringExecute);
      }
       catch  (ClassNotFoundException ex) {  }
       this .statement.close();
      connection.close();
    }
     catch  (SQLException ex1) {  }

все работает нормально!

Скажите пожалуйста, почему падает служба, и
подскажите как правильно организовать коннект к sql-серверу в отдельном потоке используя Connection cache EAS
(создать пул независимых потоков на EAS) для выполнения экзэка sql-процедуры?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / создание независимых потоков на EAS
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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