Как стать автором
Обновить
215.44

Java *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга

В развитие темы Bare Metal VM, над которой я время от времени размышляю начиная аж с 2010 года, предлагаю ознакомиться с интересным и, на мой взгляд, перспективным проектом OSv.

Ещё в 10-м году я подумывал над тем, что имея сервера приложений наподобие Томката и серьёзную взрослую изоляцию на уровне загрузчика классов - можно выкинуть подлежащую ОС со всеми её ненужными сервисами из нашего стека, оставив сервер приложений на голом железе. Тогда же выяснилось, что не я один так думаю, было коммерческое предложение Oracle JRockitVE. Судя по всему, наследница вот этого приобретения Bea.

Ранее я уже писал статью об этой идее на Хабре и пытался защищать в дискуссии.

Можно попробовать снова.

Ещё можно смотреть на развитие ОС на базе грааля. Или вспомнить про JaOS.

К современным ОС типа Линукса у меня есть много претензий, и есть несколько идей, которые можно было бы реализовать для их улучшения. Некоторые из них описаны в указанном проекте. Некоторые в том или ином виде наличествуют в специализированных коммерческих предложениях (Юникс) крупных вендоров типа АйбиЭм или того же Оракла. Это касается, например,

  • файлово-дискового стека,

  • оптимизации сети,

  • использования ГПУ в неожиданных местах,

  • гибкости в использовании СУБД при разработке с контейнером.

Теги:
+5
Комментарии6

Какую тему для книги можно выбрать в 2025? Современный мир — насыщенный мир. Книг выходит очень много. Как, интересно, можно выбрать тему для книги? От этого зависит конечная аудитория книги всё-таки. Микросервисы? Внедрение зависимостей? Ещё что-нибудь? Я в смятении. А выбирать пора уже. Полгода как прошлая книга вышла...

Теги:
+1
Комментарии1

Поддержка должна быть бесплатной. Всегда!

Последнее время замечаю тенденцию, что многие хостинги и публичные облака вводят платную поддержку. 

Позиционируется поддержка как дополнительная опция и гарантия времени ответа. Но на мой взгляд это выглядит как вымогательство денег, когда компания может оказывать качественную поддержку, но если вы их не “подкупите” дополнительно, не будет.

Я основатель облака для простого деплоя проектов через Git push – Amvera Cloud. И вижу, что пользователи пишут нам в поддержку. И говоря честно – люди пишут только тогда, когда другие способы не помогли и они не знают, как решить их насущную проблему. А это значит мы не доработали и сделали что-то непонятно или неудобно. И это наша обязанность постараться им помочь. И я не вижу морального права просить за это с них деньги.

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

И главное, я не верю, что на платной поддержке можно сильно заработать. Это просто предлог, чтобы работать хуже, чем может компания.

Поддержка должна быть бесплатной, всегда, и без всяких но! 

Теги:
Всего голосов 8: ↑7 и ↓1+6
Комментарии3

🗯️ Про метрики на отдельном порту.

Далее про то как сделать выделенный порт и http-пулл для promitheus-метрик, так вот докладываю👇

Мы используем embedded tomcat как и великое множество других Java-проектов(остальным сил и терпения), по этому этот пост применительно к нему.

📍Для создания выделенного порта достаточно создать отдельный коннектор спринговой java-конфигурацией и проинициализировать его через TomcatServletWebServerFactory.

❕Стоит обратить внимание что на данном порту будут доступны вообще все сервлеты доступные и на стандартном порту, но при наличии разграничения доступа обычно это не является проблемой.

P.S. Не хочу быть злом по этому в комменты в свою телегу выложу класс в текстовом варианте😁

Теги:
Всего голосов 3: ↑1 и ↓2+1
Комментарии2

Опасности Apache POI 📍

Наверняка многие из вас юзают Apache POI. Для тех, кто не знает: это джаванская либа для работы с файлами Microsoft Office и OOXML — всякие Excel, Word и прочее.

А в чём опасность?

При генерации Excel-файла эта библиотека позволяет включить отслеживание ширины данных в колонках и автоподгонку ширины столбцов под содержимое (чтобы данные не скрывались из-за маленькой ширины столбца по умолчанию).

Включается это так:
// Отслеживаем ширину для автосайзинга
sheet.trackAllColumnsForAutoSizing();
// ... генерируем строки Excel-файла
// Автосайзим столбцы
sheet.autoSizeColumn(columnIndex);

