powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вложенная Жава в DB2, возможно?
38 сообщений из 38, показаны все 2 страниц
Вложенная Жава в DB2, возможно?
    #32691411
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем. Помогите пожалуйста.
Говорят что в DB2 можно создать таблицу куда будут засовыватся Java.class
файлы, такое возможно? Если да, то возникает следующий вопрос:

Как можно вне DB2 из Жава проги вызвать эти откомпилированные класс файлы из таблицы и запустить через эту прогу их?
Спазибо заранее.
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32691940
hgst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такое возможно в любой BLOB засунуть в любой базе

Создать свой ClassLoader загрузить массив байт - представить их как класс и запустить на выполнение.

For ex (classloader):
http://www.panix.com/~mito/articles/articles/classloader/j-classloader-ltr.pdf
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32692888
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ясно, но остается вопрос, а разве можно допустим читать с Жава class файл и залить в таблицу? Ведь class файл это не текстовый файл.
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32692925
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая разница между текстовым файлом и жаба классом? или рисунком? или видео? В BLOB можно залить любые данные.
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32694910
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ясно, но почему то моя прога не заливает его, вот пример:
.................
..............
Чтение файла и присвайвание к переменной:

FileReader FR = new FileReader("example.class");
BufferedReader BR = new BufferedReader(FR);
while ( (s = BR.readLine()) != null) {
gr += "\n" + s;
}

или надо байтовое чтение из файла?
..................
................
Заливка таблицы:
Connection conn = DB2Connector.getConnect();
Statement stmt = conn.createStatement();
stmt.executeUpdate("Insert Into DBName.table1 Values(' " + gr + " ' )");

// Здесь в таблице table1 тип поле BLOB
...........
Так он не работает, пишет ошибку:

com.ibm.db2.jcc.b.SQLException: bug check

Что делать?

А после того как я залил допустим, и вытащил из таблицы обратно значение, потом как поступить? сохранить в файл и расширение сделать class?
Вот этот момент меня настораживает
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32695023
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
keyword:
Statement::setBlob(int i, Blob x);

2 all.
Помогите разобраться с этим:
http://www.sql.ru/forum/actualthread.aspx?tid=122623
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32695526
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Statement::setBlob(int i, Blob x);
Что бы интересно это означало?
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32695541
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Воабще у меня задача стоит такая:
Надо написать прогу которая работала бы под OS390.
Прога должна вызывать из таблицы class файл и запускал его. В свою очередь этот файл что то выполняет.
1. Залить в DB2. Каким методом?
2. Вызывать class файл и запускать его.
Если чесно я никогда не вызывал из таблицы class файл и не запускал, по этому для меня это новинка.
Я бы попросил кого нибудь знающего, хотя бы коротко написать эти два шага.
Как надо реализовывать такую задачу и как запускать. Хотя бы коротко.
Помогите!!!
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32695653
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VortexCorbaStatement::setBlob(int i, Blob x);
Что бы интересно это означало?
Извиняюсь не Statement конечно а PreparedStatement:
Код: plaintext
1.
2.
3.
4.
5.
String updatequery="update table set image=? where id=1";
PreparedStatement stmt=conn.prepareStatement(updatequery);
Blob myimage;
....
stmt.setBlob(1, myimage);
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32695761
hgst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот тебе пример - сохраняет массив байт.
Blob - интерфейс который, делает то же самое. Но для него нужно написать реализацию или пользоваться существующей.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    
     PreparedStatement pstmt =  
         conn.prepareStatement 
            ("INSERT INTO XXX (X) VALUES(?)"); 
     ByteArrayInputStream bais =  
         new ByteArrayInputStream(something);  // от массива байт
      pstmt.setBinaryStream( 1 ,bais, length); 
      pstmt.executeUpdate(); 
