JSF+Spring+Hibernate統合のポイント
最近ずっとこのフレームワークを使っていますが、今、それらの統合のポイントについてまとめてみましょう.jsfとspringを結合するときにserviceレイヤspringでjsfを注入します.次にプロファイルを見てみましょう.
web.xml
tiles-faces-config.xmlこのファイルの内容はface-configに書かれています.xmlファイルの場合、face-configが1つしかありません.xmlファイルは、face-configに以下の内容を書き込むことができます.xmlファイルでは、複数ある場合、重複するコードを避けるために単独で提案されています.
user-tiles.xml
user-faces-config.xmlはこのファイルの中でページとクラスが関連付けられ、ここでjsfとspringの注入統合を実現します.
user-applicationContext.xml
関連するクラスとページについてはあまり書かれていませんが、ここでは主にjsfとspringのプロファイルがどのように関連しているかを見てみましょう.
web.xml
<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
// jsf
<listener>
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>
// spring
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
// jsf
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>
/WEB-INF/tiles-faces-config.xml,
/WEB-INF/conf/jsf/user-faces-config.xml
</param-value>
//
<context-param>
<param-name>tiles-definitions</param-name>
<param-value>
/WEB-INF/conf/jsf/user-tiles.xml
</param-value>
</context-param>
// spring
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/conf/spring/*.xml
</param-value>
</context-param>
// , Faces Servlet
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>Login.jsf</welcome-file>
</welcome-file-list>
</web-app>
tiles-faces-config.xmlこのファイルの内容はface-configに書かれています.xmlファイルの場合、face-configが1つしかありません.xmlファイルは、face-configに以下の内容を書き込むことができます.xmlファイルでは、複数ある場合、重複するコードを避けるために単独で提案されています.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
"http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
<faces-config>
<application>
<variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver>
</application>
</faces-config>
user-tiles.xml
<!DOCTYPE tiles-definitions
[
<!ELEMENT component-definitions (definition+)>
<!ELEMENT tiles-definitions (definition+)>
<!ELEMENT definition (put*, putList*)>
<!ATTLIST definition
name CDATA #REQUIRED
pages CDATA #IMPLIED
path CDATA #IMPLIED
extends CDATA #IMPLIED
role CDATA #IMPLIED
template CDATA #IMPLIED
controllerClass CDATA #IMPLIED
controllerUrl CDATA #IMPLIED>
<!ELEMENT put (#PCDATA)>
<!ATTLIST put
name CDATA #REQUIRED
value CDATA #IMPLIED
type (string | pages | template | definition) #IMPLIED
content CDATA #IMPLIED
direct (true | false) #IMPLIED>
<!ELEMENT putList ( (add* | item* | bean* | putList*)+) >
<!ATTLIST putList
name CDATA #REQUIRED>
<!ELEMENT putListElements (add | item | bean)>
<!ELEMENT add (#PCDATA)>
<!ATTLIST add
value CDATA #IMPLIED
type (string | pages | template | definition) #IMPLIED
content CDATA #IMPLIED
direct (true | false) #IMPLIED>
<!ELEMENT bean (#PCDATA)>
<!ATTLIST bean
classtype CDATA #REQUIRED>
<!ELEMENT item (#PCDATA)>
<!ATTLIST item
value CDATA #REQUIRED
link CDATA #REQUIRED
classtype CDATA #IMPLIED
icon CDATA #IMPLIED
tooltip CDATA #IMPLIED>
]>
<tiles-definitions>// web.xml param-name
<definition name="/Login.tiles" extends="layout.busitemplateLogin">
<put name="body" value="/pages/Login.jsp"/>
</definition>
<definition name="/user/UserManager.tiles" extends="layout.busitemplate">
<put name="body" value="/pages/user/UserManager.jsp"/>
</definition>
</tiles-definitions>
user-faces-config.xmlはこのファイルの中でページとクラスが関連付けられ、ここでjsfとspringの注入統合を実現します.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<managed-bean>
<managed-bean-name>user_loginBB</managed-bean-name>
<managed-bean-class>com.user.web.LoginBackingBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>userucc</property-name>
<value>#{user_userManageUCC}</value>// spring
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>user_userManagerBB</managed-bean-name>
<managed-bean-class>com.user.web.UserManagerBackingBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>usermanageucc</property-name>
<value>#{user_userManageUCC}</value>// spring
</managed-property>
</managed-bean>
<navigation-rule>
<from-view-id>/user/UserInfoEdit.jsp</from-view-id>//
<navigation-case>
<from-outcome>userlist</from-outcome>// bean return
<to-view-id>/user/UserManager.jsf</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
user-applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="user_loginlogdao" class="com.user.dao.LoginLogDAO">
<property name="hibernatetemplate">
<ref bean="hibernateTemplate"/>
</property>
</bean>
<bean id="user_logservice" class="com.user.service.LoginLogService">
<property name="loginlogdao">
<ref bean="user_loginlogdao"/>
</property>
</bean>
<bean id="user_userManageService" class="com.user.service.UserManageService">
...
</bean>
<!--ucc-->
<bean id="user_userManageUccImpl" class="com.user.ucc.impl.UserManageUCC">
<property name="usermanageservice">
<ref bean="user_userManageService"/>
</property>
<property name="logservice">
<ref bean="user_logservice"/>
</property>
</bean>
<!--proxy-->//
<bean id="user_userManageUCC" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="proxyInterfaces">
<list>
<value>com.user.ucc.IUserManageUCC</value>
</list>
</property>
<property name="target" ref="user_userManageUccImpl"/>
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributeSource" ref="namingTransactionAttribute"/>
</bean>
</beans>
関連するクラスとページについてはあまり書かれていませんが、ここでは主にjsfとspringのプロファイルがどのように関連しているかを見てみましょう.