Проблема: эта тема крайне ресурсоёмкая на больших объёмах данных. На тесте с 100 строками — всё быстро. На проде с 600К строк — 20 минут превращаются в 4 часа. 4 часа, Карл! Чего оно там делает вообще?!)

У нас такое не раз уезжало в прод и штука эта совсем неприятная я вам скажу:

  • Отчёт не собирается вовремя;

  • Заказчик негодует;

  • Паника, крики — в общем, ну его этот трекинг! 😅

Что делать?

В 99% случаев: достаточно автосайзинга только для заголовков:

// Включаем автосайзинг
sheet.trackAllColumnsForAutoSizing();
// Генерируем заголовки
//...
// Автосайзим колонки
sheet.autoSizeColumn(columnIndex);
// Выключаем трекинг
sheet.untrackAllColumnsForAutoSizing();
//... продолжаем генерацию

В 1% случаев: нужно отавтосайзить 1-2 столбца из сотен. Тогда делаем точечный трекинг:

// Трекинг только нужных колонок
sheet.trackColumnForAutoSizing(columnIndex);
// ... генерация данных
// Автосайзим
sheet.autoSizeColumn(columnIndex);

Ну и можно конечно вручную задавать ширину столбцов, но это не всегда удобно.

P.S. Метод autoSizeColumn() очень тяжёлый. Выдержка из джавадоки:

Этот процесс может быть медленным на больших листах, поэтому его стоит вызывать только один раз для каждого столбца в конце обработки.

P.S.S. Еще кстати поя умеют не буферизовать весь excel’ник в память при генерации, надеюсь вы все этим пользуетесь ибо обратное дико некармическая тема)) Знаете ж как?

Приходите к телегу, там обсуждаем наши кровавые энтерпрайзы: https://t.me/umenyarabotaet

Теги:
Всего голосов 3: ↑2 и ↓1+2
Комментарии5

Доделал текстовый редактор на Swing-java

пример как выглядит текстовый редактор
пример как выглядит текстовый редактор

https://github.com/richKirl/simpleEditor посмотреть код можно тут

из особенностей - нету истории ввода Undo/Redo, есть простенькая история команд в эмуляторе командной строки, есть текстовый эмулятор списка, всё сделано предельно костыльно если смотреть сейчас на него)

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Он переписал сортировку в Java! Интервью с Владимиром Ярославским

На JPoint 2025 мы пообщались с Владимиром Ярославским — разработчиком, чья работа вошла в историю Java. Именно Владимир стал автором улучшенного алгоритма сортировки, который используется в JDK.

Делимся ссылками на интервью на других ресурсах:

Это только начало — впереди ещё больше бесед с интересными людьми из мира Java и Spring.

Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.

Ждем всех, присоединяйтесь

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

📢 Почему устаревшие библиотеки всё ещё используются? Взгляд на Log4j 1.x 📊

Несмотря на то, что поддержка Log4j 1.x завершилась ещё в 2015 году, исследование показывает удивительную тенденцию:

  • 33.81% проектов продолжают использовать устаревшую версию Log4j 1.x.

  • Лишь 10.89% проектов перешли на современную Log4j-Core 2.x.
    Что ещё более удивительно, даже новые проекты выбирают устаревшую версию, что подчёркивает сложности в управлении зависимостями.

🔍 Почему это происходит?
1️⃣ Недостаточная осведомлённость о безопасности: Разработчики могут недооценивать риски использования уязвимых библиотек.
2️⃣ Высокая стоимость миграции: Переход на новые версии часто воспринимается как сложный и дорогостоящий процесс.
3️⃣ Зависимость от легаси-систем: Многие проекты связаны с устаревшими системами, что делает обновление крайне затруднительным.

⚠️ Риски использования Log4j 1.x
Продолжение работы с этой библиотекой подвергает системы серьёзным угрозам, включая возможность удалённого выполнения кода (например, уязвимость CVE-2019-17571).

💡 Следующие шаги для сообщества

  • Повышать осведомлённость о рисках использования устаревших библиотек.

  • Предоставлять инструменты и ресурсы для упрощения процесса миграции.

  • Рассмотреть временные решения, такие как Reload4j, для быстрого устранения критических проблем.

https://arxiv.org/pdf/2504.03167

Теги:
Рейтинг0
Комментарии0

