Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring + Hibernate + JSF 2.0 
:(
    Опции темы
4epT
Дата 13.4.2011, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



Добрый вечер! Пытаюсь соединить эти три фреймверка =) Расскажу по порядку:

1) Сделал для всех таблиц в БД, отображение на сущности (Entity)
2) Написал Dao классы ... Dao написаны таким образом что есть один базовый Dao:
Код

public class BaseDaoImpl<T extends Serializable> extends HibernateDaoSupport
        implements BaseDao<T> {

    @SuppressWarnings("unchecked")
    final Class entityClass;

    @SuppressWarnings("unchecked")
    public BaseDaoImpl(Class entityClass) {
        this.entityClass = entityClass;
    }

    @Transactional(readOnly = false)
    public void delete(T entity) {
        getSession().delete(entity);
        getSession().flush();
    }
....


От этого класса унаследовано все остальные Dao.
3) Сделал класс userManager, который пока что просто дублирует методы userDao.
4) В настройках спринга все описал ... но поле userDao в классе userManager не инициализируется, и при вызове методы валится NullPointerException.

Вот настройка настройка бинов:
Код

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${hibernate.driverClassName}" />
        <property name="url" value="${hibernate.url}" />
        <property name="username" value="${hibernate.username}" />
        <property name="password" value="${hibernate.password}" />
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:/hibernate.cfg.xml" />
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
        <property name="hibernateProperties">
            <props>
                    <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            </props>
        </property>
    </bean>

    <tx:annotation-driven transaction-manager="txManager" />

    <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <bean id="baseDaoImpl" class="olly.dao.BaseDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <bean id="userDaoImpl" class="olly.dao.UserDaoImpl" parent="baseDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <bean id="userManager" class="olly.managers.UserManager">
        <property name="userDao" ref="userDaoImpl" />
    </bean>


А вот класс userManager:
Код

@ManagedBean(name="userController")
@SessionScoped
@Transactional(readOnly = true)
public class UserManager
{
    private UserDaoImpl userDao;

    public UserManager(){
        
    }

    public void setUserDao(UserDaoImpl userDao) {
        this.userDao = userDao;
    }

    public String loginTwo(){

        HttpServletRequest request= (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        HttpSession session = request.getSession();

        User user = userDao.getUserByName(((User)session.getAttribute("user")).getLogin());
...


Подскажите пожалуйста где я ошибся ? Если что то не привел, скажите, допишу ... вроде все упомянул.

Заранее спасибо!  
PM MAIL   Вверх
4epT
Дата 13.4.2011, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



И еще хотел спросить, стоит ли связывать эти три вещи ? До этого начинал писать без спринга, но приходилось самому следить за транзакциями и использовать самописный HibernateUtil
Код

public class HibernateUtil
{

    private static AnnotationConfiguration aconf;

    static {
        try {
            aconf = new AnnotationConfiguration();
            aconf.addAnnotatedClass(User.class);

            Configuration conf = aconf.configure();
             }
           ....
    }

    public static SessionFactory getSessionFactory(){
        return aconf.buildSessionFactory();
    }

PM MAIL   Вверх
emmanuil
Дата 13.4.2011, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 9.1.2007

Репутация: нет
Всего: 3



Цитата(4epT @  13.4.2011,  20:13 Найти цитируемый пост)
И еще хотел спросить, стоит ли связывать эти три вещи ? До этого начинал писать без спринга, но приходилось самому следить за транзакциями и использовать самописный HibernateUtil

Если без спринга то нужен java ee сервер, простым контейнером тут не обойтись наверное.
Цитата(4epT @  13.4.2011,  19:13 Найти цитируемый пост)
Подскажите пожалуйста где я ошибся ? Если что то не привел, скажите, допишу ... вроде все упомянул.

Спринг знает, что нужно что-то делать? Прописан он в web.xml или где там еще нужно?
Попробуйте имя поля такое же как в bean id.
Со спрингом особо не знаком, догадки.
PM MAIL   Вверх
4epT
Дата 13.4.2011, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



Цитата(emmanuil @ 13.4.2011,  22:27)
Если без спринга то нужен java ee сервер, простым контейнером тут не обойтись наверное.

А можно насчет этого поподробнее ?)

В web.xml спринг не прописан ( Пытался прописать там listener, но проект после этого не собирается ...
PM MAIL   Вверх
emmanuil
Дата 13.4.2011, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 9.1.2007

Репутация: нет
Всего: 3



Цитата(4epT @  13.4.2011,  20:45 Найти цитируемый пост)
В web.xml спринг не прописан ( Пытался прописать там listener, но проект после этого не собирается ... 

Причина? Не просто так же. Чего-то не хватает значит. Если не пропишите, то он сам не догадается. ;)
Код

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>

Начните пожалуй с этого. Это с грэйлса, но в жсф где-то тоже такое видел.

Цитата(4epT @  13.4.2011,  20:45 Найти цитируемый пост)
А можно насчет этого поподробнее ?)

А что тут подробнее... Обычный java ee стек. JPA, ejb там всякие, транзакции.

В jsf 2.0 думаю можно обойтись без спринга. Но смотря что нужно. JSF это отображение в EE. Сейчас java ee стал проще, навешал аннотаций и работай себе.

Добавлено через 10 минут и 10 секунд
Вот еще:
Код

<listener>
                <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>


Добавлено через 11 минут и 23 секунды
для примера - http://code.google.com/p/mesir/source/brow...ebapp%2FWEB-INF
PM MAIL   Вверх
4epT
Дата 13.4.2011, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



Когда в web.xml прописываешь:
Код

<listener>
                <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener


проект перестает собираться ... в консоли видно вот такое:
Код

start?path=/olly
FAIL - Application at context path /olly could not be started
C:\Documents and Settings\Admin\Мои документы\NetBeansProjects\JSF projects\olly\nbproject\build-impl.xml:696: The module has not been deployed.
BUILD FAILED (total time: 2 seconds)



p.s. у меня работало без спринга, но у меня у проекта была такая архитектура что из jsf бина (ManagedBean) дергался метод какого либо менеджера (в данном примере UserManager). Все менеджеры создавались jsf бине, с областью жизни сессия ... что не очень красиво (менеджеров ожидается порядка 40 штук ... в сессия будет очень много хлама).

Это сообщение отредактировал(а) 4epT - 13.4.2011, 23:30
PM MAIL   Вверх
emmanuil
Дата 13.4.2011, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 9.1.2007

Репутация: нет
Всего: 3



Больше похоже на попытку запуска. В логах сервера смотри доп. инфу.

Цитата(4epT @  13.4.2011,  21:30 Найти цитируемый пост)
p.s. у меня работало без спринга, но у меня у проекта была такая архитектура что из jsf бина (ManagedBean) дергался метод какого либо менеджера (в данном примере UserManager). Все менеджеры создавались jsf бине, с областью жизни сессия ... что не очень красиво (менеджеров ожидается порядка 40 штук ... в сессия будет очень много хлама).

А спринг тут чем поможет? Измени видимость. Есть даже conversation. Определись, какие действия нужны с менеджерами. Тот выполняет только логин, его в request.

Добавлено через 2 минуты и 15 секунд
Есть CDI бины. weld подключи и юзай DI. @Injected нравится? smile
Тогда бины нужно Named помечать.
PM MAIL   Вверх
4epT
Дата 14.4.2011, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



В логах томкэта видно вот такое:
Код

INFO: Unsanitized stacktrace from failed start...
com.sun.faces.config.ConfigurationException: 
  Source Document: jndi:/localhost/olly/WEB-INF/faces-config.xml
  Cause: Unable to find class 'com.sun.facelets.FaceletViewHandler'
        at com.sun.faces.config.processor.AbstractConfigProcessor.createInstance(AbstractConfigProcessor.java:275)


и такое:
Код

Caused by: java.lang.ClassNotFoundException: com.sun.facelets.FaceletViewHandler
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1361)


PM MAIL   Вверх
4epT
Дата 15.4.2011, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



В общем я разобрался ) вкратце опишу как все сделал, может кому то пригодится. 

faces-config в итоге у меня пустой.

В applicationContext (контекст спринга), описываю все spring bean, dataSource (Sessionfactory), transactionManager и настройки хибера.

В web.xml прописываю путь к applicationContext, и вешая два листенера:
Код

<listener>
                <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>


помимо этого еще нужно повесить RequestLoaderListener (пишу по памяти, но вроде похоже ...), этот листенер нужен для работы с jsf.

Ну и в applicationContext, я не прописываю jsf manadeg beans, я просто из управлямых бинов (managed bean), достаю бины спринга и с ними работаю )