Этот код сохраняет массив байт. Class файл - это двоичные файлы - их читать именно как массив байт а не Reader-ом.
К примеру:
[src] byte[] data = new byte[(int) (new File(key).length())];
new FileInputStream(key).read(data);
[src]
Читать из базы - ResultSet.getBytes - дальше ClassLoader - смотри пример выше по ссылке
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32696812
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спаибо всем
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32697650
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще есть примеры у кого? Рад буду посмотреть
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32697889
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть еще вопрос:
Какой вид ниже перечисленных программ лучшее:
1. Есть прога которая из таблицы вытаскивает нужный класс файл и запускает его. Все это под OS390 работает.
2. Есть прога которая запускает класс файл из папки. т.е файл лежит в папке.
Есть ли разница? Эффективность? Еще что нибудь?
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32699763
hgst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Описал бы задачу :)
А то сложно сказать - пункт 1 требует установки дб2 а это стоит денег. Во втором вроде по описанию не требуется - можно их и сэкономить :)

Если смотреть с точки зрения производительности - то чтобы зачитать класс из БД требуется больше операций чем в случае с файловой системой. Опять же если их (классов) много - то время поиска по файловой системе в каталоге (предположительно) линейное - а в базе (может быть) логарифическое от числа файлов. Т.е. при определенном N...

Если серьезно - это довольно специфический подход - написание собственного класслоадера - есть конечно задачи где это требуется и для этого есть причины - но это все же не такой большой круг задач. Имхо, в подавляющем большинстве случаев это не нужно делать.
Давай описание задачи - может там все на порядок проще решается
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32699892
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть прога, скажем Диспечер.
Есть DB 2. Насчет этого все ок
Он следит за таблицей куда падают какие то данные, у каждого падающего в таблицу данного есть скажем номер. По этому номеру Диспечер запускает соответствующий файл(class файл)
Вот теперь вопрос:
Стоит ли ради этого пихать в БД класс файлы или нет?
Или пусть с папки запускает?
Таких класс файлов будет 300 ровно.
Но все это под OS390 работает, это может привести к затруднениям во время запуска файлов из БД, а из папки они без проблем могут запускатся. Вот чего я боюсь.
Допустим напишу проги для всех 300 обьектов(Я не один конечно, 15 программеров).
И залю всю эту приблуду в таблицу, я все это пишк пока на WindowsXP
И иду спокойно на OS390 b запускаю диспечер, и вдруг ошибка еще 200 ошибок. Вот теперь сиди и расхлебывай все это дерьмо.
А из папки все таки легче.
Как думает Народ?
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32699959
Фотография Новый Год
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорри за оффтоп, java на 390 работает? .
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32700179
Aion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 VortexCorba
Насовсем понятно зачем Вам все это?!
Примерно выглядит типа как запахивать .exe файлы в базу, а потом их "запускать". И зачем? В чем смысл то?


2 Новый Год
http://www-1.ibm.com/servers/eserver/zseries/software/java/
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32700219
Фотография Новый Год
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aion, я споросил спросил про то, можно ли счтитать j2ee на 390 нормально функционирующей :)
WebSphere на 390 доступно для меня, хотя я под нее и не пишу. но зато поспоянно слышу комментарии коллег:)
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32700362
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что действительно что ли такие проблемы? А как обстоят дела для WebSphere for AS/400?
Мы сейчас ожидаем заключения контракта, который полностью ориентирован на WebSphere, отсюда и интерес.

зы. У меня на АСке жаба работает нормально, правда не под WebSphere, а под Domino и правда тоже не Ж2ИИ :).
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32700391
hgst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имхо:
Пихать это добро в базу не следует - просто нет никакого смысла. Просто завести конфигурационный файл который по номеру записи (назовем к примеру transaction id) будет инстанциировать определенный класс и запускать его. Положить все в один jar файл и не мучится.
Диспетчер такой пишется за день-два. Если возникнет необходимость он легко переносится на отдельную машину (чтобы не совмещать БД и приложение).
Сам по себе интересен вопрос нотификации что поступили новые данные. Как это будет выглядеть? При желании можно просто посмотреть может что-либо из существующих реализаций подходит.

