Статьи

Zirius: норвежская ERP-система на платформе NetBeans

Zirius — компания-разработчик программного обеспечения, разрабатывающая ERP-решения для малого и среднего бизнеса в Норвегии. Наш основной продукт называется Zirius ERP, основанный на платформе NetBeans . Программа на норвежском языке и может быть загружена с http://www.zirius.no . Некоторые вещи, которые решает Zirius ERP, включают в себя учет, управление проектом, обработку хранилища, выставление счетов, управление активами (аренда, амортизация и т. Д.), Архивирование документов, документооборот и обработку покупки.

Zirius ERP используется, среди прочего, бухгалтерскими агентствами и предпринимателями во всех частях Норвегии. Компания была основана в 2004 году, и с тех пор у нас стабильный рост. Компания также предоставляет приложения для Android, которые работают с нашим основным приложением, и у нас есть бесплатная веб-система счетов на http://www.fakturaweb.com

Вот главный экран Zirius ERP:

Несмотря на то, что мы действительно используем платформу NetBeans, в настоящее время мы не используем много функций, которые она предлагает. Нашему продукту уже около 8 лет, поэтому вы можете себе представить, что в нем много старого кода, который нельзя портировать очень быстро.

Центр установки и обновления

То, что привело нас на путь использования платформы NetBeans, заключалось в том, что мы используем IDE NetBeans в качестве среды разработки. Мы увидели в нашем продукте необходимость в установщике и центре обновлений, как и в среде IDE NetBeans.

Ранее мы использовали Java Web Start (JNLP) для доставки продуктов нашим клиентам. Однако у JNLP возникли некоторые проблемы, в частности с пользователями терминальных серверов. Для этих пользователей платформа NetBeans спасла нас, предоставив нам надлежащий установщик и простой и надежный способ доставки обновлений с помощью механизма центра обновлений.

Мы создали пять отдельных центров обновлений для наших клиентов:

  • Производство. Это где 90% наших клиентов будут.
  • Предприниматель. Для наших крупнейших компаний с точки зрения пользователей (~ 10-100 пользователей), где мы выпускаем обновления реже. Наше программное обеспечение требует одинаковую версию для всех клиентов в компании, и поэтому часто бывает сложно получать частые обновления.
  • Дереву. Это для производства и обработки древесины, такой как доски и т. Д. У этих компаний есть особые потребности, и мы также должны справиться с интеграцией с различными продуктами, такими как пилы, поэтому им необходим собственный темп обновления.
  • Бета и релиз-кандидат . Это для функций в разработке и для исправления ошибок.

Раньше с JNLP было довольно сложно заставить работать вышеуказанный механизм. Некоторые пользователи, например, сохраняют файл JNLP локально, а затем запускают его оттуда, предоставляя нам поддержку, например, когда они не получают новые JAR-файлы.

Еще одно большое преимущество заключается в том, что клиенты теперь могут загрузить нашу версию-кандидат и затем просто вернуться к работе. Затем они в конечном итоге просто синхронизируются с рабочей версией. Ранее, если клиенты хотели сделать это, они должны были иметь две установки на своих ПК, при этом вручную проверяя, чтобы они переключились на производство в точке, где у них была та же версия.

Вот селектор центра обновлений, который мы создали для поддержки вышеуказанного механизма:

Мы сделали так, чтобы одновременно можно было установить только один центр обновлений.

Одноместный TopComponent

Zirius долгое время был продуктом Swing, и поэтому для начала мы предоставили платформе NetBeans всего один компонент TopComponent, который не подлежит закрытию и перемещению.

Для достижения этой цели:

Вход и управление меню

У нас есть и менеджер безопасности, и менеджер лицензий для ограничения доступа пользователей к различным пунктам меню. Чтобы заставить нашу систему меню работать на платформе NetBeans, мы вставляем наш собственный экземпляр меню в платформу NetBeans. Мы делаем это в нашем модуле меню, где мы обнародовали наш интерфейс меню, который мы устанавливаем через слой:

<folder name="LookAndFeel">
    <file name="MenuBar.instance">
        <attr name="instanceOf" stringvalue="org.openide.awt.MenuBar"/>
        <attr name="instanceCreate" newvalue="com.zirius.core.netbeans.uiconfigurator.menubar.implementation.SortedMenubar"/>
    </file>
</folder>

И затем мы вставляем это во время установки модуля в платформу NetBeans:

System.setProperty("netbeans.winsys.menu_bar.path", "LookAndFeel/MenuBar.instance");

Ниже вы можете видеть, что меню «Meny» удалено, потому что доступ к нему не был предоставлен:

и здесь меню «Meny» доступно, потому что пользователь вошел в систему:

Отключение через Lookup API

У нас есть разные модули, которые теперь могут быть полностью отделены от своих родителей через API поиска NetBeans.

Ранее каждому модулю, по крайней мере, нужно было знать о классе обработчика события, чтобы добавить себя в качестве слушателя. С Lookup API, единственное, что нам теперь нужно знать, это интерфейс, что означает меньше зависимостей.

Вот пример слушателя, который добавляет событие выхода из системы к нашей строке меню.

Чтобы платформа NetBeans инициировала события, у нас есть класс в нашем основном пакете, который добавляется к старому обработчику событий в нашем коде, например так:

    @Override
    public void loggedIn(LogEvent le) {
        clearMenu();
        final Collection
  allInstallers = Lookup.getDefault().lookupAll(ZiriusLoginListener.class);
        for (ZiriusLoginListener observer : allInstallers) {
            observer.loggedIn(createZiriusLogEventFromLogEvent(le));
        }
    }

Мы также используем API поиска для предоставления элементов строки состояния приложения через
класс
org.openide.awt.StatusLineElementProvider :

Мысли и чувства

Платформа NetBeans до сих пор кажется надежной платформой. У нас не было никаких ошибок с частями, которые мы используем для нашего продукта, и он делает то, что мы говорим, чтобы сделать.

Похоже, у него также есть решение для большинства проблем, с которыми мы сталкиваемся, даже если они не все так хорошо документированы. Единственная реальная причина, по которой мы не используем больше частей платформы NetBeans для нашего продукта, это время, необходимое для изменения старого кода. Если бы мы начинали сегодня с нуля, я уверен, что мы использовали бы платформу NetBeans практически для всего, что она может предложить.

Самая большая проблема с платформой NetBeans, которую я обнаружил, — это документация для файлов слоев. Есть много вещей, которые можно сделать в файлах слоев, но они, похоже, не документированы, особенно о том, как использовать это хорошо или оптимально.

Наша интеграция в платформу NetBeans была относительно простой. Это не заняло много времени, но, конечно, были некоторые проблемы. Самым большим было, вероятно, когда мы перешли с одного центра обновлений на несколько. При первом добавлении нового центра обновлений он включается. Если он удален, а затем добавлен снова, он отключен по умолчанию. Это привело к тому, что нескольким клиентам пришлось переустанавливать свое приложение, поскольку мы больше не могли отправлять им обновления для решения проблемы. Итак, не забудьте вручную установить центры обновлений, если вы добавляете их во время выполнения, поскольку они могут храниться локально как отключенные!