PM MAIL   Вверх
MisterCleric
Дата 15.4.2011, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Привет.
Вообще по своему опыту могу сказать такое:
JSF-бины, в принципе, и не нужны.
Достаточно все описать в Spring и использовать их напрямую.
Для это в faces-config.xml добавить такое:
Код

 <application>
        <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
 </application>




--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
4epT
Дата 15.4.2011, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



Использовать их напрямую откуда ? Я например хочу использовать jsf контролы наподобие рич или прайм фейсес ...
PM MAIL   Вверх
MisterCleric
Дата 15.4.2011, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



JSF-контролы - это не Managed-бины. Это визуальные компоненты. Такие себе HTML-темплейты с некоторым JavaScript кодом.


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
4epT
Дата 15.4.2011, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



то есть в атрибут action можно повесить метод/поле spring bean ? Если да, то чем такая связка лучше чем через managed bean ? =)
PM MAIL   Вверх
MisterCleric
Дата 18.4.2011, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Цитата

то есть в атрибут action можно повесить метод/поле spring bean ? Если да, то чем такая связка лучше чем через managed bean ? =) 

Тем, что  у тебя всего лишь одно место конфигурации бинов. И только один контейнер - Spring.
А еще у тебя все получается в одном стиле - спринговском.
Spring со всеми своими фреймворками более мощней, чем JSF сам по себе. И вполне возможно, что решая задачи на JSF ты однажды придешь, к тому, что у Spring уже есть готовое решение. 
Ты его подключаешь к своему проекту - и начинает разрастаться у тебя конфигурация как JSF, так и Spring.
Как по мне так лучше все в одном месте иметь. Но это сугубо мое личное мнение. Просто однажды начав проект JSF+Spring я всю конфигурацию вынес в Spring и был доволен.



--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
4epT
Дата 18.4.2011, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



Цитата(MisterCleric @ 18.4.2011,  11:15)
Тем, что  у тебя всего лишь одно место конфигурации бинов. И только один контейнер - Spring.
А еще у тебя все получается в одном стиле - спринговском.
Spring со всеми своими фреймворками более мощней, чем JSF сам по себе. И вполне возможно, что решая задачи на JSF ты однажды придешь, к тому, что у Spring уже есть готовое решение. 
Ты его подключаешь к своему проекту - и начинает разрастаться у тебя конфигурация как JSF, так и Spring.
Как по мне так лучше все в одном месте иметь. Но это сугубо мое личное мнение. Просто однажды начав проект JSF+Spring я всю конфигурацию вынес в Spring и был доволен.

А тогда такой вопрос =)

Если я отказываюсь от JSF, то логично использовать Controller из Spring MVC ... да ? а как будет обстоять дело с шаблонами ? К примеру в JSF это facelets.
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1067 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.