Что еще смущает:
авторДопустим напишу проги для всех 300 обьектов(Я не один конечно, 15 программеров). И залю всю эту приблуду в таблицу, я все это пишк пока на WindowsXP
Немного смущает такой подход... Т.е. насколько я понимаю задачи будут похожие - наверняка можно обобщить какие-то операции, написать какую-то общую библиотеку для обработки Или что-то подобное - а то писать 300 обработчиков - или все операции настолько уникальны?
Можно вкратце какого рода обработка будет?
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32701092
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обработка будет как сказать обработка сообщении которые падают в концентратор а оттуда другая пога берет и заливает в таблицу, не давно написали прогу которая уже залитые в таблицу сообщения проверяют по конкретным параметрам(используя рег. выр) и заливает в еще другую таблицу.
Ав от последняя таблица уже чиста сообщения. Теперь надо завершающую прогу написать которая бы обрабатывала эти сообщения по номерам сообщении. к примеру: 200 - сообщ. Диспечер вызвает прогу для обр. 200 сообщ. и т.д.и.т.п
Короче все это в одну прогу незя, да проффесиональняй подход это делить прогу на части типа.
Короче, какая из них будет потом под OS390 труднее. Загрузка в табицу и оттуда вытаскивать и запускать класслоадеером?
или из jar файла вытаскивать и запускать прогу?
Еще момент если поступят новые сообщ. как мы поступим? Ну можно в jar пихнуть новый файл, но тода теряем автоматизацию, с другой стороны из таблицы в OS390 вытаскивать и запускать для меня немношко страшно, чувствую какой то подмох.
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32701408
Aion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Новый Год

Sorry, не совсем я понял что имелось ввиду...
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32701435
hgst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В jar будет проще. Если что-то новоя появится то переложить jar и перезапустить сервер будет достаточно просто. Автоматизировать это также легко - или скриптом в системе или, если хочется делать удаленно, можно через ant - к примеру: при наличии ftp + telnet/ssh можно написать скрипт под ant который будет доставать последние исходники из системы контроля версий, компилировать, паковать, заливать по ftp на сервер и через telnet делать рестарт. Это к вопросу о выкладывании нового кода.
Если требуется динамическая загрузка классов, можно взять готовый контейнер, который ее поддерживает и писать для него компоненты-обработчики событий. Что-либо вроде phoenix справится вполне.
Чем решение с использованием сервера не нравится - скорость ниже, если класс ссылается на другие классы залитые в таблицы, то необходимо устанавливать этот класслоадер для потока обработчика. Если тот запрашивает новый класс тогда искать его сначала в таблицах БД, если не найден - передавать управление класслоадеру верхнего уровня. Т.е. сделать так конечно можно, и работать будет, только зачем так усложнять? В любом случае если понадобятся новые библиотеки или еще что - потребуется перезапуск контейнера обработчиков. Да и трудно представить решение где 1 обработчик = 1 классу. Разве что они просто дико примитивны - но тогда наверняка можно их обобщить.
[q]Короче все это в одну прогу незя, да проффесиональняй подход это делить прогу на части типа.[/q] 1 сlass file не есть прога. Прога здесь - это система обработки в целом :) а конкретный класс - просто обработчик определенного сообщения. И все же стоило бы поискать в них общее что-либо. А то 200 хэндлеров и все с нуля писать... или даже копи-пастом... не дело это, имхо.
Для увеличения эффективности обработки пул потоков поставить - обрабатывать параллельно несколько задач.
А обработка сама какого рода?
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32701456
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тоже придерживаюсь такого мнения, но поробуйте наших переубедить. Самое интересное это то что они никто из них не писал никогда класслоадер и хотят чтобы я написал, я бы написал, но эффективности не вижу. Нет никакой пользы, они говорят что если из таблицы то можно новую обработку только в таблицу залить и все. А с jar файлом тоже самое будет, я уверен. Перезапуск диспечера токо нада.
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32701648
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно такое:
import java.io.IOException;

