Конференция "Sybase"

Обсуждение вопросов, связанных с компанией 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-процедуры?
Ответить на сообщение »
 

Добавить сообщение »
Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/iservices/messages.asp?forumId=593&topicId=53