• Улучшенный sandboxing для Groovy скриптов

    • Перевод


    От переводчика: При разработке CUBA Platform мы заложили в этот фреймворк возможность исполнения пользовательских скриптов для более гибкой настройки бизнес-логики приложений. О том, хороша или плоха эта возможность (и мы говорим не только о CUBA), ведутся долгие споры, но то, что контроль исполнения пользовательских сценариев необходим — это ни у кого не вызывает вопросов. Одна из полезных возможностей Groovy для управления исполнением пользовательских скриптов представлена в этом переводе статьи Cédric Champeau. Несмотря на то, что он недавно‏ покинул команду разработки Groovy, сообщество программистов, по видимому, еще долгое время будем пользоваться плодами его трудов.


    Один из наиболее часто используемых способов использования Groovy — это скриптинг, поскольку Groovy позволяет легко исполнять код динамически, в рантайме. В зависимости от приложения, скрипты могут находиться в различных местах: файловой системе, БД, удаленных сервисах… но самое важное — разработчик приложения, исполняющего скрипты, не обязательно сам их пишет. Более того, скрипты могут работать в ограниченном окружении (ограниченный объем памяти, лимит на количество дескрипторов файлов, время исполнения…), или вы можете захотеть запретить пользователю использовать все возможности языка в скрипте.


    Этот пост вам расскажет


    • почему Groovy хорошо подходит для написания внутренних DSL
    • каковы его возможности в плане безопасности вашего приложения
    • как настроить компиляцию для улучшения DSL
    • о значении SecureASTCustomizer
    • о расширениях для контроля типов
    • как использовать расширения для контроля типов, чтобы sandboxing был эффективным
    Читать дальше →
  • Из Groovy ушёл Cédric Champeau‏



      В проекте Apache Groovy перестаёт участвовать один из ключевых участников сообщества, само имя которого у многих ассоциировалось с этим языком. Уходит Седрик Шампо, известный в первую очередь как автор статического компилятора Groovy.

      Если рассмотреть причины ухода в том виде, как их формулирует сам Седрик, получается история о том, как Groovy-сообщество хотело лучшего, а в итоге ненамеренно сделало себе хуже. В самом сообществе, впрочем, есть другие трактовки произошедшего. В любом случае история может быть интересна и разработчикам из JVM-мира, и не только.
      Читать дальше →
    • Моки, стабы и шпионы в Spock Framework

      • Перевод

      Spock предоставляет 3 мощных (но разных по сути) инструмента, упрощающих написание тестов: Mock, Stub и Spy.



      Довольно часто коду, который нужно протестировать, требуется взаимодействовать с внешними модулями, называющимися зависимостями (в оригинальной статье используется термин collaborators, который не очень распространён в русскоязычной среде).


      Модульные тесты чаще всего разрабатываются для тестирования одного изолированного класса при помощи различных вариантов моков: Mock, Stub и Spy. Так тесты будут надёжнее и будут реже ломаться по мере того, как код зависимостей эволюционирует.


      Такие изолированные тесты менее подвержены проблемам при изменении внутренних деталей реализации зависимостей.


      От переводчика: каждый раз, когда я использую Spock Framework для написания тестов, я чувствую, что могу ошибиться при выборе способа подмены зависимостей. В этой статье есть максимально краткая шпаргалка по выбору механизма для создания моков.

      Читать дальше →
      • +12
      • 2,4k
      • 3
    • SDKMAN — мёртв, да здравствует SDKMAN

      • Перевод

      TL;DR: SDKMAN CLI будет переписан на Golang

      Шесть лет прошло с тех пор как мы выпустили первую версию SDKMAN. В более ранних версиях он был известен как GVM и использовался для управления Groovy и связанным с ним инструментарием. Вскоре стало очевидно, что он не должен ограничиваться экосистемой Groovy, и может также применяться к другим SDK на JVM. В этот момент GVM был переименован в SDKMAN. Хотя название и изменилось, основная технология осталась прежней.

      Подобно тому, как GVM однажды перерос своё имя, SDKMAN перерос технологию, на которой он был построен. Несмотря на то, что сервисы бэкенда были заменены лучшими альтернативами, CLI клиент остался прежним и стал нашим самым большим источником разочарования.
      Читать дальше →
    • Введение в Micronaut Framework

      • Перевод


      1. Что такое Micronaut


      Micronaut — это фреймворк на JVM для построения легковесных модульных приложений. Он разработан компанией OCI, той же компанией, что подарила нам Grails. Micronaut это современный фреймворк, призванный сделать создание микросервисных приложений быстрым и простым.

      Micronaut содержит возможности похожие на существующие фреймворки, такие как Spring, но в то же время он реализует некоторые новые идеи, которые являются его отличительными чертами. Вместе с поддержкой Java, Groovy и Kotlin он предлагает множество путей создания приложений.
      Читать дальше →
    • Использование возможностей Groovy DSL для конфигурации Java-приложения

      • Tutorial

      Предыстория


      Всем привет! Я хотел бы рассказать историю о страшных конфигах и как их удалось причесать и сделать вменяемыми. Я работаю над довольно большим и относительно старым проектом, который постоянно допиливается и разрастается. Конфигурация задается с помощью маппинга xml-файлов на java-бины. Не самое лучшее решение, но оно имеет свои плюсы — например, при создании сервиса можно передать ему бин с конфигурацией, отвечающий за его раздел. Однако, есть и минусы. Самый существенный из них — нет нормального наследования профилей конфигурации. В какой-то момент я осознал, что для того, чтобы поменять одну настройку, я должен отредактировать около 30 xml-файлов, по одному для каждого из профилей. Так больше продолжаться не могло, и было принято волевое решение все переписать.


      Требования


      • Наследование и переопределение (или fallback). Должна быть возможность задать некий базовый профиль, унаследовать от него дочерние и переопределить или добавить в них те места, которые необходимо
      • Маппинг в java-бины. Переписывать по всему проекту использование конфигурации с бинов на проперти вида mongodb.directory.host не хотелось, использовать map-ы из map-ов тоже.
      • Возможность писать в конфиге комментарии. Не критично, но удобно и приятно.

      Хотелось бы, чтобы конфиг выглядел примерно так:


      Типичный DSL-скрипт на groovy
      name = "MyTest"
      description = "Apache Tomcat"
      
      http {
          port = 80
          secure = false
      }
      https {
          port = 443
          secure = true
      }
      
      mappings = [
              {
                  url = "/"
                  active = true
              },
              {
                  url = "/login"
                  active = false
              }
      ]

      Как я этого добился — под катом.

      Читать дальше →
    • [Питер] Встреча JUG.ru с Олегом Ненашевым из CloudBees — Groovy DSL в Jenkins и Pipeline. Реализации и подводные грабли



        В понедельник, 4 декабря, в офисе компании Oracle состоится встреча с Олегом Ненашевым, разработчиком в компании CloudBees, которая является одним из основных контрибьюторов Jenkins. Тема встречи — Groovy DSL в Jenkins и Pipeline.

        Несмотря на появление новых средств CI/CD, Jenkins остается одним из наиболее популярных серверов автоматизации. Он фактически является распределенным веб-сервисом и предоставляет различные DSL, в том числе с доступом к JVM и внутренним API. Давать такой доступ нужно аккуратно, а то в продакшне будет мучительно больно: security, UX, performance, и т.д. О предотвращении этой боли и пойдет разговор.

        Олег расскажет:

        • как в Jenkins реализованы Groovy DSL и почему их так много;
        • как в Jenkins Pipeline реализованы Groovy Sandbox, доступ к API Java, Script Security и персистентность контекста при рестарте;
        • какие архитектурные проблемы это вызывает;
        • как можно при всем этом расширять и поддерживать DSL для частных задач.
        Читать дальше →
      • Интеграционные тесты для Java с помощью TestContainers. Меньше безумия, больше порядка, и всё это автоматически

        • Перевод
        • Tutorial

        На Хабре совсем нет информации про TestContainers. На момент написания этой статьи, в поисковой выдаче есть анонсы наших же конференций, и всё. Между тем, в проекте на GitHub у них уже более 700 коммитов, 54 контрибьютора и 5 лет истории. Похоже, все эти пять лет проект тщательно скрывался спецслужбами и НЛО. Настало время выйти из тени на свет.



        Чукча — читатель, а не писатель. Поэтому, вместо написания своего текста, я попросил разрешения на перевод соответствующей статьи из блога RebelLabs.


        Итак, здесь мы поделимся парой слов о наимоднейшей Java-библиотеке для интеграционного тестирования — TestContainers. Кроме этого, будет немного о том, почему интеграционное тестирование настолько важно для ZeroTurnaround и их требования к интеграционным тестам. И конечно, будет полнофункциональный пример интеграционного теста для Java-агента. Если кто-то никогда в глаза не видел код Java-агента, то сейчас самое время. Добро пожаловать под кат!

        Читать дальше →
      • Приглашаем на Atlassian Meetup 12 декабря



          Друзья, приглашаем всех неравнодушных на очередную встречу Atlassian Meetup, которая пройдёт 12 декабря в московском офисе Mail.Ru Group. Как всегда, в программе интересные доклады о способах и особенностях использования продуктов линейки Atlassian.
          Читать дальше →
        • Использование buildSrc для внедрения дополнительной логики в Gradle

          • Перевод
          • Tutorial

          Интересная заметка от Madis Pink в блоге ZeroTurnaround RebelLabs. Если кто-то вас разбудит посреди ночи и спросит: «какую фичу в Gradle должен знать каждый?» — с уверенностью отвечай, что это buildSrc. Это особый магический Gradle-проект внутри твоего репозитория, доступный всем файлам build.gradle в виде библиотеки.


          Описанный далее подход позволяет писать код на удобном тебе JVM-языке, и результат использовать прямо в своих сборочных скриптах. Как бонус, можно покрыть юнит-тестами особо хитрые моменты в этих скриптах. Добро пожаловать под кат!

          Читать дальше →
          • +20
          • 4,9k
          • 5

        Самое читаемое