• Какие способы для создания DSL есть в Java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Как такового DSL в Java нет.
    Можно наверное воспользоваться либой Apache Camel
    https://camel.apache.org/manual/latest/java-dsl.html
    В ней для реализации Java DSL используется паттерн Fluent Builder.

    Вот, для spring - https://www.baeldung.com/spring-integration-java-dsl

    А зачем переходить на Kotlin только из-за DSL? Какие задачи вам нужно решать именно при помощи DSL
    Ответ написан
    Комментировать
  • Можно ли разрабатывать приложения под Android на Java и Kotlin на MacOS?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Да, можно разрабатывать на чем угодно.

    Соглашусь с коллегой Денис Загаевский как правило, разрабатывают на MacOS или на Linux. Вообще, не сильно принципиально, но удобнее разрабатывать на них.

    А также обязательно ли иметь Android устройство?

    Желательно. Но обычно эмуляторов бывает достаточно. Эмулятор из Android Studio или Genymotion

    У меня есть Android, но он слабенький или это неважно?

    Важно. Например, версия андроид и т.д. Все зависит от того, что именно вы тестируете. Вдруг вам нужно со старым андроидом для проверки обратной совместимости и т.д.
    Ответ написан
    Комментировать
  • Где создать sessionFactory в Spring проекте?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    В чем именно заключается проблема?
    Судя по всему у вас есть hibernate.cfg.xml, а также есть HibernateUtil.
    Можно чуть подправить этот класс на такой вариант:
    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.boot.MetadataSources;
    import org.hibernate.boot.registry.StandardServiceRegistry;
    import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
    
    public class HibernateUtil {
    
      final static StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
          .configure()
          .build();
    
      private static final SessionFactory sessionFactory;
    
      static {
        try {
          sessionFactory = new MetadataSources(registry).buildMetadata()
              .buildSessionFactory();
        } catch (Throwable ex) {
          throw new ExceptionInInitializerError(ex);
        }
      }
    
      public static Session getSession()
          throws HibernateException {
        Session session = null;
        try {
          session = sessionFactory.getCurrentSession();
        } catch (org.hibernate.HibernateException he) {
          session = sessionFactory.openSession();
        }
        return session;
      }
    
    }


    Далее используя метод getSession() получаете сессию и делаете то, что нужно.
    Например,

    Session session = HibernateUtil.getSession();
          session.beginTransaction();
          note.setTitle("Example");
          session.merge(note);
          session.getTransaction().commit();
          session.close();


    как это сделать в Spring проекте где нету main`a

    Почему это в Spring проекте нет main метода?
    Вот, туториал по Spring Framework, где указан main метод - https://www.youtube.com/watch?v=nLCYk1ySY_U
    Ответ написан
    Комментировать
  • Как работать с файловой системой в Spring Boot?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Но потом, когда я загружу проект на сервер, то там же другая файловая система, другие директории и т.д. - как с этим быть?

    Ну во-первых, как отметил коллега Dmitry Roo нужно использовать относительные пути.
    Во-вторых, у вас должны быть несколько файлов конфигурации (с разными профилями). Например, для dev upload.path будет /home/Desktop/uploads, а для prod профиля будет uploads/ и т.д.

    Во-вторых - а как быть с безопасностью? Как-то же надо фильтровать то, что мне загружают? А то скрипт какой-нибудь загрузят или ещё что-то. Как это вообще отслеживать?

    Обычно, делают проверку MIME type, как на клиентской стороне, так и на стороне сервера.

    Например, средствами js можно запретить загрузку других файлов, кроме image/* и т.д.
    Тоже самое делаю на сервере. Проверяют формат загруженного файла и если он не соответствует ожидаемому MIME type, то выбрасывают исключение и удаляют файл.

    Как отслеживать оставшееся место на диске?

    Смотря, что подразумевается в данном случае. Если хостинг, то java.nio подойдет. А если это amazon s3 или другой сервис, то смотрите документацию к REST API.
    Ответ написан
    2 комментария
  • Java Apache FPTS Client. Как победить 425 Can't open data connection при storeFile()?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    А подскажите пожалуйста, ведь вроде вы пытаетесь подключиться через FTP, но используете FTPSClient
    https://commons.apache.org/proper/commons-net/apid...

    Может быть вам нужен FTPClient?
    https://commons.apache.org/proper/commons-net/apid...

    Могу предположить, что вы пытаетесь подключиться к FTPS, используя порт для FTP (21) и соответственно, возникает ошибка

    Вот, например при подключении к FTP у меня все ок:
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPClientConfig;
    import org.apache.commons.net.ftp.FTPReply;
    
    import java.awt.*;
    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Main {
    
        public static void main(String[] args) throws IOException {
    
            FTPClient ftp = new FTPClient();
            FTPClientConfig config = new FTPClientConfig();
            ftp.configure(config);
            boolean error = false;
            try {
                int reply;
                String host = "example.com";
                ftp.connect(host);
                ftp.login("example_user", "12345");
                System.out.println("Connected to " + host + ".");
                System.out.print(ftp.getReplyString());
    
                reply = ftp.getReplyCode();
    
                if(!FTPReply.isPositiveCompletion(reply)) {
                    ftp.disconnect();
                    System.err.println("FTP server refused connection.");
                    System.exit(1);
                }
    
                boolean changed = ftp.changeWorkingDirectory("public_html/");
                if (!changed) {
                    ftp.disconnect();
                }
    
                ftp.setFileTransferMode(ftp.BINARY_FILE_TYPE);
                ftp.enterLocalPassiveMode();
                InputStream inputStream = new FileInputStream("/home/admin/Desktop/newFile.txt");
                boolean stored = ftp.storeFile("newFile.txt", inputStream);
                if (stored) {
                    System.out.println();
                }
    
                ftp.logout();
            } catch(IOException e) {
                error = true;
                e.printStackTrace();
            } finally {
                if(ftp.isConnected()) {
                    try {
                        ftp.disconnect();
                    } catch(IOException ioe) {
                        // do nothing
                    }
                }
                System.exit(error ? 1 : 0);
            }
    
        }
    
    }
    Ответ написан
    1 комментарий
  • Как подключать библиотеки вручную?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    А кто запрещает вам скачанный jar установить в репозиторий maven, а оттуда уже испоьзуя dependency подключить к проекту?
    Вот, аналогичный вопрос - https://stackoverflow.com/questions/4955635/how-to...
    Это конечно, если у вас maven проект и вы хотите подключить локальный jar.

    Если вы хотите подключить локальный jar без maven. то:
    https://www.cs.utexas.edu/~scottm/cs324e/Assignmen...
    Ответ написан
    1 комментарий
  • Как запретить десериализацию поля в jackson?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    нужно , чтобы в поле result попадал json как строка. Менять ответ контроллера (например обернуть в кавычки) я не могу.

    Можно написать свой кастомный конвертер для контроллера.
    https://stackoverflow.com/questions/57536693/how-t...

    Или вы имеете ввиду:

    аннотацию JsonIgnore?
    https://www.tutorialspoint.com/jackson_annotations...
    https://stackoverflow.com/questions/12505141/only-...

    Есть еще аннотации
    https://www.baeldung.com/jackson-bidirectional-rel...
    Ответ написан
    Комментировать
  • Как возможно сделать переключатель на 3 позиции?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Может быть эти материалы будут вам полезны:
    Вот, готовый компонент:
    https://github.com/BeppiMenozzi/TriStateToggleButton
    Вот, похожий вопрос:
    https://stackoverflow.com/questions/44279442/3-sta...

    гуглим
    Ответ написан
    1 комментарий
  • Как работают библиотеки java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Было бы неплохо конкретизировать вопрос. Например, о какой библиотеке Java идет речь?
    Если в целом, то предположим, что у вас есть некая библиотека с неким классом Human, в котором есть некий метод bmi(), который расчитывает индекс массы тела (ИМТ).
    И допустим, вы хотите в своем приложении реализовать функционал расчета ИМТ. Вы подключаете библиотеку в свой проект (через maven, gradle или без них), импортируете нужный класс и работаете с ним.
    Вот и все...
    Ответ написан
    3 комментария
  • Как поднять эффективность обучения?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Попробуйте поработать с различными библиотеками. Например, напишите парсер при помощи jsoup. Попробуйте написать некий универсальный тул для экспорта данных в xlsx | csv (Apache POI). Изучите apache common langs, apache common collections и др. распространенные библиотеки. Можете глянуть на lombok.
    Придумайте себе идеи для pet проектов. Например, телефонная книга (javafx), консольное приложение (jcommander) и т.д.
    Решать задачи на hackerrank прикольно и в принципе, можно потратить время на них. В частности, Java, SQL, Problem Solving. Но как отметил коллега, подобные сайты нужны больше при трудоустройстве.
    Попробуйте изучить jdbc, поработать с БД. Вот, сайт sql-ex.ru решите задачи по SQL.
    Ну и не останавливайтесь на достигнутом, развивайтесь дальше. Мне например, для прибавления уверенности в себе помогли фриланс биржи. Я писал различные простые парсеры и ботов. Как бы и денежки есть и прикольно видеть результат своих трудов.
    Ответ написан
    Комментировать
  • Как получить значение определенного параметра в ответе на запрос api (Java Selenium)?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Предположу, что в ответе вы получаете JSON. Соответственно, вам нужна либа для работы с json. Например, gson или jackson. Создайте pojo с нужной структурой, прочтите ответ в JSON (десериализация). Получите значение secret.
    Другое решение, если обойтись без либы - напишите DOM Parser.
    Ответ написан
    Комментировать
  • Как отказаться от SEO-плагинов без ущерба для сайта?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Практически все сео-плагины с изъянами.

    Ну ничто в мире не идеально)
    А чем именно вам сео-плагины не нравятся? Я раньше, когда занимался разработкой на ВП всегда использовал Yoast SEO Premium.

    Почему нельзя сделать всё просто, по принципу работы виджета "Отрывок"?

    Можно конечно же.

    Простое решение - установите плагин ACF. Создайте нужные вам поля (title, description, keywords). Выведите эти кастомные поля в шаблоне (внутри head в header.php)
    Если хотите средствами самого ВП (без плагинов), то прочитайте:
    https://wordpress.org/support/article/custom-fields/

    Как сделать, что дописать в файл functions.php чтобы работало всё то, что я нарисовал, по принципу виджета "Отрывок"

    Это больше не вопрос, а задание. То что нужно прочитать я указал выше. Как по мне простое решение использовать ACF. А лучше я бы рекомендовал использовать SEО плагин. В них много всяких плюшек и они стараются актуализировать свой функционал согласно требованиям гугла. Например, кол-во символов для тайтла, дескрипшна. Также например, гугл не ранжирует keywords и Yoast SEO убрал из своего функционала поле keywords. Также например, есть микроразметка в сео плагинах и т.д.
    Ответ написан
  • Можно ли так использовать спринг?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день
    имеет ли смысл только для работы с бд подключать springframework

    Может быть для работы с БД стоит подключать ORM фреймворки. Например, Hibernate, EclipseLink, MyBatis, ormlite.

    По факту spring это контейнер бинов (реализация IOC & DI). Соответственно, если вы хотите использовать DI в своем приложении, то можете использовать спринг. Ну или другую либу для DI (guice, dagger etc.)

    Например, если вы пишете JavaFX приложение, то есть хорошая либа для ьыстрой интеграции спринга
    https://github.com/rgielen/javafx-weaver/

    А просто для работы с БД используйте связку hibernate + hikaricp
    Ответ написан
    6 комментариев
  • Не обогащаются таблицы при создании Entity?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Добрый день!
    Да, конечно же сперва выполняется sql файл.
    Можно реализовать по разному:

    1) Попробуйте вынести DDL запросы в sql файл. (schema.sql)
    2) Либо наоборот содержимое data.sql инициализируйте при помощи java кода. Например, имплементируйте интерфейс CommandLineRunner
    3) Попробуйте использовать либу FlyWay для миграций

    spring.jpa.hibernate.ddl-auto=create-drop
    Это означает, что все созданные таблицы будут дропнуты и на момент старта в БД нет таблиц, куда ваши инсерты должны быть добавлены.

    Полезная информация - https://www.baeldung.com/spring-boot-data-sql-and-...
    Ответ написан
    2 комментария
  • Wordpress перенос рабочего сайта на локалку. Запускается рабочая версия сайта вместо локальной .Как запустить локальную?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день.
    Недостаточно сменить siteUrl & homeUrl.
    1) Рекомендую удалить из локального сайта .htaccess файл
    В нем может быть настроен редирект и соответственно, редирект происходит по этой причине.
    2) После того, как удалите этот файл, зайдите в админку - Настройки - Постояннные ссылки и нажмите сохранить. Так ВП создаст новый htaccess
    3) Затем установите плагин better search replace
    При помощи плагина в БД измените все старые ссылки на новые.
    Например,
    http://example.com/
    http://localhost:8080/

    Не изменяйте ссылки вручную в SQL поиском и заменой, так как в БД имеются сериализованные данные и при смене урлов вручную вы их потеряете (например, настройки темы, плагинов или еще что...).
    Ответ написан
    Комментировать
  • Как корректно создавать Spring Beans динамически?

    azerphoenix
    @azerphoenix Автор вопроса, куратор тега Java
    Java Software Engineer
    Применительно к данной задаче, которую я описал выше не пришлось созадвать бины динамически.
    Вместо этого было принято решение написать микросервисное приложение, в котором каждый из стран / городов для грапхоппера является отдельным микросервисом работающим внутри докера.
    Таким образом надобность в создании бинов в runtime отпала.

    Если вдруг кому-то все же понадобится создавать бины динамически, то можете глянуть на это решение:
    https://stackoverflow.com/questions/57157396/how-t...
    Ответ написан
    Комментировать
  • В чём ошибка алгоритма (вычисление времени из currentTimeMillis)?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Как отметил коллега, проблема заключается в часовом поясе.
    https://www.tutorialspoint.com/java/lang/system_cu...

    System.currentTimeMillis()
    This method returns the difference, measured in milliseconds, between the current time and midnight, January 1, 1970 UTC(coordinated universal time).


    Date date = new Date(System.currentTimeMillis());
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.US);
    format.setTimeZone(TimeZone.getTimeZone(ZoneId.systemDefault()));
    String result = format.format(date);
    System.out.println(result);


    Вот, так можно UTC конвертировать.
    Вывод:
    2021-06-13T19:35:35
    Ответ написан
    Комментировать
  • Как в ENUM добавить знак "-" перед выражением?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Вы можете попробовать вместо минусов(тире) использовать нижнее подчеркивание.
    -V => _V

    Можете глянуть на пример enum для римских цифр тут:
    https://stackoverflow.com/questions/3921866/how-do...
    Ответ написан
    Комментировать