[room] Лекция по Java
Eugene Prokopiev
=?iso-8859-1?q?prokopiev_=CE=C1_stc=2Edonpac=2Eru?=
Чт Окт 26 11:47:12 MSD 2006
Денис Смирнов пишет:
> On Wed, Oct 25, 2006 at 02:43:40PM +0400, Eugene Prokopiev wrote:
>
> EP> Первое: пусть польют меня грязью, но я в данном вопросе сторонник
> EP> недистрибутивного подхода, из Сизифа меня интересует только JDK/JRE.
> EP> Обоснование: продукт должен работать не только в ALT, и не только в
> EP> Linux (даже в качестве IDE я использую Eclipse в Linux, но со мной
> EP> работает один человек в Windows и один еще не определился :) ). Более
> EP> того, мне хочется, чтобы он собирался везде, где нет ничего, кроме JDK.
> EP> Поэтому мне пока проще таскать все необходимые библиотеки с собой, они у
> EP> меня лежат прямо в CVS вместе с исходниками. Я задницей чувствую, что
> EP> когда-нибудь это начнет меня напрягать, когда потребуется гарантировать
> EP> одинаковые версии библиотек в разных проектах, и тогда я буду смотреть
> EP> на maven, а пока мне достаточно ant. Грубые аналогии: ant - это make,
> EP> maven - это hasher/spt :)
>
> Гм. У меня ситуация немного другая -- мне достаточно если он будет
> _работать_ где угодно. Увы, скорее всего то что будет распространяться
> будет распространяться в бинарном виде :(
Этого, по-моему, уже достаточно для отказа от apt для всего, кроме
JDK/JRE, чтобы унифицировать подход к разным платформам
> EP> Далее: CGI в виде отдельных процессов на каждый запрос в Java никто в
> EP> здравом уме делать не станет - это слишком дорого. Основа всех
> EP> технологий - это сервлеты, которые выглядят так:
>
> Правильно ли я понимаю что Tomcat это "штука для запуска сервлетов"? И по
> сути это дает возможности идентичные FastCGI?
да
> EP> Принцип ясен?
>
> То есть класс содержит в себе код обработчики запроса? Ага.
>
> EP> Есть надстройки над этим - template engines типа JSP и Velocity, которые
> EP> позволяют писать в стиле PHP, т.е. html + вставки кода. Кстати, Velocity
> EP> как template engine используется в проектах, которые к web никаким боком.
>
> Добровольно мешать код и данные? Нет уж :)
:)
> EP> Есть надстройки над этими надстройками :) Есть другие надстройки над
> EP> сервлетами. Начать читать можно отсюда -
> EP> http://www.techinfo.net.ru/docs/web/javawebdev.html
>
> Прочитал... жуть! Описано только одно средство (XMLC) которое упрощает
> разработку, а не усложняет %-/
:) так видимо считали все, приступая к разработке очередного кошмара, но
уже своего :)
> Откуда такая XML-мания?
просто XML - это общепринятый способ хранить древовидные данные (если
этих данных немного - т.е. для конфигов почти идеал). Конечно, у Lisp и
Erlang свой путь, может более эффективный по затрате ресурсов, но в Java
и не только путь именно такой, и изобретено уже столько инструментов и
технологий поддержки, что отказываться поздно ...
> EP> <display-name>Hello, World Application</display-name>
> EP> <description>
> EP> This is a simple web application with a source code organization
> EP> based on the recommendations of the Application Developer's Guide.
> EP> </description>
>
> Где используется эта информация?
В Tomcat есть интерфейс администрирования web-приложений: установить,
удалить, запустить, остановить - вот там имя и описание и фигурируют
> EP> build.xml (и вызывающий его build.sh) умеет строить из этого дерева
> EP> файлов war-архив. Этот архив можно разными способами продеплоить в
> EP> Tomcat: например, скопировать его в определенный каталог, который он
> EP> мониторит на предмет появления новых приложений. Будет это приложение
> EP> работать и в других контейнерах вроде Jetty и Resin, а также в тяжелых
> EP> серверах приложений вроде JBoss и Geronimo, которые содержат встроенные
> EP> сервлет-контейнеры (коими являются Tomcat и Jetty :) ).
>
> Я правильно понимаю что минимальный сервлет-контейнер должен уметь "всего
> лишь" каким-либо образом обрабатывать клиентские соединения, подгружать
> сервлеты и передавать данные?
да :)
> То есть можно, например, написать простой
> сервлет-контейнер который будет общаться с тем же nginx через FastCGI.
писать свой - это все-таки перебор, посмотри на Jetty или Embeded Tomcat
- с первым я баловался, встраивая его в свое приложение.
FastCGI и сервлеты - это скорее взаимоисключающие вещи. Я бы на твоем
месте проверил, реально ли (и достаточно ли по производительности - так
на всякий случай) на сервлетах построить тот framework, который ты
хочешь (очень интересно, что у тебя получится :) - как сделаешь, делись
:) ). А если нет, то идти к FastCGI - эта технология, как я понимаю,
вообще перпендикулярна любым языкам и платформам. И при любом выборе
посмотреть в сторону какой-либо реализации IoC и AOP - вероятность того,
что они будет полезны, довольно высока.
> EP> Мне больше нравится Jetty, т.к. он легче, меньше, проще, понятнее ...
> EP> Взять маленький Jetty можно тут -
> EP> http://lib.juga.ru/article/articleview/222/1/0?PrintableVersion=enabled
> EP> Т.е. Apache web server здесь отдыхает. Его подставляют как frontend.
> EP> Можно ли задействовать nginx - не в курсе.
>
> Если он фронтенд как http proxy -- однозначно можно.
>
> EP> Если хочется странного (FastCGI), то пишется обычное java-приложение,
> EP> которое обменивается с web-сервером через сокеты.
>
> Ага.
>
> EP> Такое приложение можно писать, забыв о наличии каких-либо frameworks. Но
> EP> если я знаю, что будет много относительно независимых и взамозаменямых
> EP> модулей (и я узнаю о том, какие конфигурации будут нужны, только на
> EP> этапе внедрения), то я задействую Spring.
> EP> Стартовый класс:
> EP> public class Main {
>
> EP> public static void main(String[] args) throws InterruptedException {
>
> Что означает этот exception?
В Java изначально предполагалось, что каждый метод должен знать, какие
исключения внутри могут приключиться (за исключением unchecked
exceptions). Возможно, это был ответ на позицию M$ при разработке Win32
API, когда было заявлено, что это невозможно узнать в принципе.
Со временем unchecked exceptions расплодились и Spring главный, кто эту
идею фактически похоронил - есть и обоснования, но тут я принимать
чью-либо сторону не берусь.
В данном случае InterruptedException возбуждает sleep(), вызывающий
метод должен либо обработать это исключение сам с помощью try/catch,
либо явно передать наверх.
> EP> Кто скажет, что это не изящно, пусть бросит в меня камень :)
>
> XML... Я так понимаю что редактируется это обычно все отнюдь не руками?
Можно руками, если это уже в production - даже раскраска в редакторе
делает конфиги достаточно читабельными. При разработке XML-редактор
Eclipse очень помогает. Еще больше помогает плагин к нему, который
называется Spring IDE
Да, если ты будешь смотреть в строну Eclipse, учти что тебе нужна
поддержка XML (или в WTP - это один большой архив, или из Callisto - там
ты выбираешь нужные тебе компоненты)
> EP> Да, похоже я исполнил мечту г-на dlaygovta@ :)
>
> :)
>
> EP> Денис, если все это тебе еще интересно, то в качестве оплаты лекции
> EP> прошу написанное причесать и куда нибудь на f.i. выложить :)
>
> Еслп под причесать подразумевается только форматирование -- легко и
> непринужденно. Если редактирование -- ой вряд ли я сейчас с этим
> справлюсь...
Смотри сам ... Если в ближайшее время до изучения и редактирования
дойдет - то ок, а если пока нет, то форматируй выкладывай как есть со
ссылками на архивы
>>>Кстати о. Какие наиболее простые средства a-la flex/bison сейчас есть в
>>>Java?
>
> EP> кажется, именно antlr и есть
>
> Ага...
>
>
>>>Меня String убивает именно тем, что код который на perl том же занимает
>>>несколько символов и понятен -- на Java получается простыня кода :)
>
> EP> В Java есть регулярные выражения - не помогут?
>
> В Java вообще все есть :) Дело в синтаксисе.
Ну так все что есть, есть не в Java, а в JVM/JEE :) И теоретических
препятствий к использованию других языков на этой платформе вроде нет -
попробуй, расскажешь :)
--
С уважением, Прокопьев Евгений
Подробная информация о списке рассылки smoke-room