Новый WEB-проект
От: Аноним  
Дата: 20.11.06 16:06
Оценка:
Hi ALL

Начинаем новый небольшой WEB-проект:
десяток страниц; в основном поиск, создание, удаление (сложных) Hibernate-обьектов.

Посоветуйте "правильный" framework.

Пока потратил 1 день, бегло пробежался по:
Spring: показалось, что много всего, на старт уйдет уйма времени, а понадобится реально 20%.
Struts: выглядит привлекательно
Tapestry: погуглил — говорят в нем граблей много. Правда есть BeanForm, что баальшой плюс.

Может кто добавит в двух словах?
Re: Новый WEB-проект
От: Blazkowicz Россия  
Дата: 20.11.06 16:28
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

А>Spring: показалось, что много всего, на старт уйдет уйма времени, а понадобится реально 20%.

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

А>Struts: выглядит привлекательно

Прошлый век.

А>Tapestry: погуглил — говорят в нем граблей много. Правда есть BeanForm, что баальшой плюс.

Граблей как и везде не больше не меньше. Подойдет если вы будете делать много UI и писать reusbale компоненты. Плюсов очень и очень много.
Основной минус — отсутствие нормально интеграции сo Spring. Но есть варианты, например инжектить спринговые бины через аннотации.

А>Может кто добавит в двух словах?

Надо ещё обратить внимание что Spring не поможет с окончательным представлением, поэтому тут тоже придется поискать решение (если не Tapestry)

Комбинации которые мы применяем это:
Tapestry + Spring IoC и там стоко всего полезного не перечислить.
Spring MVC + Velocity если UI не так много, я чаще склоняюсь именно к этой комбинации, Возьня с Tapestry мне не понравилась и сложностей которые пришлось забарывать оказалось больше чем хотелось. Но говорят последние версии прогрессируют как раз в сторону решения этой проблемы.
Re: Новый WEB-проект
От: C0s Россия  
Дата: 20.11.06 17:03
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Может кто добавит в двух словах?


для текущего проекта, который больше имеет в недрах, чем в GUI и в БД (10-15 страниц, 10-15 таблиц), я выбрал wicket + hibernate (с простой proxy-прослойкой, облегчающей transaction handling)
компонентность помогла для удобного вывода "чуть-чуть отличающихся сущностей", а также для ввода сущностей с настраиваемым набором параметров
поддержка вывода постраничного браузинга сущностей помогла избежать сложных собственных решений, чему был рад заказчик (владеет исходным кодом)
Re: Новый WEB-проект
От: RI Украина  
Дата: 20.11.06 17:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Hi ALL


А>Начинаем новый небольшой WEB-проект:

А>десяток страниц; в основном поиск, создание, удаление (сложных) Hibernate-обьектов.

А>Посоветуйте "правильный" framework.


А>Пока потратил 1 день, бегло пробежался по:

А>Spring: показалось, что много всего, на старт уйдет уйма времени, а понадобится реально 20%.
А>Struts: выглядит привлекательно
А>Tapestry: погуглил — говорят в нем граблей много. Правда есть BeanForm, что баальшой плюс.

А>Может кто добавит в двух словах?


JSF + AJAX + Spring + Hibernate
Re[2]: Новый WEB-проект
От: Igor.K США  
Дата: 20.11.06 17:46
Оценка:
RI>JSF + AJAX + Spring + Hibernate
И как скрещивать AJAX и JSF?
"СССР — четыре слова и все лживые" — Вагрич Бахчанян
Re[2]: Новый WEB-проект
От: Аноним  
Дата: 20.11.06 18:21
Оценка:
Здравствуйте, C0s, Вы писали:

C0s>для текущего проекта, который больше имеет в недрах, чем в GUI и в БД (10-15 страниц, 10-15 таблиц), я выбрал wicket + hibernate (с простой proxy-прослойкой, облегчающей transaction handling)

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

А есть в wicket аналог BeanForm? А то разных типов обьектов предвидится с пару десятков.
Re[3]: Новый WEB-проект
От: C0s Россия  
Дата: 20.11.06 23:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А есть в wicket аналог BeanForm? А то разных типов обьектов предвидится с пару десятков.


если бы я еще в точности понимал в чем есть фикус BeanForm...

вкратце, в wicket любая форма имеет html-ку, в которой, собственно, дана разметка, в которой каждому элементу дано wicket-id
java-класс этой формы имеет конструктор, в коде которого инстанцируются все элементы, и привязывается модель (java-bean)
так вот в простейшем случае предполагается совпадение имен свойств этого java-бина со значениями wicket-id input-контролов в htmlке.
при этом геттеры и сеттеры могут быть сразу типизированы (String, Integer ...), а для "сложных" контролов типа DropDown легко реализуется отделение значений от индексов вариантов (и значения, как следствие, тоже не обязательно имеют тип String)
впридачу, на все это легко навешиваются валидаторы (как по отдельным полям, так и на уровне формы)
в том же java-классе также реализуется метод onSubmit, который при успешном сабмите формы делает также редирект на нужную страницу, и все
Re: Новый WEB-проект
От: lexius www.acula.org
Дата: 21.11.06 01:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Hi ALL


А>Начинаем новый небольшой WEB-проект:

А>десяток страниц; в основном поиск, создание, удаление (сложных) Hibernate-обьектов.

А>Посоветуйте "правильный" framework.


А>Пока потратил 1 день, бегло пробежался по:

А>Spring: показалось, что много всего, на старт уйдет уйма времени, а понадобится реально 20%.
А>Struts: выглядит привлекательно
А>Tapestry: погуглил — говорят в нем граблей много. Правда есть BeanForm, что баальшой плюс.

А>Может кто добавит в двух словах?


Spring + Hibernate + DWR(Ajax)
************
www.acula.org
Re[3]: Новый WEB-проект
От: toxin Россия  
Дата: 21.11.06 06:56
Оценка:
Здравствуйте, Igor.K, Вы писали:

RI>>JSF + AJAX + Spring + Hibernate

IK>И как скрещивать AJAX и JSF?
Все уже украдено до нас :). Сам не пробывал.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Новый WEB-проект
От: slskor  
Дата: 21.11.06 08:00
Оценка:
Здравствуйте, C0s, Вы писали:

C0s>Здравствуйте, Аноним, Вы писали:


А>>Может кто добавит в двух словах?


C0s>я выбрал wicket + hibernate (с простой proxy-прослойкой, облегчающей transaction handling)


Гы. Я тоже proxy для управления транзакциями написал, после чего остался доволен вышеозначенно связкой.

Re[2]: Новый WEB-проект
От: Аноним  
Дата: 21.11.06 08:20
Оценка:
Здравствуйте, C0s, Вы писали:

с простой proxy-прослойкой, облегчающей transaction handling

можно поподробней про proxy-прослойку, как это работает ?, если можно пример
Re[3]: Новый WEB-проект
От: slskor  
Дата: 21.11.06 10:30
Оценка: 10 (4)
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, C0s, Вы писали:


А>с простой proxy-прослойкой, облегчающей transaction handling


А>можно поподробней про proxy-прослойку, как это работает ?, если можно пример


Spring умеет автоматически управлять транзакциями. Но использовать Spring только лишь ради этого — это стрелять из пушки по воробьям. Проблема решается просто. Мое решение уложилось в 6 классов.

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

Самостоятельно управлять транзакциями — стрёмно. Да и ненадёжно. Забыл где транзакцию закоммитить — ищи потом... Было бы разумно, если бы приложение само стартовало и завершало транзакцию, если мы укажем потребность в этом. Например — через аннотацию:

public class DaoImpl implements Dao {
  ...
  @Transactional
  public void processOperation();
  ...
}


Вопрос: как научить систему управлять транзакциями? Для этого надо разобраться с классом Proxy и интерфейсом InvocationHandler из состава JDK. Данная парочка умеет производить на свет классы на базе существующих, с тем же самым интерфейсом, но с измененной реализацией. Выглядит процесс перерождения примерно так:

   dao = (Dao) new DaoProxy(new DaoImpl(sessionFactory)).getProxy();


Здесь класс DaoImpl — класс с бизнес-методами, реализующий интерфейс Dao. На выходе мы получили класс с тем же самым интерфейсом, но вот что происходит внутри DaoProxy?

public class DaoProxy implements InvocationHandler {

    private Object daoProxy;
...

    public DaoProxy(Dao dao) {
        try {
            Class proxyClass = Proxy.getProxyClass(dao.getClass().getClassLoader(), dao.getClass().getInterfaces());
            daoProxy = proxyClass.getConstructor(new Class[]{InvocationHandler.class}).newInstance(new Object[]{this});
        } catch (Exception e) {
            throw new DaoException(e);
        }
    }

    public Object getProxy() {
        return daoProxy;
    }

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Object result;
        result = transactionManager.process(method, args);
        return result;
    }
}


У прокси-класса каждый вызов метода будет пропускаться через метод invoke(), и соответственно, через transactionManager.process(), который внутри выглядит примерно так:

    public Object process(Method method, Object[] args) throws Throwable {
        Object result;
        Transactional transactional = method.getAnnotation(Transactional.class);
        if (transactional == null) {
            result = method.invoke(dao, args);
        } else {
            try {
                dao.beginTransaction();
                result = method.invoke(dao, args);
                dao.commitTransaction();
            } catch (Throwable t) {
                dao.rollbackTransaction();
                throw unwrapThrowable(t);
            }
        }
        return result;
    }


Вот и все.

Кстати, если вам надо ограничить доступ к бизнес-методам или страницам, можно применить тот же самый трюк.
Re: Новый WEB-проект
От: Аноним  
Дата: 21.11.06 10:46
Оценка: :)
А>Может кто добавит в двух словах?

