Вопрос-ответ

max аватар

  Как в ant подключить к build_filename.xml другой файл, в котором описаны свойства?

113
Находится в разделах:

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

И так, 

our.build.xml - нуждается в переменных. 

properties.xml  - содержит описанные свойства.

 

Для этого в our.build.xml вставляем: 

Дальше, после первого таргета или другой функциональной единицы вставляем (собственно и используем):

max аватар

  Ant. Избавление от ошибки CreateProcess error=87, The parameter is incorrect

115
Находится в разделах:

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

В выдаче поисковиков эта тема слабо раскрыта. "CreateProcess error=87, The parameter is incorrect" может произойти при генерации javadocs или использовании любой внешней (в данном контексте external) утилиты или программы, выполняющей определенную задачу. 

Поскольку мы используем внешнюю программу, мы вызываем ее с передачей аргументов командной строки. Вот тут и зарыта собака

Запустив ant  с опцией -debug, можно увидеть, какие параметры ей передаются. 

В моем случае, одной внешней тулзе передавался classpath длиной, сейчас внематочно, около 500 000 символов в длину. Как вам такое?  

Вся проблема в classpath и, независимо от того, с чем вы работаете в ant, ошибка 87  сигнализирует. что процесс не может быть создан. Да и как он может быть создан, если этот класспасс при вставке в виндовый блокнот приводит последнего в состояние охуевания?

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

 

Вывод: ройте в сторону параметров командной строки. Их длина может вызвать у Вас преждевременный климакс.

max аватар

  Ant. Условный оператор. Выполнение действий при определенном условии.

115
Находится в разделах:

Ant - замечательный инструмент для сборки проектов. Всю его ценность и мощь понимаешь тогда, когда проект действительно очень большой. 

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

Например, данные библиотеки нужно скопировать в определенное место для определенного сервера приложений. Например, если мы используем websphere - то копируем библиотеки для websphere, если это weblogic - то для weblogic и так далее. 

И так, рассмотрим пример. 

Объявляем условие, которое принимает значение true, если переменная application.server равна websphere.

Сравнение идет между параметрами arg1  и arg2.

max аватар

  Каким образом инициализируется апплет?

138
Находится в разделах:

Апплет инициализируется с помощью инициализирующего кода в методе init() или же конструкторе апплета.

max аватар

  Какой порядок выполнения методов в апплете?

140
Находится в разделах:

 

  • public void init(): Инициализирующий метод, вызываемый браузером всего лишь раз
  • public void start(): Метод вызывается после метода init() и содержит код для запуска процесса. Если пользователь покидает страницу и возвращается без окончания текущей браузерной сессии, метод start() вызывается без предшествующего вызова init().
  • public void stop(): Останавливает выполнение, начатое методом start(). Выполняется, когда пользователь покидает страницу.
  • public void destroy(): Вызывается, если текущая браузерная сессия была прекращена. Освобождает все ресурсы, занятые апплетом.
max аватар

  Как можно организовать взаимодействие между апплетом и сервлетом?

137
Находится в разделах:

Можно использовать java.net.URLConnection и java.net.URL классы для открытия стандартного HTTP-соединения и "туннеля"  к веб-серверу. Тогда сервер передает информацию сервлету. Изначально, апплет притворяется веб-браузером, и сервлет не видит разницы. Для сервлета, апплет будет всего лишь очередным http клиентом. Апплеты могут взаимодействовать через методы GET и POST.

Обмен параметрами между апплетом и сервлетом может происходить через пары имя-значение

Также можно передавать объекты в роли параметров, используя сериализацию. 

max аватар

  Как организовать взаимодействие между двумя апплетами?

138
Находится в разделах:

Все апплеты, которые находятся на одной странице, используют общий AppletContext.  Этот контекст можно получить так:

AppletContext предоставляет апплеты с такими методами, как getApplet(name), getApplets(), getAudioClip(url), getImage(url), showDocument(url), showStatus(status).

max аватар

  Какой апплет называется подписанным (signed)?

137
Находится в разделах:

Подписанный апплет - доверенный апплет. По умолчанию, и по причинам безопасности, апплеты выполняются в песочнице (sandbox). Это означает, что апплеты не могут сделать ничего, что могло бы навредить клиентской машине. 

max аватар

  Нуждается ли приложение в сервере приложений? / Deciding Whether an Application Needs an Application Server

88
Находится в разделах:

Имея архитектурные познания в j2ee, можно сделать весьма осмысленный выбор насчет сервера приложений. Нуждается ли Ваше приложение в нем? Поддерживаете ли вы JTA, JCA + EJB? Или Вам достаточно будет веб контейнера на подобии Tomcat. 

Существует несколько реальных преимуществ в случае отказа от использования сервера приложений:

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

  В чем разница между абстрактными классами и интерфейсами?

115

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

max аватар

  Где использовать синхронизированные методы, а где синхронизированные блоки?

118

Синхронизированные блоки ставят блокировки на более короткие периоды, чем синхронизированные методы.

max аватар

  Какова цель использования ключевого слова transient?

115

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

max аватар

  Как принудительно вызвать garbage collector?

120
Находится в разделах:

Невозможно заставить выполняться сборщик мусора, но можно попросить его об этом через метод System.gc(). Виртуальная машина не гарантирует, что сборщик мусора будет запущен немедленно.

max аватар

  Как переправлять сообщения программы в системную консоль, а сообщения об ошибках в файл?

116

Класс System содержит переменную out, которая представляет стандартный вывод и переменную err, которая представляет стандартное устройство ошибок. По умолчанию, обе переменные ссылаются на системную консоль.  Стандартный вывод может быть изменен следующим образом:

max аватар

  В чем разница между методами sleep и wait?

113

sleep(1000);  останавливает работу потока ровно на одну секунду. Это означает, что независимо от того, что происходит вокруг, поток будет спать столько, сколько ему было указано. Код wait(1000); тоже заставляет ждать поток одну секунду, с тем отличием, что он может прервать ожидание раньше, при получении notify() или notifyAll().

max аватар

  Можно ли написать класс, который будет использован в роли и приложения, и апплета?

109

Да, можно добавить метод main() в апплет.

max аватар

  Объясните использование java packages?

117

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

max аватар

  В чем разница между J2SDK 1.5 и J2SDK 5.0?

115

На самом деле нет никакой разницы. Sun Microsystems всего лишь переопределила версийность этой ветки.

max аватар

  Какой метод Вы будете использовать для сравнения двух строк - оператор == или equals()?

115

Я буду использовать метод equals() для сравнения значений строк, а == для проверки равенства ссылок двух объектов.