Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / создание независимых потоков на EAS / 1 сообщений из 1, страница 1 из 1
06.11.2006, 17:49:45
    #34107445
arbak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание независимых потоков на EAS
Столкнулся с проблемой:-
Есть 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
Форумы / Java [игнор отключен] [закрыт для гостей] / создание независимых потоков на EAS / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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