Привет, Habr!

Уже завтра увидимся на JPoint в Москве, где на стенде Explyt представим новую версию Explyt Test плагина, разыграем весеннюю коллекцию мерча и на вечернем докладе обсудим, что болит и где подгорает у разработчика и тестировщика.

В этом релизе killer фичи Explyt Test плагина – интеграция тестов в существующую кодовую базу и подражание стилю проекта – усилены:

  • возможностями для увеличения тестового покрытия кода

  • генерацией интеграционных тестов для Spring разных видов: MockMVC, Spring Boot

  • анализом моргающих тестов (Flaky tests)

  • генерацией кода в строке редактора (Inline code generation)

  • объяснением ошибок, возникших в консоли

В Explyt Test мы поддержали современные языковые модели от провайдеров OpenAI, Anthropic, DeepSeek, Google Gemini, Cerebras, Groq, Ollama, в том числе:

  • Claude 3.7 Sonnet

  • OpenAI o3-mini

  • DeepSeek R1

  • OpenAI GPT-4.5

Возможности генерации тестов:

  • расширение тестового класса новыми тестовыми методами

  • автоматическая генерация тестов

  • исправление ошибок компиляции и runtime-ошибок в любом тестовом классе

  • использование существующего тестового класса в качестве примера для генерации тестов

  • подготовка проекта для интеграции сгенерированных тестов в существующую кодовую базу 

  • генерация тестового кода по пользовательскому тестовому сценарию 

  • автоматическое исправление ошибок компиляции и runtime-ошибок

Возможности интегрированного ассистента:

  • чат с LLM с поддержкой вложений

  • анализ кода на предмет потенциальных ошибок в реализации (Analyze for bugs)

  • объяснение работы кода и нюансов его использования (Explain code fragment)

  • использование локальной модели для генерации тестов и общения с ассистентом

Поддержка совместимости:

  • IntelliJ IDEA 2024.1+

  • Kotlin K2 

  • Android Studio Koala, Ladybug, Meercat

Поддерживаем тестовые фреймворки: JUnit 5, JUnit 4, TestNG, kotlin-test, фреймворки мокирования: Mockito, Mockito-Kotlin, MockK, SpringMockK, системы сборки: Maven, Gradle, IntelliJ Build System.

Вы можете обращаться к языковым моделям как через серверы Explyt, так и с использованием собственных API-ключей.

В личном кабинете добавлена возможность выбирать между Personal и Enterprise версиями.

Explyt Enterprise можно развернуть в виртуальном частном облаке (VPC) или в контуре компании (self-hosting). Код компании не отправляется в интернет и не используется для обучения модели.

Мы очень ценим обратную связь от комьюнити и будем рады пообщаться с вами на стенде Explyt на JPoint и почитать ваши комментарии на Хабре. Скачивайте плагин на сайте, багрепорты и фичреквесты добавляйте в GitHub Issues, узнавать новое – в нашем телеграм.

Теги:
Всего голосов 4: ↑4 и ↓0+4
Комментарии0

Обновление моего текстового редактора на java

