Вводные: есть десктоп приложение на Дельфи, которое активно работает с СУБД через собственный сервер приложений. Также написанный на Дельфи. В общем классическая трехзвенка.
Проблема: в сервере приложений есть сторонние компоненты не особо хорошего качества, которые «текут» по памяти. Плюс юзеры хотят Линукс, хотя бы на сервере.
Потенциальное решение: переписать на Лазаре или на Java. Честно — Лазарь не нравится. Да и используется часть возможностей Дельфи, которые в нем недоступны (например, аннотации к private членам класса). Но у Джавы, если выбирать ее, есть проблемы с деплойментом, нужен админ.
Кто что скажет по этому поводу? Есть идеи как лучше сделать и что выбрать?
Здравствуйте, sfsoft, Вы писали:
S>Потенциальное решение: переписать на Лазаре или на Java. Честно — Лазарь не нравится. Да и используется часть возможностей Дельфи, которые в нем недоступны (например, аннотации к private членам класса). Но у Джавы, если выбирать ее, есть проблемы с деплойментом, нужен админ.
Нужен админ, чтобы залить .jar на сервер и запустить через java -jar?
S>Кто что скажет по этому поводу? Есть идеи как лучше сделать и что выбрать?
У одного из моих заказчиков крутится 3 сервиса на Java. Все запущены как обычные приложения, без всяких web-application-server. Запускаются через systemd и стоит watchdog. Правда, я бы не назвал это shareware.
Здравствуйте, YuriKobets, Вы писали:
YK>Это какие проблемы? Как-то столкнулся с похожей проблемой и выбрал Java, правда из другого набора. Никаких проблем не испытал.
Не знаю насколько ты знаком с работой с СУБД и Джавой, но, к примеру, если мы обновляем метаданные в БД, то и в сервере приложений нужно изменить сигнатуру sql-запросов. То есть exe или jar тоже нужно заменить. Как заменить exe — мы знаем, а как заменить jar после апдейта метаданных БД в том же Tomcat без админа — увы, знаний не хватает. Возможно как раз потому, что с Джавой плохо знакомы. Потому и спрашиваю здесь.
Здравствуйте, sfsoft, Вы писали:
s> Проблема: в сервере приложений есть сторонние компоненты не особо хорошего качества, которые «текут» по памяти. Плюс юзеры хотят Линукс, хотя бы на сервере.
s> Потенциальное решение: переписать на Лазаре или на Java. Честно — Лазарь не нравится. Да и используется часть возможностей Дельфи, которые в нем недоступны (например, аннотации к private членам класса). Но у Джавы, если выбирать ее, есть проблемы с деплойментом, нужен админ.
s> Кто что скажет по этому поводу? Есть идеи как лучше сделать и что выбрать?
Дельфи и сама умеет в линукс. С текучкой можно разобраться, при желании.
Здравствуйте, sfsoft, Вы писали:
S>Не знаю насколько ты знаком с работой с СУБД и Джавой, S>но, к примеру, если мы обновляем метаданные в БД, то и в сервере приложений нужно изменить сигнатуру sql-запросов.
Обычно наоборот делается — новый jar обновляет БД под себя (Liquibase, Flyway etc)
S>То есть exe или jar тоже нужно заменить. Как заменить exe — мы знаем, а как заменить jar после апдейта метаданных БД в том же Tomcat без админа — увы, знаний не хватает. Возможно как раз потому, что с Джавой плохо знакомы. Потому и спрашиваю здесь.
Не надо jar в томкат пихать. Можно пихать томкат в jar. https://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html
Здравствуйте, rudzuk, Вы писали:
R>Дельфи и сама умеет в линукс. С текучкой можно разобраться, при желании.
Я тоже люблю Дельфи всей душой, но в свете текущей ситуации хотим подстраховаться. Плюс Дельфи все таки в Линукс не до конца умеет, гуй только от Крюкова за отдельные деньги. И не факт, что он хороший, обезьяну до сих пор в чувство приводят. А гуй, хотя бы минимальный, нужен, апдейты только на сервере ставятся, ибо структуру БД приходится менять и делать ее бэкап на всякий случай. Вдруг клиент на бесперебойнике сэкономил и в момент апдейта комп выключится? Без прямого доступа к БД никак.
Здравствуйте, GarryIV, Вы писали:
GIV>Обычно наоборот делается — новый jar обновляет БД под себя (Liquibase, Flyway etc)
GIV>Не надо jar в томкат пихать. Можно пихать томкат в jar.
Супер, спасибо.
А если в момент апдейта метаданных что-то пойдет не так, например скрипт какой-то не пройдет? Сейчас у нас приложение само откатится на предыдущую версию, а здесь как , если jar уже новый?
Здравствуйте, sfsoft, Вы писали:
s> Я тоже люблю Дельфи всей душой, но в свете текущей ситуации хотим подстраховаться.
Тут, конечно, да.
s> Плюс Дельфи все таки в Линукс не до конца умеет, гуй только от Крюкова за отдельные деньги. И не факт, что он хороший, обезьяну до сих пор в чувство приводят.
Если ты про FMXLinux, то она бесплатно идет для редакций с линуксом. Но она так себе, да.
s> А гуй, хотя бы минимальный, нужен
В смысле, гуй на сервере нужен? А не окажется, что у клиентов нет иксов на серверах?
Здравствуйте, sfsoft, Вы писали:
S>Кто что скажет по этому поводу? Есть идеи как лучше сделать и что выбрать?
Есть инсталяторы джавовские вплоть до того что тащат нужный JRE, можно сделать пакеты отдавая их через apt-get и прописывать в /etc/init.d, написать sh скприт, сделать докер образ наконец.
P.S. Есть ещё fatJAR
Здравствуйте, sfsoft, Вы писали:
S>А если в момент апдейта метаданных что-то пойдет не так, например скрипт какой-то не пройдет? Сейчас у нас приложение само откатится на предыдущую версию, а здесь как , если jar уже новый?
Примерно все то же самое, можно откатить БД назад (если писать роллбек скрипты).
Ну и изменения делать транзакционными тоже полезно.
Здравствуйте, GarryIV, Вы писали:
GIV>Примерно все то же самое, можно откатить БД назад (если писать роллбек скрипты). GIV>Ну и изменения делать транзакционными тоже полезно.
Про БД вопросов нет, я про jar спросил. Как его обратно на старый заменить, если скрипты на базе не прошли? Вручную? Или есть какие-то варианты?
Здравствуйте, sfsoft, Вы писали:
S>Вводные: есть десктоп приложение на Дельфи, которое активно работает с СУБД через собственный сервер приложений. Также написанный на Дельфи. В общем классическая трехзвенка.
S>Проблема: в сервере приложений есть сторонние компоненты не особо хорошего качества, которые «текут» по памяти. Плюс юзеры хотят Линукс, хотя бы на сервере.
S>Потенциальное решение: переписать на Лазаре или на Java. Честно — Лазарь не нравится. Да и используется часть возможностей Дельфи, которые в нем недоступны (например, аннотации к private членам класса). Но у Джавы, если выбирать ее, есть проблемы с деплойментом, нужен админ.
S>Кто что скажет по этому поводу? Есть идеи как лучше сделать и что выбрать?
Я бы вам советовал wine. Поставьте линукс, поставьте wine, запустите ваше приложение под ним и, если будут проблемы, попробуйте их точечно исправить. Хотя с консольным приложением, с большой вероятностью, проблем никаких не будет.
Java это хорошо, но её надо уметь готовить. Судя по вашим сообщениям вы её приготовить не сумеете и она принесёт вам больше проблем. Если всё же возьмётесь, забудьте всё, что вы о ней знали, и приступите к работе с чистого листа. Вам нужен Spring Boot.
Здравствуйте, cppguard, Вы писали:
C> запустить через java -jar
C>Запускаются через systemd
Более того: если писать сервер на Spring Boot (а так в Джаве сейчас и делают), то он автоматом собирает самозапускаемый .jar-файл, который может реагировать на стандаартные параметры командной строки, которые передают демону (сервису): "start", "stop", "status", и его можно тупо сразу линковать в /etc/init.d и настраивать автозапуск.
Плюсую за Java. Сам по вышеописанной схеме сервер с БД держу для всех своих SaaS-сервисов (но не распространяю его, сервер чисто у меня).
vsb>Java это хорошо, но её надо уметь готовить. Судя по вашим сообщениям вы её приготовить не сумеете и она принесёт вам больше проблем. Если всё же возьмётесь, забудьте всё, что вы о ней знали, и приступите к работе с чистого листа. Вам нужен Spring Boot.
Я бы напротив не стал бы с нуля связываться со Spring Boot. По личному опыту любое нестандартное требование приводит к необходимости ковыряться в исходниках самого спринга. И в этом даже людям с опытом можно увязнуть надолго.
Gradle + shadow даст JAR со всеми зависимостями, который можно запускать как java — jar myjar.jar . По моему проще некуда.
S>Про БД вопросов нет, я про jar спросил. Как его обратно на старый заменить, если скрипты на базе не прошли? Вручную? Или есть какие-то варианты?
Самое простое — заменить вручную. Можно забрасывать этот jar в какую-нибудь систему версионирования — типа git или что-то ещё — и выкладывать/откатывать через неё (через рабочую копию).
При желании можно даже установить какую-нибудь систему CI/CD, которых куча. Но они по сути делают то же самое + ещё что-то дополнительное (типа автотестирования, проверки каких-то требований к коду и т. п.). Проблема с этими системами в том, что в каждой из них надо отдельно разбираться, а это требует времени/сил.