Обсуждение вопросов, связанных с компанией Sybase, ее продуктами Adaptive Server, PowerBuilder, PowerDesigner, SQL Anywhere и др.
Тема: EAServer. Создание независимых потоков на EAServer
Автор:
fdssdsfdsfds
|
Дата: 29.07.2012 18:20 |
|
[открыть ссылку] поисковое продвижение [/url] [url=[открыть ссылку] поисковое продвижение [/url] <a href="http://XN-CTBBHDDAGMFCP1CDCBCJIUN.XN-P1AI"> поисковое продвижение </a> <a href="http://поисковое-продвижение.рф"> поисковое продвижение </a> |
Ответить на сообщение » |
Автор:
Artem
|
Дата: 26.09.2006 15:24 |
|
Столкнулся с проблемой:- Есть jsp которая вызывает метод addTask статического класса TaskManager:
TaskManager.getInstance().addTask(session.getAttribute("log").toString(), request.getParameter("sTask").toString(), par_str);
Этот метод добавляет в массив (хранящийся в памяти EAS) строку с параметрами, необходимую для выполнения хранимой на sql-сервере процедуры, а затем вызывает конструктор класса LogicTasksExecute:
new LogicTasksExecute(Login, dTime, sTask, sParams);
В конструкторе класса LogicTasksExecute идет проверка параметра sTask:
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-процедуры:
private void miHelp(String ParametersForm) { new RunTasks(Login, Time, sTask, "exec aMenusNameNotPmid", ParametersForm); }
Конструктор класса RunTasks выглядит так:
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 выглядит так:
public void runn() { Connection connection = null; try { connection = MainSQLRequests.getConnection(); 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); }
Для построения отчета по выполненной процедуре выполненной процедуре вызывается конструктор класса CreateReportInFile:
public CreateReportInFile(Hashtable TableDataSet, String sTask, String Params) { if (sTask.equalsIgnoreCase("miHelp")) miHelp(TableDataSet, Params); if (sTask.equalsIgnoreCase("miMiscViewOemF")) miMiscViewOemF(TableDataSet, Params); if (sTask.equalsIgnoreCase("miGetVersion")) miGetVersion(TableDataSet, Params); }
public void miHelp(Hashtable TableDataSet, String Params) { // System.out.println(); }
При создании нового потока падает служба Jaguar EAS-а. EAS в свой лог пишет следующее:
180908-Thread::threadData: tml_keydata_get() failed 180908-Thread::threadData: tml_keydata_get() failed 180908-Thread::threadData: tml_keydata_get() failed
Скажите пожалуйста, почему падает служба, и подскажите как правильно организовать старт потока для выполнения экзэка sql-процедуры? |
Ответить на сообщение » |