public class LocalClassLoader {
public static void run(String classFile) throws IOException {
Process p = Runtime.getRuntime().exec("java " + classFile);
p.waitFor();
System.out.println("File was runned");
int ret = p.exitValue();
}
public static void main(String args[]) throws IOException {
String className = "Outer";
run(className);
}
}
Можно запускать java компилятор указывая класс файл который запустится?
Знаю что javac можно использовать для компиляции.
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32702160
hgst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Писать так конечно можно, только есть это большое извращение...
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32702688
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А я писал, java компилятор запускается, но файл которого он запускает ничего не делает, у меня он должен был записать в текстовый файл что то, но он не сделал ничего. Почему?
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32702694
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И к тому же разве нельзя сделать как нибудь так:
Один раз запустишь компилятор а потом с изменением файлов он запускает эти файлы, но сам не перезапускается?
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32703138
hgst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
???
А в чем проблема сделать приложение, откомпилировать, оттестировать и запустить нормально, а не компилировать из приложения? Изгаляться конечно можно как угодно, но я не помню, чтобы, к примеру на С/Pascal при вызове, чекали исходник, если изменился, запускали компилятор, линковщик а затем через exec(...) получившийся exe-файл.
java.exe - не компилятор, это рантайм. Компилятор - javac
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32703365
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изянки, я имел ввиду что почему то у меня уже откомпилированный класс файл через прогу вызовом java рантайма не работает. Почему?
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32704123
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написал ClassLoader, возникла такая проблема:
1.Class cl = Class.forName("TestModule", true, loader);
Передает методу loader класс файл.
Это когда и главнаый и файл которого по байтам будут читать находятся в одной папке.
А так писать почему то незя:

Class cl = Class.forName("C:/TestModule", true, loader);
т.е когда файл находится в другой папке он сразу кричит:
FileNotFoundException....
А как сделать чтобы он из любой папки запускал?
И воаще я собраюсь из БД вытаскивать файл, он в байтовом массиве придет, а моя прога не только байтовый массив, даже из другой папки класс файл не может запустить, что за фигня?
есть еще такой момент:
ResultSet rs = stms.executQuery(select classfile from table1);
....допустим
выводит так:
while(rs.next) {
System.out.println(rs.getBytes(1));
}

СТОП!!! А как теперь все это добро которое вышло из таблицы присвоить к какой то перемекной притом массиву байтов?
Как делается такая фигня?
Допустим кто то подскажет как получить файл и пихнуть в байт массив, а прога то прога моя не примет байт массив, он токо класс файлы принимает.
Кто что подскажет?
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32704320
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если требуется динамическая загрузка классов, можно взять готовый контейнер, который ее поддерживает и писать для него компоненты-обработчики событий. Что-либо вроде phoenix справится вполне.

1. phoenix - что такое?
2. он работает под OS 390?
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32705326
hgst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А так писать почему то незя:

Class cl = Class.forName("C:/TestModule", true, loader);
т.е когда файл находится в другой папке он сразу кричит:
FileNotFoundException....
А как сделать чтобы он из любой папки запускал?

В classpath папку добавить из которой грузить файлы надо.


СТОП!!! А как теперь все это добро которое вышло из таблицы присвоить к какой то перемекной притом массиву байтов?
Как делается такая фигня?

Метод ClassLoader.defineClass( ... );


1. phoenix - что такое?
2. он работает под OS 390?

Контейнер для объектов написанных на java с некоторыми полезными свойствами. Лежит на jakarta.apache.org. Сам не зпускал, но скорее всего работает, раз там java есть
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32705418
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильно, я знаю что можно пользоватся этим:
автор
Метод ClassLoader.defineClass( ... );

Уже пользуюсь. Но если для того чтобы понять мою проблему все таки придется выставить весь код, аот он:
Это код ClassLoader - а:
Код: 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.
import java.io.*;
public class DynamicClassOverLoader extends ClassLoader{
  private java.util.Map classesHash = new java.util.HashMap();