обновлённая версия редактора
обновлённая версия редактора
  • подсветка синтаксиса java пока в процессе(подсветка простая пока только на С++)

  • добавлена панелька для ввода поиска - её можно скрыть

  • добавлен счетчик символов текста в редакторе

  • все панели участницы можно скрыть, менять размер

  • быстрое переключение между консолью и пространством с текстом

  • выбран путь емуляции исполнения процесса это значит * - звёздочку я реализовал сам )

  • табы как пробелы - пока предустановлен размер 2 пробела на 1 таб

  • добавлены хоткеи, покачто их нельзя переназначить

  • покраска ошибок в красный цвет

    радует что редактором уже можно пользоваться, мне самому как криейтеру этого текстового редактора нравится )

    добавлю режим PLAIN text`a, подсветку синтаксиса java, калькулятор простенький, возможно добавлю проигрыватель музыки аля как опция

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии7

Друзья, приглашаем на бесплатный вебинар «Микросервисы на Java: современные подходы».

Разберем ключевые принципы микросервисной архитектуры, методы взаимодействия сервисов, стратегии управления данными в распределенной системе и развертывание в Docker и Kubernetes.

📅 Дата: 21.02.2025

Время: 18:00-19:00 (Мск)

На вебинаре:

✔️ Основные концепции микросервисной архитектуры

✔️ Коммуникация микросервисов: REST, gRPC, Kafka

✔️ Управление данными и распределенные транзакции

✔️ Развертывание в контейнерах: Docker и Kubernetes

👉Записаться на вебинар👈

Заинтересовала тема вебинара? Возможно, вам будет полезен курс «Микросервисы на Java: практический подход (JVA-083)». Программа поможет улучшить навыки Java-разработки и изучить микросервисную архитектуру на практике, предоставляя понимание проектирования и внедрения систем, соответствующих современным требованиям.

👉Записаться на курс👈

Теги:
Рейтинг0
Комментарии0

Виртуальные потоки в Java: Новый шаг в асинхронном программировании

Долгое время разработчики Java использовали реактивный подход для достижения масштабируемости и неблокирующих операций. Хотя он действительно даёт хорошие результаты, этот стиль программирования часто оказывается сложным и требует значительных усилий для освоения и поддержки.

Теперь, с появлением виртуальных потоков в Java (Project Loom), появилась простая и эффективная альтернатива. Эти потоки легковесны и позволяют запускать миллионы параллельных задач без перегрузки JVM. В отличие от обычных потоков, они управляются на уровне JVM, что минимизирует затраты на переключение контекста и использование ресурсов. А главное — не нужно менять привычный стиль программирования: виртуальные потоки легко интегрируются с блокирующими API, что упрощает их применение.

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

Однако важно отметить, что реактивный подход остаётся актуальным в некоторых сценариях, например, для потоковой обработки данных или событийно-ориентированных систем. Но такие случаи становятся всё более редкими. Для большинства приложений виртуальные потоки будут предпочтительным решением.

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

А что думаете вы? Готовы ли вы попробовать виртуальные потоки?

Теги:
Рейтинг0
Комментарии0

Приглашаем на бесплатный вебинар «Разбор кодовых примеров сертификационного уровня "Специалист"». Расскажем КАК решать экзаменационные задачи и обсудим мнемонические формулы, которые помогут запомнить информацию и сэкономить время — критически важный ресурс на экзамене. Особое внимание уделим типичным ошибкам кандидатов и примерам «ловушек» в задачах.

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

📅 Дата: 13.02.2025

⏰ Время: 18:00-19:00 (Мск)

Разберем практические примеры:

✔️ Углубленный дизайн классов

✔️ Многопоточность

✔️ Дженерики и коллекции

✔️ Лямбда-выражения и встроенные функц. интерфейсы

✔️ Java Stream API

✔️ Фреймворки, инструментарий

👨‍🎓  Спикер: Судакевич Игорь — преподаватель международного уровня, более 15 лет работает в IT. Уполномоченный инструктор корпорации Oracle. Магистр компьютерно-информационных технологий. Инструктор платформы Udemy.

👉Записаться👈

Теги:
Рейтинг0
Комментарии0

Ближайшие события

⚡️ ПОЧЕМУ JAVA ТАКАЯ БЫСТРАЯ?

Есть много языков, которые не компилируется в машинный код, а исполняются на виртуальной машине или интерпритаторе - C#, Python, JavaScript и так далее, но самый быстрый из них Java.

😮 Почему?
В начале 2000-х на рынке JVM существовало несколько ключевых игроков:

  • Sun Microsystems HotSpot

  • IBM J9

  • Oracle JRockit

  • Excelsior JET

Но в декабре 2006 года, с выходом Java 6, HotSpot вырвалась вперед, разгромив конкурентов, благодаря JIT-компиляции.

🤔 Как работает JIT?
Just In Time компиляция — это механизм, который компилирует часто исполняющиеся участки кода в машинный код во время выполнения программы, что значительно ее ускоряет.

Рассмотрим метод:

public void exampleMethod(int value) {
    if (value > 0) {
        // Исполняется часто
        System.out.println("Positive value");
    } else {
        // Исполняется редко
        System.out.println("Non-positive value");
    }
}
  1. При первом вызове exampleMethod JVM интерпретирует байт-код

  2. Если exampleMethod вызывается многократно с положительными значениями, JIT-компилятор определяет это как "горячую точку"

  3. После достижения порога вызовов этой точки с условием value > 0 компилируется машинный код для метода

  4. Если позже будет вызван метод с отрицательным значением (что не ожидалось), произойдет uncommon trap, и управление передастся интерпретатору для обработки этого случая

☕️ То есть, JVM в рантайме определяет путь, который чаще всего проходит программа, и именно этот путь компилируется нативно и максимально оптимизируется.

⚡Благодаря такой оптимизации джава уничтожает бенчмарки, потому что в них обычно повторяется один и тот же код.

👨‍💻 Джуниор

Теги:
Всего голосов 12: ↑2 и ↓10-8
Комментарии4

RabbitMQ и Memcached в Amvera Cloud

C 14 января 2025 в Amvera Cloud доступны RabbitMQ и Memcached.

Для создания достаточно выбрать необходимый сервис в разделе «Преднастроенные сервисы» и заполнить название и несколько переменных.

В ближайшее время планируется релиз отдельного сервиса управления очередями.

Amvera Cloud — это облако для простого деплоя приложений через git push. Встроенный CI/CD, бэкапы и мониторинг позволяют развернуть проект тремя командами в IDE и не думать о настойке инфраструктуры. Amvera проще, чем использование VPS или Kubernetes-кластера.

Теги:
Рейтинг0
Комментарии0

🤔 Почему в джаве 128 != 128?

Такой код выведет false

Integer i1 = 128;
Integer i2 = 128;
System.out.println(i1 == i2);

Тут все довольно просто, Integer - это объект, а не примитив и он хранится в хипе, поэтому сравнивать тут надо не по ссылке (через ==), а по значению - через i1.equals(i2).

А что выведет этот код?

Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1 == i2);

Тут вернется true.
Дело в том, что у оберток в джаве есть кэш.
Для Integer это [-128;127], поэтому все объекты интов от -127 до +128 равны и по ссылке и по значению.
Для интов размер кэша можно изменить через аргумент JVM XX:AutoBoxCacheMax=size

А что насчет такого кода?

Integer i1 = 127;
Integer i2 = new Integer(127);
System.out.println(i1 == i2);

Здесь будет false 🙂
При создании объекта через new мы создаем новый объект в хипе, который уже не будет равен по ссылке тому, что хранится в кэше.

Но так делать не стоит. Конструктор Integer(int) депрекейтнут.

👨‍💻 Джуниор

Теги:
Всего голосов 14: ↑14 и ↓0+20
Комментарии3

В Фреймворк DBGridChart добавлено OLAP-приложение "Экспресс_обработка_таблицы.exe ", позволяющее при разработке программ на C++, Java, Visual Basic, F# и на других языках программирования (имеющих средства выполнения из программы готовых приложений из командной строки с параметрами) автоматическое формирование табличных и ленточных форм, форм с диаграммами и графиками с готовым унифицированным многофункциональным интерфейсом пользователя для корректировки баз данных, OLAP-анализу и прогнозированию данных в табличной и в графической формах.

Таким образом, программист при разработке приложения, даже на языке, отличным от C#, может использовать все средства и возможности Фреймворка DFGridChart путем обращения к приложению "Экспресс_обработка_таблицы.exe " с указанием через параметры значения свойствам, например: текст строки подключения к базе данных, текст команды Select, текст строки подстановки. Порядок формирование таких таблиц определяется интерфейсом (меню, кнопки), разрабатываемого программистом для приложения.

Гиперссылка для скачивания Фреймворка "DBGridChart", OLAP-приложения "Экспресс_обработка.exe" и "Экспресс_обработка_таблицы.exe " с исходными текстами, DLL-библиотеками, документацией и с демонстрационными примерами: https://disk.yandex.ru/d/sI1VhBiSPzDp-A

Пример обращения к приложению "Экспресс_обработка_таблицы.exe " при разработке программы на C++

#include <string>

...

// Символ # должен быть указан перед наименованием свойства!// Внутри строковых констант перед символами \ и " нужно указывать символ \
std::string
program = "C:\\Экспресс_обработка_таблицы\\bin\\Debug\\Экспресс_обработка_таблицы .exe", // Местоположение приложения
p1 = "#ConnString=Provider = Microsoft.Jet.OLEDB.4.0;Data Source="C:\\Демонстрационный пример Экспресс обработка таблицы для C++\\Выпуск изделий.mdb", // Строка подключения к базе данных
p2 = "#DBMS = Access", // Тип СУБД, если не указан (p2 не указано), то определяется по строке подключения
p3 = "#Select = SELECT Подразделения.[Код подразделения]@#,Подразделения.[Наименование подразделения]*, Подразделения.[Численность на 2022], Подразделения.[Численность на 2023], Подразделения.[Численность], Подразделения.[Дата формирования], Подразделения.[Код типа подразделения]*, [Типы подразделений].[Наименование типа подразделения], Подразделения.[Действующее] FROM [Типы подразделений] RIGHT JOIN Подразделения~ ON [Типы подразделений].[Код типа подразделения] = Подразделения.[Код типа подразделения] ORDER BY Подразделения.[Наименование подразделения]", // Запрос с возможностью корректировки таблицы Подразделения. Специальные символы при режиме корректировки после имен полей или псевдонимов: ключевое (@), обязательное (*), не корректируемое (#) поле и после имени корректируемой таблицы указывается символ ~, если таблиц несколько во фразе From.
p4 = "#Podstavit_v_kolonki = ктп #-; SELECT [Наименование типа подразделения], [Код типа подразделения] FROM [Типы подразделений] ORDER BY [Наименование типа подразделения]", //Подстановка кода типа подразделения в колонку с именем ктп по наименованию путем выбора мышкой из списка (сформированного указанной командой Select) наименований типов подразделений. Режимы подстановки: только из списка (-), список открывается в текущей ячейке (#).
p5 = "#Flag_Create_SQL_Select = True", // Разрешить (True)/не разрешить (False) использовать конструктор команд SQL (по умолчанию - True и p5 можно не указывать)
p6 = "#Table_№ = 2367", // Уникальный номер (обычно, случайное число) таблицы или запроса для сохранения макета настройки индивидуально для таблицы
parameters = p1 + p2 + p3 + p4 + p5 + p6, // параметры приложения
command = program + " " + parameters; // командная строка
system(command.c_str()); // выполнение приложения, которое формирует табличную форму с многофункциональным унифицированным интерфейсом Фреймворка DBGridChart

Теги:
Всего голосов 16: ↑1 и ↓15-14
Комментарии0

Вклад инженеров Axiom JDK в развитие OpenIDE

На текущий момент среди разработчиков Java в качестве основной среды разработки применяется IntelliJ IDEA. Однако, коммерческая версия этого и других продуктов JetBrains, включая IDE, Code With Me, Upsource, TeamCity и Space, а также техническая поддержка теперь не доступны в России. Это побудило нас на создание продукта OpenIDE с открытым исходным кодом и всей инфраструктурой, размещенной на территории РФ.

Как было анонсировано ранее, OpenIDE создается на базе исходного кода IntelliJ IDEA CE и будет развиваться в рамках некоммерческого партнерства Axiom JDK, «Группы Астра» и Haulmont. В этом посте мы расскажем о вкладе команды Axiom JDK в проект.

Рантайм Axiom JDK будет предоставляться в качестве выбора по умолчанию для разработки на Java/Kotlin в OpenIDE. Дополнительно будет возможна установка Axiom JDK из интерфейса OpenIDE. При этом релизный цикл Axiom JDK синхронизирован с OpenJDK и регулярными обновлениями.

Команда Axiom JDK будет выпускать и поддерживать рантайм, используемый для запуска OpenIDE, с набором улучшений. Это, например, расширенное переопределение классов c помощью DCEVM и поддержка JCEF фреймворка для встраивания браузера на базе Chromium. Также планируется ряд улучшений для рендеринга шрифтов, поддержка режимов HiDPI, что обеспечит лучшее масштабирование интерфейса пользователя. А еще это позволит исправлять специфичные для работы IDE ошибки, исправлений для которых еще нет в OpenJDK.

Несмотря на то, что исходный код IntelliJ IDEA CE открыт, в процессе работы IDEA обращается к серверам JetBrains для обновлений, поддержки маркетплейса плагинов, а также других нужд. Этот функционал сейчас перерабатывается с участием инженеров Axiom JDK, что позволит создать локальную российскую библиотеку плагинов, локализованный (и отключаемый) сбор статистики и механизм обновления OpenIDE.

Наконец, команда Axiom JDK занимается настройкой сборочного конвейера OpenIDE, и со временем произведет анализ всех OSS зависимостей OpenIDE и будет обеспечивать оперативное исправлений уязвимостей в ОSS зависимостях в рамках релизного цикла OpenIDE.

Релиз продукта намечен на март 2025 года.

Axiom JDK — единственный российский разработчик JDK. Инженеры команды стояли у истоков Java в России и развивают платформу более 25 лет.

OpenIDE можно использовать взамен IntelliJ IDEA CE. По данным нашего исследования, 78% Java разработчиков используют IntelliJ IDEA Ultimate, а 47% - работают на Community Edition. Мы хотим предоставить сотням тысяч разработчиков открытый инструмент, не уступающий по удобству привычным IDE, чтобы они могли быстро и эффективно работать.

Читайте также у нас на сайте и у партнеров на хабре.

Теги:
Всего голосов 5: ↑5 и ↓0+5
Комментарии0

Обновления января 2025 года в Amvera Cloud

Многие ждали, писали, но нет, мы цены повышать не будем!)

Зато сразу после 1 января праздников, ориентировочно 13—17 января

  1. Выкатим новый фронт. Надеемся, все станет понятнее.

  2. Появятся преднастроенные RabbitMQ и Memcached.

  3. Расширенные алерты и пробы. Можно будет настроить алерты на падение проекта, превышение заданного потребления ОЗУ и CPU и появления определенных ошибок в логах. Дополнительно появятся liveness и readiness пробы.

  4. Мы вводим SLA. Осенью 2024 были инциденты с падением сервисов. Мы готовы нести ответственность за безотказность работы сервиса. Начиная с января 2025, если наша надежность окажется ниже 99,5% в месяц, можно будет претендовать на компенсации с нашей стороны.

SLA действует с 1 января 2025

Amvera Cloud  это облако для простого деплоя приложений через git push. Встроенный CI/CD, бэкапы и мониторинг позволяют развернуть проект тремя командами в IDE и не думать о настойке инфраструктуры. Amvera проще, чем использование VPS или Kubernetes-кластера.

Теги:
Рейтинг0
Комментарии0

Всем привет!

Есть много способов получить данные из БД с помощью JPA:

  1. JPQL

  2. JPQL Native Query

  3. HQL

  4. Spring Data JPA Repository

  5. Criteria API

  6. QueryDSL

  7. ...

Предположим, нам нужно вернуть набор строк. Задать параметры запроса можно по-разному, а итог будет один - List или другая коллекция (Collection) с набором данных.

Верно? Не совсем)
Если посмотреть на список возвращаемых Spring Data JPA данных https://docs.spring.io/spring-data/jpa/reference/repositories/query-return-types-reference.html#appendix.query.return.types то там можно увидеть много чего интересного. В т.ч. Stream. А вот пример его использования: https://vladmihalcea.com/spring-data-jpa-stream/
Аналогично можно вернуть Stream и из обычного JPA - см. метод getResultStream, вот пример: https://thorben-janssen.com/jpa-2-2s-new-stream-method-and-how-you-should-not-use-it/

Зачем это может быть нужно?

Во-первых это просто красиво... Шучу. Если вы используете Stream в бизнес-логике - то кажется логичным использовать их и при обращении к БД.
А во-вторых: главная особенность стриминга - равномерная выборка данных. И в каждый момент данных в обработке будет одна запись.
Рассмотрим кейс, когда нужно обработать на клиенте миллион записей.

Ремарка: если у вас такой кейс - подумайте, нет ли проблем в архитектуре. Данные лучше обрабатывать на сервере СУБД. Если все же проблем нет - продолжим)

Так вот, какие у нас варианты:

  1. вытащить на клиент миллион записей. Запрос к БД будет один, она выдержит, но с неплохой вероятностью можно убить клиент через Out of Memory.

  2. организовать пагинацию, например, вот так: https://www.baeldung.com/spring-data-jpa-iterate-large-result-sets. Данных на клиенте в моменте не много, по размеру страницы, но запросов к БД ... тысячи.

  3. использовать стримы. Запрос к БД один, данных на клиенте немного. Не обязательно одна запись, но в любом случае немного, детали ниже.

К слову, стриминг по БД с JPA аналогичен перемещению курсора по ResultSet в JDBC. С накладными расходами и плюшкам, которые дает сессия JPA, конечно.

И про объем данных на клиенте. Казалось бы - вытаскиваем записи поштучно. Но если не указать fetch size - объем предварительной выборки - для некоторых СУБД Hibernate вытащит на клиента все данные за раз, и мы вернемся к варианту 1 (((

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии2