[room] Лекция по Java
Eugene Prokopiev
=?iso-8859-1?q?prokopiev_=CE=C1_stc=2Edonpac=2Eru?=
Пн Фев 26 01:52:15 MSK 2007
Денис Смирнов пишет:
> On Thu, Oct 26, 2006 at 11:47:12AM +0400, Eugene Prokopiev wrote:
>
> Извиняюсь за поздний ответ, письма на эту тему после прочитывания
> откладывал на обдумывание... да слишком на долго отложил.
>
>
>>>Гм. У меня ситуация немного другая -- мне достаточно если он будет
>>>_работать_ где угодно. Увы, скорее всего то что будет распространяться
>>>будет распространяться в бинарном виде :(
>
> EP> Этого, по-моему, уже достаточно для отказа от apt для всего, кроме
> EP> JDK/JRE, чтобы унифицировать подход к разным платформам
>
> Я с этим не соглашусь. Пусть у меня будет одна нормальная платформа где
> будет удобно работать. А для остальных, так и быть, можно раздавать кашу в
> виде пачки jar'ов в одном tgz с боооольшим README на тему "а как с этим
> кошмаром взлететь".
>
> Пользователи же нормальных дистрибутивов смогут использовать пакетный
> менеджер.
>
>
>>>То есть класс содержит в себе код обработчики запроса? Ага.
>>
>>EP>> Есть надстройки над этим - template engines типа JSP и Velocity, которые
>>EP>> позволяют писать в стиле PHP, т.е. html + вставки кода. Кстати, Velocity
>>EP>> как template engine используется в проектах, которые к web никаким боком.
>>
>>>Добровольно мешать код и данные? Нет уж :)
>
> EP> :)
>
> :)
>
>
>>EP>> Есть надстройки над этими надстройками :) Есть другие надстройки над
>>EP>> сервлетами. Начать читать можно отсюда -
>>EP>> http://www.techinfo.net.ru/docs/web/javawebdev.html
>>
>>>Прочитал... жуть! Описано только одно средство (XMLC) которое упрощает
>>>разработку, а не усложняет %-/
>
> EP> :) так видимо считали все, приступая к разработке очередного кошмара, но
> EP> уже своего :)
>
> Видимо да. Но логика своего кошмара хотя бы самому себе кажется разумной.
> А логика чужого кошмара приводит к кошмарам по ночам :)
>
>
>>>Откуда такая XML-мания?
>
> EP> просто XML - это общепринятый способ хранить древовидные данные (если
> EP> этих данных немного - т.е. для конфигов почти идеал). Конечно, у Lisp и
> EP> Erlang свой путь, может более эффективный по затрате ресурсов, но в Java
> EP> и не только путь именно такой, и изобретено уже столько инструментов и
> EP> технологий поддержки, что отказываться поздно ...
>
> :(
>
> Люблю конфиги на тикле писать :)
>
>
>> 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>
>>
>>>Где используется эта информация?
>
> EP> В Tomcat есть интерфейс администрирования web-приложений: установить,
> EP> удалить, запустить, остановить - вот там имя и описание и фигурируют
>
> Ага, понял.
>
>
>> EP>> build.xml (и вызывающий его build.sh) умеет строить из этого дерева
>> EP>> файлов war-архив. Этот архив можно разными способами продеплоить в
>> EP>> Tomcat: например, скопировать его в определенный каталог, который он
>> EP>> мониторит на предмет появления новых приложений. Будет это приложение
>> EP>> работать и в других контейнерах вроде Jetty и Resin, а также в тяжелых
>> EP>> серверах приложений вроде JBoss и Geronimo, которые содержат встроенные
>> EP>> сервлет-контейнеры (коими являются Tomcat и Jetty :) ).
>>
>>>Я правильно понимаю что минимальный сервлет-контейнер должен уметь "всего
>>>лишь" каким-либо образом обрабатывать клиентские соединения, подгружать
>>>сервлеты и передавать данные?
>
> EP> да :)
>
> А монстры чем отличаются от этого минимума? Администрирование, возможно
> какой-то механизм кэширования, что еще?
О каких монстрах речь? JBoss и Geronimo? Ну тут в двух словах никак.
Кратко: это реализация всех стандартов JEE - JMS (асинхронные сообщения
- аналог e-mail, но с отказоустойчивостью, транзакциями и т.д.), EJB
(RPC, ORM, ...), распределенные транзакции, security, кластеризация ...
Собственно Web тут очень небольшая часть. Кстати, я их не использую, мне
в качестве контейнера достаточно Spring, куда я при необходимости могу
втащить реализацию какой-либо JEE-технологии, вроде JMS (например,
ActiveMQ - часть Geronimo, но поддерживает конфигурирование средствами
Spring и JBoss).
>>>То есть можно, например, написать простой
>>>сервлет-контейнер который будет общаться с тем же nginx через FastCGI.
>
> EP> писать свой - это все-таки перебор, посмотри на Jetty или Embeded Tomcat
> EP> - с первым я баловался, встраивая его в свое приложение.
> EP> FastCGI и сервлеты - это скорее взаимоисключающие вещи. Я бы на твоем
> EP> месте проверил, реально ли (и достаточно ли по производительности - так
> EP> на всякий случай) на сервлетах построить тот framework, который ты
> EP> хочешь (очень интересно, что у тебя получится :) - как сделаешь, делись
> EP> :) ). А если нет, то идти к FastCGI - эта технология, как я понимаю,
> EP> вообще перпендикулярна любым языкам и платформам. И при любом выборе
> EP> посмотреть в сторону какой-либо реализации IoC и AOP - вероятность того,
> EP> что они будет полезны, довольно высока.
>
> что такое IoC и AOP?
IoC мы кратко рассмотрели в примере использования Spring, можно еще
здесь почитать - http://www.rsdn.ru/article/java/spring.xml
AOP - грубо говоря, препроцессор для выполнения неких действий перед
вызовом метода и после него (возможно с модификацией входных и выходных
параметров), не ставя в известность об этом факте сам метод. Полезно для
разделения основной логики и дополнительной (авторизация, управление
транзакциями и т.д.)
> Путь с интегрирование Jetty мне нравится. Хотя, с
> учетом того что я _знаю_ что у меня будет frontend, собственно код сервера
> достаточно простой получается. Самое-самое-самое сложное в этом коде это
> разбор запросов :)
ну и замечательно, пока этим и стоит ограничиться, даже сервлеты тебе
фактически не нужны, а нужны только твои собственные реализации
интерфейса Handler
>> EP>> public static void main(String[] args) throws InterruptedException {
>>
>>>Что означает этот exception?
>
> EP> В Java изначально предполагалось, что каждый метод должен знать, какие
> EP> исключения внутри могут приключиться (за исключением unchecked
> EP> exceptions). Возможно, это был ответ на позицию M$ при разработке Win32
> EP> API, когда было заявлено, что это невозможно узнать в принципе.
>
> EP> Со временем unchecked exceptions расплодились и Spring главный, кто эту
> EP> идею фактически похоронил - есть и обоснования, но тут я принимать
> EP> чью-либо сторону не берусь.
>
> Гм.
>
>
>>>В Java вообще все есть :) Дело в синтаксисе.
>
> EP> Ну так все что есть, есть не в Java, а в JVM/JEE :) И теоретических
> EP> препятствий к использованию других языков на этой платформе вроде нет -
> EP> попробуй, расскажешь :)
>
> Медитирую над синтаксисом того, чего хочу. В общем-то я понял что хочу --
> некий недоlisp. Буду думать.
>
> Кстати о, куда копать на предмет того как в Java принято писать простые
> клиент-серверные приложения?
Даже и не знаю ... Может отсюда
http://java.sun.com/docs/books/tutorial/networking/index.html
Книжка Брюса Эккеля Thinking in Java неплоха, ее электронный перевод
отвратителен, а бумажный нормальный
Но это слишком низкий уровень, сокеты, потоки и все такое ... Наверное,
лучше начать с примеров, идущих с Jetty и с кода самого Jetty. Кстати, у
тебя и клиент-сервера как такового не получается, всеми сетевыми делами
и даже потоками будет заниматься Jetty, тебе лишь остается правильно
структурировать свой внутренний код.
> Первое где я могу с ней реально поиграться на
> практике, это в том интерфейсике к asterisk managment interface, который
> мне все равно скоро писать придется.
>
> И как _правильно_ запускать Java-сервер через инитскрипты?
Я использую http://jakarta.apache.org/commons/daemon/, его же использует
Tomcat
--
С уважением, Прокопьев Евгений
Подробная информация о списке рассылки smoke-room