  public final String[] classPath;
  public DynamicClassOverLoader(String[] classPath) {
    this.classPath = classPath;
  }
  protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
    Class result = findClass(name);
    if (resolve) resolveClass(result);
    return result;
  }

  protected Class findClass(String name) throws ClassNotFoundException {
    Class result = (Class)classesHash.get(name);
    if (result != null) {
      System.out.println("% Class" + name + "found in cache");
      return result;
    }
    File f = findFile(name.replace('.','/'),".class");
    System.out.println("% Class " + name + (f==null?"":" found in " + f));
    if (f == null) {
      return findSystemClass(name);
    }
    try {
      byte[] classBytes = loadFileAsBytes(f);
      result = defineClass(name, classBytes,  0 , classBytes.length);
    } catch(IOException e){
      throw new ClassNotFoundException("Cannot load class " + name + ": " + e);
    } catch (ClassFormatError e) {
      throw new ClassNotFoundException("Format of class file incorrect for class " + name + ": " + e);
    }
    classesHash.put(name, result);
    return result;
  }
  protected java.net.URL findResource(String name) {
    File f = findFile(name, "");
    if (f == null) return null;
    try {
      return f.toURL();
    } catch(java.net.MalformedURLException e) {
      return null;
    }
  }
  private File findFile(String name, String extension){
    for (int k =  0 ; k < classPath.length; k++) {
      File f = new File((new File(classPath[k])).getPath() + File.separatorChar + name.replace('/',File.separatorChar) + extension);
      if (f.exists()) return f;
    }
    return null;
  }
  public static byte[] loadFileAsBytes(File file) throws IOException {
    byte[] result = new byte[(int)file.length()];
    FileInputStream f = new FileInputStream(file);
    try {
        f.read(result,  0 , result.length);
    } finally {
      try {
        f.close();
      } catch(Exception e) {
      }
    }
    return result;
  }

}
А вот код главного класса который вызывает ClassLoader когда получил какой то класс файл которого нужно запускать, в моем случае это TestModule файл.

Класс Main:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
import java.io.*;
public class Main{
  public static void main(String[] argv) throws Exception {
    for(;;){
      ClassLoader loader = new DynamicClassOverLoader(new String[] {"."});
      TestModule tm = new TestModule();
        Class clazz = Class.forName(tm.toString(), true, loader);
        Object object = clazz.newInstance();
        System.out.println(object);
        new BufferedReader(new InputStreamReader(System.in)).readLine();
    }
  }
}
Если внимательно присмотрется то можно увидеть что прога делает:
1. Main класс вызывает метод loader, ему передает класс файл через forName()
А дальше что он делает? Кто нибудь опишите по коду DynamicClassOverLoader
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32705469
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
надо написать прогу которая реагировала бы на изменение в таблице.
Можно сделать бесконечный цикл который вечно проверяет таблицу. Но мне кажется это не решение. От такого цикла прога может заглючить, захлебнутся. Какаво ваше мнение?
Как можно выйти из такой ситуации?
Есть альтернативный вариант?
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32707276
hgst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это несложно. К примеру пусть у тебя каждый обработчик имплементирует общий интерфейс. Например:

Код: plaintext
1.
2.
3.
4.
public interface MessageHandler
{
  void perform(HandlerContext ctx) throws Exception;
}

Поэтому в том месте где ты получил объект просто пишешь, с учетом того что все они имеют метод perform(...):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
.....
  Object o = class.newInstance();
  if (o instanceof MessageHanlder)
  {
     ((MessageHandler)o).perform(...);
  }
....
Идея в общем такая - все довольно просто.

От бесконечного цикла прога конечно не загнется. Можешь job запускать через определенное время который будет это делать. Это все тоже от условий задачи зависит. Как часто нужно это запускать? Это real-time обработка или можно отложить выполнение на некоторое время?
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32707716
VortexCorba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это real-time.
автор
public interface MessageHandler
{
void perform(HandlerContext ctx) throws Exception;
}
.....
Object o = class.newInstance();
if (o instanceof MessageHanlder)
{
((MessageHandler)o).perform(...);
}
....

Ивини, но я никогда этими не пользовался, если не трудно суть обясни, в чем заключается такое программирование?
...
Рейтинг: 0 / 0
Вложенная Жава в DB2, возможно?
    #32709055
