Ответы пользователя по тегу Java
  • Можно ли для придания интерактивности на вэб-страницах в место javascripta использовать java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Если речь идет о нормальном проекте, то нет.
    Основу веба составляют 3 языка - html, css, js.
    java, python, php, typescript, ruby лишь серверные языки (в данном контексте). В старых браузерах можно запускать applet'ы, но в новых они не поддерживаются.
    Единственное решение - писать код на Java, который впоследствии транпилируется в JavaScript. Об этом уже упомянул коллега - Vamp
    Ответ написан
    Комментировать
  • Как правильно спроектировать обработку ошибок в слоях?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Я предпочитаю делать это следующим образом.
    На уровне репозитория (FooRepository) получаю Optional<Foo>. Далее на сервисном уровне (FooServiceImpl), который дублирует метод репозитория получаю уже Foo или в случае его отсутствия выбрасываю кастомное исключение FooNotFoundException. Затем некий глобальный ControllerAdvice ловит это исключение и возвращает http статус 404 с кастомным текстом Foo Not Found.
    Ответ написан
    Комментировать
  • Jar файл вылетает из-за кнопки вывода PDF?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Запустите ваш jar через cli (bash, commander, powershell и др.). Затем попробуйте провести соответствующую операцию, чтобы получить нужное исключение. Данное исключение отобразится в консоли. Остается лишь найти причину и исправить ее.
    Ответ написан
    Комментировать
  • Что использовать Kotlin Multiplatform или Flutter?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Есть вот, такая штука для работы на Java - https://multi-os-engine.org/
    Рассматриваете ли вы применение языков js / ts с React Native?
    Ответ написан
    1 комментарий
  • Какие микросервисы пишут на Java для E-commerce?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Я бы сказал, что по частоте разработки e-commerce больше применяются PHP & Python, возможно еще Ruby, нежели Java. На Java можно разработать ровным счетом все то, что можно сделать на РНР.

    На php пишется большой монолит - торговая площадка с множеством поставщиков. так же есть море парсеров цен, картинок, загрузки прайсов, пересчета цен. Какой микросервис есть смысл написать на Java Spring...

    Так все-таки у вас монолит или приложение микросервисной архитектуры?

    Появился Java программист в команде и нужно его загрузить работой чтоб он усилил проект. Есть идеи?

    Обычно, разработчика берут для выполнения определенных задач. Если у вас есть задачи со сложной бизнес логикой, с которыми может справиться C# или Java, то это другое дело. Иначе зачем вам Java разработчик нужен?
    А раз у вас нет работы для Java разработчика, то зачем вам содержать столь огромный штат. Ведь, можно по надобности обращаться во фриланс к Java разработчику.

    Также учтите следующий момент: допустим, что вам сегодня выгодно содержать Java разработчика и он напишет некоторые микросервисы. Вы столкнетесь со следующими моментами:
    - дороговизна поддержки
    - проблема обеспечения acid в микросервисных приложениях
    Отсюда возникает вопрос - а зачем вам это все? Пишите все на РНР.

    Что нового умеет Java по сравнению с php, может какие полезные библиотеки для машинного обучения что можно применить для интеллектуального формирования коммерческого предложения или может для умного поиска?

    Ну тут уж лучше нанимать python разработчика для deep learning, как мне кажется.
    Ответ написан
  • Почему Role и Privileges выдаются в UserDetailsService в одной коллекции, как равноценные понятия в данном примере?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Собственно говоря, в той же статье откуда вы взяли код (baeldung) ниже написана причина смешивания ролей и привилегий.
    The interesting thing to follow here is how the Privileges (and Roles) are mapped to GrantedAuthority entities.This mapping makes the entire security configuration highly flexible and powerful – you can mix and match roles and privileges as granular as necessary, and at the end, they'll be correctly mapped to authorities and returned back to the framework.


    Вот, еще полезная информация (прочитайте первый ответ) - https://stackoverflow.com/questions/6357579/spring...

    В Spring есть понятие Authority. Это могут быть как роли, так и привилегии (privilege, permission). Так как конечная цель заключается в том, чтобы проверить права пользователя и так как привилегия и роль по факту являются теми самыми "правами", но лишь на разных уровнях абстракции (роль содержит сет привилегий), то в примере кода, который вы указали все смешано в одну кучу.
    Отличие проявляется на другом уровне, когда есть метод для проверки роли hasRole(), к слову, к значению этого метода автоматически добавляется префикс ROLE_, а также метод hasAuthority(), когда проверяются все права (роли и привилегии) и в этом случае для проверки роли нужно указывать префикс ROLE_ самому или уже указать название привилегии (например, READ_PRIVILEGE).
    Ответ написан
    Комментировать
  • Как обратиться ко второму значению в массиве?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Прежде всего рекомендую воспользоваться поиском и только после этого задавать вопрос.
    Что касается вашего вопроса:

    Допустим, что у вас есть класс
    class Brus {
    public String name;
    public String weight;
    }


    Также есть некий массив private Brus[] arr = new Brus[3];, который к слову инициализируется динамически.
    {
        arr[0] = new Brus("Брусок", 500);
        arr[1] = new Brus("Брусок1", 350);
        arr[2] = new Brus("Брусок3", 5500);
        count = 3;
      }


    Судя по этому коду предположу, что вам нужно рассчитать вес всех брусов. Я не дам вам полного ответа, чтобы вы могли сами подумать, а лишь напишу, что нужно делать.
    public void calc() {
    
    int calcTotalWeight;
                                   // получаем длину массива
         for (int i = 0; i < arr.length; i ++) {
           // получаем вес текущего блока
           int weight = arr[i].weight;
          // после получения веса текущего бруса суммируем его значение к общему весу calcTotalWeight
          }
       }


    Вот, похожий вопрос - https://stackoverflow.com/questions/3123086/access...
    К слову в вопросе указан вариант использования forEach. А также использование геттера вместо доступа к публичному полю
    Ответ написан
    Комментировать
  • Можно ли домен, логин и т.п прописать в properties?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Пожалуй, я лишь дополню ответ своего коллеги BorLaze некоторыми ссылками на полезные материалы.
    1 - насчет вынесения properties файла за пределы приложения:
    https://docs.spring.io/spring-boot/docs/2.1.8.RELE...
    В частности обратите внимание на:

    SpringApplication loads properties from application.properties files in the following locations and adds them to the Spring Environment:

    A /config subdirectory of the current directory
    The current directory
    A classpath /config package
    The classpath root

    The list is ordered by precedence (properties defined in locations higher in the list override those defined in lower locations).


    Вот, еще по этой же теме:
    https://www.baeldung.com/spring-properties-file-ou...
    Это Spring Boot + Docker: https://stackoverflow.com/questions/46057625/exter...
    Вот, еще информация о том, как можно исключить внешний конфиг файл
    https://stackoverflow.com/questions/26140784/sprin...
    https://stackoverflow.com/questions/26744060/exclu...

    Насчет хранения паролей в properties, вы можете воспользоваться - Jasypt
    Ссылка на первоисточник: https://stackoverflow.com/questions/37404703/sprin...

    Еще можно при старте приложения передать значения этих данных при помощи аргументов.
    Т.е. хранить в properties что-то типа ftp.host=example.com А при старте приложения использовать что-то типа такого:
    mvn spring-boot:run -Dspring-boot.run.arguments=--ftp.host=mysite.com

    https://www.baeldung.com/spring-boot-command-line-...

    В микросервисах подобная задача решается несколько иначе - поднятием отдельного конфиг сервера, который подтягивает конфигурацию извне при старте приложения. Но думаю, что это вам пока не нужно
    Ответ написан
    Комментировать
  • Как сделать sql запрос из MySQL в TableView?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый вечер.
    Я бы попросил чуть конкретизировать ваш вопрос, ибо непонятны следующие моменты:
    1) Является ли ваш проект клиент-серверным приложением? Если да, то правильно ли я понимаю, что у вас есть клиент - JavaFX и сервер - Spring Boot. Если так, то получается, что вы хотите из клиента выполнить запрос на сервер и получить данные хранимые в БД. В этом случае вам нужно на серверной стороне (в Spring) написать REST сервис. Например, контроллер, который обрабатывает GET запросы и возвращает соответствующие данные в формате json. Затем при успешном ответе ваш клиент (javaFX) парсит json и маппит в pojo. После чего он выводится в TableView.
    Исходя из вышесказанного ответ на ваш вопрос:
    Подскажите как сделать запрос в бд?

    Вам необходимо:
    - Написать REST сервис (не нужно из клиента обращаться напрямую в БД)
    - Использовать библиотеку для выполнения запросов. Например, Retrofit

    2) Если у вас приложение не клиент-серверное, а лишь JavaFX приложение, которое использует фреймворк Spring. Например, при помощи либы JavaFX Weaver
    https://habr.com/ru/post/478402/
    https://github.com/rgielen/javafx-weaver
    То конечно же сторонний http клиент и вообще http клиент не нужен. Вы можете обратиться к БД написав методы для Repository и затем маппить их в dto (pojo) и выводить в таблице.
    Ответ написан
    2 комментария
  • Как связать два отношения правильно в java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Отвечу исходя из вашего второго вопроса, на который я уже написал ответ:

    @Entity
    @Table(name = "category")
    @Data
    public class Category {
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
    
        private String name;
    
        @Column(length = 1000)
        private String description;
    
        @ManyToMany(mappedBy = "categoryList")
        private List<Product> productList;
    }


    @Entity
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Product {
    
    	@Id
    	@GeneratedValue(strategy = GenerationType.IDENTITY)
    	private Long id;
    	private String name;
    
    	@Column(length = 1000)
    	private String description;
    
    	private double price;
    
    
    	@ManyToMany(fetch = FetchType.LAZY, cascade = {
    			CascadeType.PERSIST,
    			CascadeType.MERGE
    	})
    	@JoinTable(name = "product_categories",
    				joinColumns = @JoinColumn(name = "product_id"),
    				inverseJoinColumns = @JoinColumn(name = "category_id"))
    	private List<Category> categoryList;
    
    }


    Полезная информация - https://vladmihalcea.com/the-best-way-to-use-the-m...
    Ответ написан
    Комментировать
  • Как правильнее обработать кастомное исключение в Spring MVC?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый вечер.
    1) Прежде всего - вместо скриншотов добавляйте сниппеты кода. Если например, придется вносить правки в ваш код, то что прикажете делать? Не перепечатывать же его со скрина.
    2) Проверку на дубликаты и др. логику лучше перекинуть на сервисный слой.
    Например, некий CategoryService, где обрабатывается бизнес логика, а затем в сервисном слое вызываются методы CategoryDao
    3)
    Насколько ок завязываться на логике выброшеного исключения?

    Выбрасывайте свое кастомное исключение в сервисном слое. Например, DuplicateRecordExistsException, RecordExistsException или что-то типа такого.
    Далее ловите данное исключение на уровне контроллера или controllerAdvice. А затем уже на основе выбрасываемого исключения отдавайте на клиент сообщение с http статусом. Например,
    наличие дубликата это ошибка на клиенте. Соответсвенно, код ошибки 4xx (например, 400). Сообщение ошибки - Запись существует.
    Прочитайте вот это - https://spring.io/blog/2013/11/01/exception-handli...
    Обратите внимание на
    @ExceptionHandler
    а также вот, эту главу - Global Exception Handling Using @ControllerAdvice Classes
    Ответ написан
    Комментировать
  • Как правильно присвоить значение объекту в thymleaf?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Во-первых, убедитесь в том, что указанная строка что-то возвращает. Добавьте точку остановки и гляньте есть ли список категорий
    List<Category> category = categoryService.getAll();


    Точно не уверен, но могут ли названия двух полей, как-то конфликтовать?! Надо бы этот момент проверить.
    th:field="*{category}"
    Попробуйте в блоке ниже сменить category : на что-нибудь другое. Например, cat и соответственно, смените его в соответствующих строках тоже.
    <option th:each="category : ${categoryList}" value="${category.id}"
                                    th:text="${product.category}"></option>



    Вы имеете ввиду вот, тут не присваивается? th:text="${product.category}"
    Если да, то он и не будет присвоен, ибо в данном случае вы лишь получаете значение product.category, а так как product новый: Product product = new Product();, то и присвоенной категории для него тоже не будет.
    Ответ написан
  • Почему не запускается чистый Maven проект?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый вечер. Давайте попробуем разобраться.

    Если вам не нужны плагины, то вы можете их удалить.
    <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>3.1.2</version>
            </plugin>
        </plugins>


    Для maven это норм такой геморрой?:)

    Нет конечно же. Просто вы решили начать изучать Java и сразу же решили взяться за Maven. Можно было для начала изучить сам язык, а затем изучить системы сборки, но это уже ваше дело)


    Error injecting: org.apache.maven.report.projectinfo.CiManagementReport
    java.lang.NoClassDefFoundError: org/apache/maven/doxia/siterenderer/DocumentContent

    Вот, полезная информация:
    This is caused by maven-project-info-reports-plugin updated to 3.0.0, and rely on doxia-site-renderer 1.8 (and have org.apache.maven.doxia.siterenderer.DocumentContent this class), but maven-site-plugin:3.3 rely on doxia-site-renderer:1.4 (and do not have org.apache.maven.doxia.siterenderer.DocumentContent)

    https://stackoverflow.com/questions/51091539/maven...

    Для быстрого старта проекта вы можете использовать архетипы. В частности ищите архетип maven quickstart
    Скрин - https://i.imgur.com/tPVfFH9.png

    Попробуйте вышеуказанные решения, а затем отпишитесь. Также вы можете выложить исходник вашего проекта на гитхаб и скинуть ссылку.
    Ответ написан
    4 комментария
  • Делают ли MarketPlace на Java Spring?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Микросервисы могут быть разработаны на разных языках и необязательно, чтобы они все были на одном языке. К тому же скорее всего вы это все разворачиваете при помощи докера, что безусловно упрощает процесс развертывания.
    В каком случае есть смысл переписать e-commerce продукт на Java ?

    В том случае, когда в вашем штате есть Java разработчик. И в том случае, когда содержать в штате других разработчиков обходится дорого.
    Наверное, можно попробовать собрать штат из js разработчиков, чтобы они пилили и фронт и бэк, но особого смысла это тоже не даст.

    Пока планируется переписать на фреймворк Symfony ( php ) с laravel для улучшения архитектуры приложения.

    Не вижу смысла потом переходить на Spring.

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

    Spring и Java со всем этим легко справляются. Но на Symfony тоже возможна реализация микросервисов. Так что выбирайте то, что вам дешевле обойдется и в плане разработки и в плане поддержки, развертывания и т.д.
    Ответ написан
    Комментировать
  • Как сделать редактор текста todo list?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Все довольно просто:

    1 способ:
    1) у вас должна быть страница редактирования записи.
    2) добавьте кнопку редактировать. Кнопка редактировать перенаправляет юзера (GET запрос) с id (path variable или request param - идентификатор записи).
    3) По идентификатору достаете текст записи на странице редактирования записи
    4) редактируете запись и сохраняете.

    2 способ:
    1) можно все указанное сделать при помощи ajax. Вместо перенаправления на отдельную страницу загружать содержимое в модальном окне (доставать данные средствами js при помощи ajax).
    2) а дальше уже сохраняете данные сабмитом содержимого формы из модалки

    P.S. небольшой совет:
    todo.setCompleted("No");
    Предположу, что у вас статус completed является типом String. Лучше используйте тип boolean. А еще лучше обертку Boolean, который принимает true false & null
    Ответ написан
    Комментировать
  • Можно ли использовать нижнее подчеркивание в методах для тестов?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Да, можно.
    Подробности тут:
    https://dzone.com/articles/7-popular-unit-test-naming

    А использование нижнего подчеркивания не в тестах не рекомендуется.
    Ответ написан
    3 комментария
  • Должны ли переменные final ( не static ) всегда писаться большими буквами?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    В данном случае согласен с коллегой @sergey-gornostaev
    Но вот, что самое интересное:
    https://vertex-academy.com/tutorials/ru/modifikato...
    *Обратите внимание: переменные с final - это константы. При этом их принято писать заглавными буквами - тут CamelStyle не работает :


    Вот, еще интересная выдержка из ответа:

    In java, making something final means that it can't be reasigned to another reference to another instance, but if it's a reference to a mutable class, the mutable values inside the class can still be modified.

    For example, a final String is a constant because Strings are immutable in Java, but a final ArrayList means that you cannot assign it to another ArrayList, but you can still add and remove elements to that ArrayList

    https://stackoverflow.com/questions/39459727/diffe...
    Ответ написан
  • Является ли объявление этой переменной бессмысленной или она улучшает читабельность кода?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    С точки зрения clean code лучше сделать с отдельной переменной.
    Ответ написан
    Комментировать
  • Как правильно конвертировать POJO в XML?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    У вас есть dto - Request, но нет dto Response.

    Вот, примерная структура pojo для Response (источник)
    public class Response { 
    	public int p_id;
    	public int status;
    	public String message;
    	public int id;
    	public Date dts;
    	public String text;
    }


    Также вам для того, чтобы ответ возвращать в xml нужно добавить одну библиотеку для jackson (если вы используете именно его).
    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
        <version>2.11.1</version>
    </dependency>

    Подробности тут
    Ответ написан
    Комментировать
  • Как проще всего поднять несколько локальных инстансов приложения для отладки/тестирования?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Как по мне проще всего использовать docker. Можно еще использовать docker-compose, чтобы быстро разворачивать контейнеры с нужными параметрами.
    Ответ написан
    Комментировать