Closed abishai closed 7 years ago
Так как библиотека 32 разрядная, должен ли я ее запускать строго 32-разрядной ява-машиной?
Да, JRE должна быть 32-битной, т.к. TRANS2QUIK.dll собрана под 32-битную архитектуру, и загрузить её из 64-битной JRE не представляется возможным. Подробнее: https://stackoverflow.com/questions/13448761/running-32-bit-dll-on-64-bit-machine-in-java
Смущает win32-x86-64/TRANS2QUIK.dll - либа лежит прямо в корне. Ее переложить надо?
Судя по документации для com.sun.jna.Native ( http://javadox.com/net.java.dev.jna/jna/3.4.0/com/sun/jna/Native.html -- для версии 3.4.0, но вряд ли в 4.1.0 сделано по-другому), поиск библиотеки с заданным именем будет происходит по разным предопределённым местам, и в случае, если там библиотеки нет, будет поиск по classpath. Собственно, в classpath библиотека и лежит (если, конечно, при запуске java не установлен какой-то другой classpath).
Ага, спасибо. Поставил 32-разрядную яву и переложил в папку в которой он ищет. Заработало. Не поделитесь впечатлениями от работы? Как лучше работать - держать библиотеку слинкованной или при каждой транзакции подключаться и отключаться? Ну и надеюсь, синхронные функции рабочие, мне интереснее сразу получать результат.
Подключаться/отключаться при каждой транзакции точно не стоит. Достаточно один раз загрузить библиотеку и начать работать. При перезапуске приложения ничего не ломается, т.е. можно повторно грузить библиотеку и общаться с терминалом. А вот одновременный доступ из двух приложений вроде бы был невозможен, но точно уже не помню -- проверьте, если интересно :)
В целом, у меня сценарий был таков: получаю обёртку библиотеки (т.е. по сути загружаю .dll), соединяюсь с её помощью с терминалом и шлю транзакции (TRANS2QUIK_SEND_SYNC_TRANSACTION работало прекрасно), пока не надоест.
Мне говорили что невозможен. Собственно, я и пишу сервис, который через сокет бы получал данные откуда угодно :) Будет интереснее проверить, может ли либа работать с несколькими терминалами. Ну, т.е. держать несколько хендлов и в зависимости от того, какая заявка пришла посылать транзакцию в тот или другой терминал.
Собственно, я и пишу сервис, который через сокет бы получал данные откуда угодно :)
Только учтите, что это библиотека для транзакций. Т.е. маркет-дату с помощью неё не получить.
То что получает дату я уже второй год пишу :) И практически в конце пути я обнаружил что не существует метода нормально записать файл из юникса (для которого я и разрабатываю) в винду (это я про файловый обмен). Начал смотреть API и наткнулся на эту библиотеку. Боялся что надо будет С# изучать, да и винду, которая у меня только в виртуалках.
Я ленно-неспешно (очень) разрабатываю сервер на Lua, который будет крутиться на стороне терминала. Связь с сервером будет через ZeroMQ, и сервер этот по сути будет гейтом к qlua API. Соответственно, можно будет соединиться с терминалом в Вашей виртуалке посредством TCP. Ну, я так понимаю, Вы нечто подобное и задумали (общение с терминалом через сеть).
Ага. Но у меня подход чуть другой (интересно, чей лучше). Терминал льет тики в постгрес, а потом через постгресовую шину нотификаций шлет его ИД торговой системе. Приняв тик, из них нарезаются бары, аналитика и стартуют сами торгующие роботы. Все это написано на яве и работает асинхронно-многопоточно и даже переживает ресет. Файлы со сделками я хотел просто выкладывать через самбу, но столкнулся с низкой производительностью. Поэтому, пишу сетевое взаимодействие. Вот, почти написал уже :) Хорошо что Арка такие ленивые, код файлового обмена на 99% годится, так как в АПИ шлется та же строка.
Собрал проект, но он не находит библиотеку (в самом проекте ничего не менял).
Честно говоря, я таких штук с явой никогда не проделывал. Так как библиотека 32 разрядная, должен ли я ее запускать строго 32-разрядной ява-машиной? Смущает win32-x86-64/TRANS2QUIK.dll - либа лежит прямо в корне. Ее переложить надо?