hgst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо. Вот простой пример ниже с указанными классами.
Идея довольно простая - вызываешь класс Dispatcher с параметром - идентификатор транзакции.
java Dispatcher 101
java Dispatcher 102
Класс читает настройки из текстового файла dispatcher.properties. В нем соответствие каждой транзакции поставлен обработчик.
101=ru.sql.forum.db2.Handler1 - означает что для транзакции 101 будет использован обработчик Handler1.
И т.д. Соответственно если появляется новая транзакция - пишешь для нее класс и прописываешь в этом файле пару - ID<->класс обработчик. Просто каждый обработчик имплементрирует MessageHandler интерфейс - в нем и происходит обработка - просто ты знаешь что у класса есть метод perform который используется для обработки.

HandlerContext - просто позволяет передать какие-то дополнительные параметры в обработчик (если нужно).

По поводу непосредственно проверки что есть данные для обработки. Вы написали:
Обработка будет как сказать обработка сообщении которые падают в концентратор а оттуда другая пога берет и заливает в таблицу, не давно написали прогу которая уже залитые в таблицу сообщения проверяют по конкретным параметрам(используя рег. выр) и заливает в еще другую таблицу.

А в чем сложность из этого приложения нотифицировать диспптчер что появились новые данные для обработки? Это было бы проще всего - не надо сканировать таблицу в Db2. А способов нотификации много - просто посмотреть что лучше всего подойдет. Дальше как обычно вопросы: - эти проги на одной машине будут или на разных? и т.д. Это решаемо

Код: 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.
// ---------------------------- HandlerContext.java --------------------- 
package ru.sql.forum.db2;

import java.util.HashMap;
import java.util.Map;

public class HandlerContext {
    private Map map = new HashMap();

     /**
     * @param key to set
     * @param value to set
     */ 
    public void setValue(String key, String value) {
        map.put(key, value);
    }

     /**
     * @param key to retrieve
     * @return value from the context
     */ 
    public Object getValue(String key) {
        return map.get(key);
    }

}

// ---------------------------- MessageHandler.java --------------------- 
package ru.sql.forum.db2;

public interface MessageHandler {
    void perform(HandlerContext ctx) throws Exception;
}

//  ---------------------------- Dispatcher.java ------------------------ 
package ru.sql.forum.db2;

import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;

public class Dispatcher
{
    public static void main(String[] args) {
        try {
            if (args.length <  1 )
                throw new Exception("TXID not defined as parameter");
            ResourceBundle bundle = PropertyResourceBundle
                .getBundle("ru.sql.forum.db2.dispatcher");
            Class clazz = Class.forName(bundle.getString(args[ 0 ]));
            Object o = clazz.newInstance();
            if (o instanceof MessageHandler) {
                HandlerContext ctx = new HandlerContext();
                ctx.setValue("TXID", args[ 0 ]);
                ((MessageHandler) o).perform(ctx);
            }
            else
                throw new Exception(
                    "Class should implement MessageHandler interface");
        }
        catch (Exception e) {
            e.printStackTrace(System.out);
        }
    }
}

// ---------------------------- Handler1.java --------------------------- 
package ru.sql.forum.db2;

public class Handler1
    implements MessageHandler
{
    public void perform(HandlerContext ctx) throws Exception {
        System.out.println("Handler1 called for TX {"
            + ctx.getValue("TXID")
            + "}");
    }
}

// ---------------------------- Handler2.java --------------------------- 
package ru.sql.forum.db2;

public class Handler2
    implements MessageHandler
{
    public void perform(HandlerContext ctx) throws Exception {
        System.out.println("Handler2 called for TX {"
            + ctx.getValue("TXID")
            + "}");
    }
}

# ---------------------------- dispatcher.properties -------------------- 
# Put this file in the same directory where Dispatcher.class file is
 101 =ru.sql.forum.db2.Handler1
 102 =ru.sql.forum.db2.Handler2

 ------------------------------------------------------------------------ 
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вложенная Жава в DB2, возможно?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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