Ответы пользователя по тегу Java
  • Как узнать имя пользователя в Windows с помощью JS или Java Applet?

    ehabarov
    @ehabarov
    IT Specialist
    Нужна более полная формулировка задачи. Начиная с ответа на вопрос "зачем"?

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

    Если же это корпоративная сеть с единой аутентификацией (Kerberos , MS Active Directory и т.п.) и хочется сделать "прозрачную" аутентификацию пользователя в приложении - то это решаемо. Смотреть в сторону GSSAPI, NTLM, "Integrated Windows authentication".
    Ответ написан
    Комментировать
  • Как запустить программу java на centOS?

    ehabarov
    @ehabarov
    IT Specialist
    FTP-протокол использует более одного порта.
    21 - это "управляющее соединение" (Control Connection).
    Для передачи данных (вывод списка тоже относится к этому) используется отдельное соединение, которое называется "Data Connection".
    В активном режиме инициатором этого соединения является FTP-сервер. На какой адрес и порт соединяться - сообщает клиент при открытии соединения. В настоящее время использовать такой режим передачи не рекомендуется.
    В пассивном режиме инициатором соединения является клиент, а адрес и порт (динамический, меняется) сообщает FTP-сервер.

    Нужно включать более подробное логгирование в FTP-клиенте, чтобы выводились команды, посылаемые на FTP-сервер и получаемые ответы.
    Ну и проверить, не запрещено ли где-то соединение на порты, отличные от 21-го.
    Ответ написан
    1 комментарий
  • У JAVA есть будущее?

    ehabarov
    @ehabarov
    IT Specialist
    Да никуда Java не пропадет в ближайшем обозримом будущем.
    Ибо пока нет других языков и VM обеспечивающих сравнимую кросс-платформенность.
    Язык вполне популярен, под него существует огромное количество библиотек и готовых продуктов.
    Из известных GUI-приложений можно назвать платформу Eclipse и производные продукты на основе это платформы. Например: List of Eclipse-based software.
    В ближайшем будущем, более вероятно, появится большее количество производных языков (напр. Scala), которые будут генерировать байт-код для JVM.
    Т.е. возможно, что Java, как язык, будет постепенно снижать популярность, но JVM, скорее всего, останется надолго.
    Ответ написан
    Комментировать
  • ESB vs application server?

    ehabarov
    @ehabarov
    IT Specialist
    Насколько я знаю, компания IBM придерживается мнения, что ESB - это концепция и технология, а не конкретный продукт. И эта технология может реализовываться как на основе одного продукта, так и на некотором множестве продуктов.
    Сама технология была призвана уменьшить паутину взаимосвязей между разными приложениями и их компонентами, централизовать и упорядочить взаимодействие, упростить замену и подключение новых компонент.
    Применима ли эта технология к конкретной задаче - нужно выяснять. Выбор конкретной архитектуры и реализации - зависит от задачи.
    Ответ написан
    Комментировать
  • Как убрать лишние пробелы и отступы?

    ehabarov
    @ehabarov
    IT Specialist
    Попробуйте так:
    <%@ page trimDirectiveWhitespaces="true" %>

    Дополнительная информация:
    Strip whitespace from jsp output
    The Java EE 5 Tutorial: Eliminating Extra White Space
    Ответ написан
    2 комментария
  • Как организвовать многопоточное взаимодействие с БД в Java?

    ehabarov
    @ehabarov
    IT Specialist
    Подход из мира JEE (и не только):

    Для всего многопоточного приложения используется реализация "пула соединений", которая обслуживает соединения с СУБД (одной или несколькими).
    Прикладной код каждого потока обращается к пулу, получает из него соединение с СУБД, выполняет определенную работу (запрос или запросы), закрывает транзакцию и закрывает соединение (в результате соединение возвращается в пул).
    В этом случае предполагается, что прикладной код удерживает соединение минимально необходимое время.

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

    Логика управления пулом может самостоятельно устанавливать новые соединения (если все существующие заняты), завершать соединения (если очень много свободных), "отбирать" соединения у прикладного кода, если по соединению долго не было никакой активности (банально забыли закрыть соединение), проверять незанятые соединения на "живость", выполняя диагностические SQL-запросы и т.п.

    Примеры реализации пулов соединений:
    Apache Commons DBCP
    c3p0:JDBC DataSources/Resource Pools
    The Tomcat JDBC Connection Pool
    Ответ написан
    Комментировать
  • Вытеснит ли ASP.NET платформу J2EE с ниши enterprise приложений за счет своей кроссплатформенности?

    ehabarov
    @ehabarov
    IT Specialist
    Java и JEE существует под гораздо большее количество ОС и платформ и тоже не стоит на месте, а развивается. Появление кросс-платформенности у потенциального конкурента возможно подстегнет процесс развития.
    Поэтому, если процесс вытеснения и будет, то весьма и весьма постепенный.
    Ответ написан
    Комментировать
  • Как подключить R к Java?

    ehabarov
    @ehabarov
    IT Specialist
    Судя по ошибке, вы пытаетесь загрузить 32-битную dll-библиотеку внутри 64-битной среды Java.
    Так сделать не получится.
    Варианты решения:
    1. Использовать для исполнения 32-битную среду Java.
    2. Использовать 64-битную версию библиотеки jri.dll.
    Ответ написан
    1 комментарий
  • Как внутри batника указать путь из которого он запущен?

    ehabarov
    @ehabarov
    IT Specialist
    Самый надежный вариант - значение переменной окружения: %~dp0.
    Переменная %0 содержит путь и имя исполняемого файла (возможно относительное).
    Выражение ~dp - формирует полный путь (диск и подкаталог), исключая имя файла.
    Обсуждение на StackOverflowWhat does %~dp0 mean, and how does it work?
    @echo off
    setlocal
    echo %%0 = %0
    echo %%~dp0 = %~dp0
    endlocal
    Ответ написан
    Комментировать
  • Существует Java библиотека для работы с RTSP?

    ehabarov
    @ehabarov
    IT Specialist
    Нагуглено: Oracle Java : RTSP Support, The Java Media Framework API (JMF)
    RTSP support has recently been added to the Java Media Framework. It enables JMF based clients (both applets and applications) to communicate with RTSP enabled servers and request that the streaming of specified mediafile (video-on-demand).

    For example, you can use JMStudio as an RTSP client by opening a URL from the File menu with the following parameters:

    rtsp://host:port/mediafile

    rtsp://129.144.251.202/test.mov

    If the port information is omitted the default RTSP port 554 is assumed.

    To construct an RTSP player programmatically, you use the Manager.createPlayer method and pass in an RTSP URL.
    Ответ написан
    Комментировать
  • После записи объекта в конец файла(append), чтение дописанных данных выдает StreamCorruptedException, какие есть способы справиться?

    ehabarov
    @ehabarov
    IT Specialist
    StackOverflow предлагает такой метод: Appending to an ObjectOutputStream
    Суть метода:
    - Если конечный файл не существует - то пользуемся обычным ObjectOutputStream для его создания (в этом случае в начало файла пишется нужная сигнатура).
    - Если файл уже существует - пользуемся предложенным там классом AppendingObjectOutputStream, который предотвращает повторное формирование сигнатуры.

    UPD: Пример кода, перенес из комментария.

    AppendingObjectOutputStream.java - это копия кода со StackOverflow.
    ObjectStreamTest.java - пример использования в программе.

    Метод writeObject() - выполняет запись очередного объекта в файл.
    В этот методе используется:
    - ObjectOutputStream - если файл не существует (будет создан).
    - AppendingObjectOutputStream - если файл уже существует (будет дозаписан).

    Метод readObjects() - последовательно читает файл с объектами и отображает имя класса каждого считанного объекта. Используется, чтобы удостовериться, что файл читается нормально после дописывания.

    --- AppendingObjectOutputStream.java ---
    import java.io.IOException;
    import java.io.ObjectOutputStream;
    import java.io.OutputStream;
    
    public class AppendingObjectOutputStream extends ObjectOutputStream 
    {
      public AppendingObjectOutputStream(OutputStream out) throws IOException 
      {
        super(out);
      }
      @Override
      protected void writeStreamHeader() throws IOException 
      {
        // do not write a header, but reset:
        // this line added after another question
        // showed a problem with the original
        reset();
      }
    }

    --- ObjectStreamTest.java ---
    import java.io.EOFException;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    
    public class ObjectStreamTest 
    {
      public static void main(String[] args) throws IOException, ClassNotFoundException 
      {
        String filename = "objFile.bin";
        writeObject(filename, new String("Test1"));
        writeObject(filename, new Integer(10));
        writeObject(filename, new Long(200));
        writeObject(filename, new String("Test2"));
        readObjects(filename);
      }
      public static void writeObject(String filename, Object obj) throws IOException
      {
        File file = new File(filename);
        FileOutputStream  fos = null;
        ObjectOutputStream oos = null;
        if ( file.exists() ) 
        {
          fos = new FileOutputStream(file, true);
          oos = new AppendingObjectOutputStream( fos );
        }
        else
        {
          fos = new FileOutputStream(file);
          oos = new ObjectOutputStream(fos);
        }
        oos.writeObject(obj);
        oos.close();
        fos.close();
      }
      public static void readObjects(String filename) throws IOException, ClassNotFoundException
      {
        FileInputStream  fis = new FileInputStream(filename);
        ObjectInputStream ois = new ObjectInputStream(fis);
        Object obj = null;
        try 
        {
          while ( (obj = ois.readObject() ) != null )
          {
            System.out.println("Object class is : "+obj.getClass().getName());
          }
        } 
        catch (EOFException e) 
        {
          System.out.println("End of file reached.");
        }
        ois.close();
        fis.close();
      }
    }
    Ответ написан
    3 комментария
  • Насколько java кроссплатформенна?

    ehabarov
    @ehabarov
    IT Specialist
    Нужно разбираться с ошибками.

    В общем случае один раз скомпилированный класс будет запускаться на виртуальной машине Java такой-же или более новой версии без проблем. Но, не запустится на более старой версии, о чем будет выдана соответствующая ошибка.
    Окружение для запуска Java-машины для разных платформ настраивается немного по разному. Например для Unix/Linux систем разделителем элементов в переменной CLASSPATH (в этой переменной задаются пути для поиска классов и библиотек классов) является двоеточие, а для Windows - точка с запятой.
    Бывают и другие нюансы, например разные кодировки по умолчанию для разных платформ, из-за чего могут неправильно считываться файлы конфигурации используемых библиотек. Про использование Native-библиотек уже все сказали.
    Ответ написан
    Комментировать
  • Что не так в jsp?

    ehabarov
    @ehabarov
    IT Specialist
    1. Желательно использовать другое объявление taglib
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

    2. Попробуйте вот так:
    <c:set var = "day" value = "${user.day}" scope="session"/>

    Expression Language в JSP сам разбирается что вызывать, согласно спецификации JavaBeans.
    Т.е. в классе user это может быть и public поле с именем day и getter-метод вида getDay().
    Подробнее: читать спецификацию на JSP Expression Language.
    The Java EE 6 Tutorial : Overview of the EL
    Ответ написан
    Комментировать
  • Почему не запускается код на java?

    ehabarov
    @ehabarov
    IT Specialist
    Порядок действий:
    1. Найти, в какой библиотеке (*.jar) находится искомый класс (net.volcore.wtvmaster.Main)
    2. Проверить, что этот файл указан в списке CLASSPATH, который используется при запуске сервера.
    Способ формирования CLASSPATH может быть разным.
    Если программа "заточена" под Unix/Linux системы - то может быть проблема с разделителями элементов CLASSPATH.
    В Linux/Unix в качестве разделителей используется двоеточие ":", а в windows - точка с запятой ";".
    Ответ написан
  • Как в java перевести timestamp в дату?

    ehabarov
    @ehabarov
    IT Specialist
    "Оптимизированная" версия варианта, предложенного jack
    Calendar ИМХО избыточен, достаточно java.util.Date.
    Ответ написан
    Комментировать
  • Java. Как захватить звук с аудиовыхода?

    ehabarov
    @ehabarov
    IT Specialist
    По ссылкам много полезной информации:
    Java Sound Resources: FAQ: Audio Programming
    Wired for sound
    Java Microphone Selection and Level Monitoring

    1. При записи с устройства нельзя выбрать непосредственно входной порт. Входной порт идет на микшер. Записывать можно с выхода микшера (TargetDataLine).
    Но, если входных устройств несколько (микрофон, линейный, компакт-диск), то можно поставить "Mute" на ненужные входы (через интерфейс Control), и на выходе микшера получить запись с нужного источника. Аналогично, через Control, можно управлять громкостью выбранного источника. Control-ы нужно получать после Line.open().

    2. Вход активируется только в случае, если к нему подключить внешнее устройство. По крайней мере так происходит со звуковыми картами Realtek, которые я видел. И, в этом случае, его можно "увидеть" через AudioSystem.getSourceLineInfo(<тип порта>). Вход микрофона почему-то обычно активен, возможно потому, что выведен на переднюю панель системного блока.

    3. В диспетчере Realtek HD, в дополнительных настройках, устройство записи по умолчанию "комбинированное", т.е. все устройства записи отображаются как одно. Нужно выбрать вариант "Разделить входные гнезда ...."
    Ответ написан
    Комментировать