Как использовать Spring Managed Hibernate Session в Seam?
Самый последний проект, над которым я работал, я пытался использовать Spring (3.1.1.RELEASE) Managed Hibernate Session в Seam (2.3.0.Final).
В документации по JBoss Seam, где объясняется, как использовать Seam Managed Hibernate Session весной. Но наше требование обратное, чем документация.
Я получил другое решение, использующее Spring PlatformTransactionManagement, но мое требование - использовать Spring Managed Hibernate Session в Seam. Я не хочу использовать Seam для управления Hibernate Session/Hibernate Entity Manager/Transaction. Хотите использовать инъекцию зависимостей Seam только для того, чтобы внедрить bean-компонент Spring в bean-компонент Seam через шов @In
не весна @Autowire
,
Если кто-то сталкивается с такой проблемой, пожалуйста, помогите настроить Seam components.xml
& Весна applicationContext.xml
или предоставьте мне руководство, чтобы преодолеть это.
1 ответ
Сначала настройте applicationContext.xml
как обычно вы настроили:
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<!-- hibernate Properties Here -->
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven/>
Затем настройте components.xml
следующим образом:
<core:init debug="true" transaction-management-enabled="true" />
<spring:context-loader config-locations="classpath*:/META-INF/spring/applicationContext.xml"/>
<core:manager concurrent-request-timeout="500" conversation-timeout="120000" conversation-id-parameter="cid" parent-conversation-id-parameter="pid" />
<persistence:managed-hibernate-session name="hibernateSession" auto-create="true" session-factory="#{sessionFactory}"/>
<spring:spring-transaction platform-transaction-manager="#{transactionManager}"/>
Spring(3.1.1.RELEASE) очень легко взаимодействует с Seam (2.3.0.Final), но никогда не забывайте настраивать web.xml
для шва.
<listener>
<listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<servlet>
<servlet-name>Seam Resource Servlet</servlet-name>
<servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Seam Resource Servlet</servlet-name>
<url-pattern>/resource/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>Seam Filter</filter-name>
<filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Seam Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
<session-config>
<session-timeout>10</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
Для Facelets вы должны добавить переменную резольвера в faces-config.xml
<application>
<variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver>
</application>
Лучше скачать Seam-2.3.0.Final. Узип это, внутри examples\spring\
папка вы получите желаемую конфигурацию