а может ну его, хибернейт этот со спрингом? Данные в базе, взять/положить, получить хмл, по хсл шаблону преобразовать и отдать браузеру? По-моему ничего сложного
Re[2]: Новый WEB-проект
От: Blazkowicz Россия  
Дата: 21.11.06 10:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а может ну его, хибернейт этот со спрингом? Данные в базе, взять/положить, получить хмл, по хсл шаблону преобразовать и отдать браузеру? По-моему ничего сложного


так может XML-XSLT тогда то же нафиг? Делов-то для пары десятков бинов CRUD запросы наколбасить и в JSP связать с формами!
Re[3]: Новый WEB-проект
От: toxin Россия  
Дата: 21.11.06 11:00
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

А>>а может ну его, хибернейт этот со спрингом? Данные в базе, взять/положить, получить хмл, по хсл шаблону преобразовать и отдать браузеру? По-моему ничего сложного


B>так может XML-XSLT тогда то же нафиг? Делов-то для пары десятков бинов CRUD запросы наколбасить и в JSP связать с формами!


Фи. HTML + MS IE + MS databinding + JScript = крутой ВЕБ-проект. Работы по сопровождению хватит на всех
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Новый WEB-проект
От: Blazkowicz Россия  
Дата: 21.11.06 11:01
Оценка:
Здравствуйте, toxin, Вы писали:

B>>так может XML-XSLT тогда то же нафиг? Делов-то для пары десятков бинов CRUD запросы наколбасить и в JSP связать с формами!


T>Фи. HTML + MS IE + MS databinding + JScript = крутой ВЕБ-проект. Работы по сопровождению хватит на всех


Но это уже оффтопик будет.
Re[4]: Новый WEB-проект
От: Аноним  
Дата: 21.11.06 11:24
Оценка:
Здравствуйте, slskor, Вы писали:


S>
S>public class DaoImpl implements Dao {
S>  ...
S>  @Transactional
S>  public void processOperation();
S>  ...
S>}
S>



S>У прокси-класса каждый вызов метода будет пропускаться через метод invoke(), и соответственно, через transactionManager.process(), который внутри выглядит примерно так:


S>
S>    public Object process(Method method, Object[] args) throws Throwable {
S>        Object result;
S>        Transactional transactional = method.getAnnotation(Transactional.class);
S>        if (transactional == null) {
S>            result = method.invoke(dao, args);
S>        } else {
S>            try {
S>                dao.beginTransaction();
S>                result = method.invoke(dao, args);
S>                dao.commitTransaction();
S>            } catch (Throwable t) {
S>                dao.rollbackTransaction();
S>                throw unwrapThrowable(t);
S>            }
S>        }
S>        return result;
S>    }
S>


S>Вот и все.



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

скажем class A implements XAResource {
private String a;
.......
.......
public setA(String a) {
......
}
......
......
}

A a1 = new A(TransactionManager mnr);
A a2 = new A(TransactionManager mnr);


TransactionManager.begin();
a1.setA(jjj);
a2.setA(ppp);
TransactionManager.end();


как бы в этом случае выглядел код метода public Object process(.. для a1.setA()

public Object process(Method method, Object[] args) throws Throwable {

если в текущем процессе идет тарназкция (условие: вложенные транзакции не разрешены) то
TransactionManager.enlist(...
иначе

}

вот бы такой примерчик посмотреть
Re[3]: Новый WEB-проект
От: Аноним  
Дата: 21.11.06 11:53
Оценка:
B>так может XML-XSLT тогда то же нафиг? Делов-то для пары десятков бинов CRUD запросы наколбасить и в JSP связать с формами!

в отличии от струтсов и прочей дребедени это даёт сокращение кода и разделение компонентов приложения.

Соединиться с базой, сделать запрос и отдать его в хмл — в пределах 100 строк кода. Преобразовать по XSL-шаблону и отдать браузеру — ещё 100 строк.

Получается запросы отдельно, шаблоны отдельно.

Но надо знать SQL, XSL и HTML.
Re[5]: Новый WEB-проект
От: toxin Россия  
Дата: 21.11.06 12:22
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

T>>Фи. HTML + MS IE + MS databinding + JScript = крутой ВЕБ-проект. Работы по сопровождению хватит на всех


B>Но это уже оффтопик будет.


Зато в топик будет: "как все это хозяйство портировать на J2EE, т.к. заказчик ничего кроме Линухов и Оракла не признает"
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Новый WEB-проект
От: stenkil  
Дата: 21.11.06 12:36
Оценка:
Здравствуйте, toxin, Вы писали:

T>Здравствуйте, Blazkowicz, Вы писали:


T>>>Фи. HTML + MS IE + MS databinding + JScript = крутой ВЕБ-проект. Работы по сопровождению хватит на всех


B>>Но это уже оффтопик будет.


T>Зато в топик будет: "как все это хозяйство портировать на J2EE, т.к. заказчик ничего кроме Линухов и Оракла не признает"


Действительно, про ADF как то забыли.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.