另外,还有个网上经常碰到的问题,想请问下 现在配置了这个filter后,对Update和delete等的操作,出现这个异常 org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' er from transaction definition. 网上的解决方案是在spring的配置文件中设置事务,您能把您的配置贴出来吗,针对所有以*Service类型类的事务设置 另外,我自己在Service里面用TranscationTemplate,实现了一些编程式的事务处理。和配置文件中的事务处理有冲突吗? 期待您的回复。
去年使用struts2,spring2,hibernate3写的小东西的配置你看下吧,顺序问题<?xml version="1.0" encoding="UTF-8"?>
<!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>
<display-name>corpweb</display-name>
<filter>
<filter-name>setcharacterencodingfilter</filter-name>
<filter-class>com.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>gb2312</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>setcharacterencodingfilter</filter-name>
<servlet-name>action</servlet-name>
</filter-mapping>
<listener>
<listener-class>com.listener.OnlineStatisticListener</listener-class>
</listener>
<servlet>
<servlet-name>initservlet</servlet-name>
<servlet-class>com.init.InitServlet</servlet-class>
<init-param>
<param-name>configFile</param-name>
<param-value>/WEB-INF/configfiles/configFile.xml</param-value>
</init-param>
<init-param>
<param-name>proxool</param-name>
<param-value>/WEB-INF/configfiles/proxool.xml</param-value>
</init-param>
<init-param>
<param-name>hibernateCfg</param-name>
<param-value>/WEB-INF/configfiles/hibernate.cfg.xml</param-value>
</init-param>
<init-param>
<param-name>log4jConfigFile</param-name>
<param-value>/WEB-INF/configfiles/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>imagecaptchaservlet</servlet-name>
<servlet-class>com.util.ImageCaptchaServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet>
<servlet-name>codefact</servlet-name>
<servlet-class>com.util.CodeFact</servlet-class>
</servlet>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/configfiles/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>config/infopub</param-name>
<param-value>/WEB-INF/configfiles/struts-infopub.xml</param-value>
</init-param>
<init-param>
<param-name>config/guestbook</param-name>
<param-value>/WEB-INF/configfiles/struts-guestbook.xml</param-value>
</init-param>
<init-param>
<param-name>config/employ</param-name>
<param-value>/WEB-INF/configfiles/struts-employ.xml</param-value>
</init-param>
<init-param>
<param-name>config/forum</param-name>
<param-value>/WEB-INF/configfiles/struts-forum.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>proxool</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>Connector</servlet-name>
<servlet-class>com.fredck.FCKeditor.connector.ConnectorServlet</servlet-class>
<init-param>
<param-name>baseDir</param-name>
<param-value>/UploadFiles/</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet>
<servlet-name>SimpleUploader</servlet-name>
<servlet-class>com.fredck.FCKeditor.uploader.SimpleUploaderServlet</servlet-class>
<init-param>
<param-name>baseDir</param-name>
<param-value>/UploadFiles/</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>enabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>AllowedExtensionsFile</param-name>
<param-value/>
</init-param>
<init-param>
<param-name>DeniedExtensionsFile</param-name>
<param-value>php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi</param-value>
</init-param>
<init-param>
<param-name>AllowedExtensionsImage</param-name>
<param-value>jpg|gif|jpeg|png|bmp</param-value>
</init-param>
<init-param>
<param-name>DeniedExtensionsImage</param-name>
<param-value/>
</init-param>
<init-param>
<param-name>AllowedExtensionsFlash</param-name>
<param-value>swf|fla</param-value>
</init-param>
<init-param>
<param-name>DeniedExtensionsFlash</param-name>
<param-value/>
</init-param>
<load-on-startup>4</load-on-startup>
</servlet>
<servlet>
<servlet-name>DownLoad</servlet-name>
<servlet-class>com.util.DownLoad</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Connector</servlet-name>
<url-pattern>/FCKeditor_SYJ/editor/filemanager/browser/default/connectors/jsp/connector</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SimpleUploader</servlet-name>
<url-pattern>/FCKeditor_SYJ/editor/filemanager/upload/simpleuploader</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>codefact</servlet-name>
<url-pattern>/codefact</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>imagecaptchaservlet</servlet-name>
<url-pattern>/imgCodeStr</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>proxool</servlet-name>
<url-pattern>/Admin/viewProxool</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>initservlet</servlet-name>
<url-pattern>/initservlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>DownLoad</servlet-name>
<url-pattern>/forum/servlet/DownLoad</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>20</session-timeout>
</session-config>
<taglib>
<taglib-uri>/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/tlds/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/tlds/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/tlds/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/struts-tiles.tld</taglib-uri>
<taglib-location>/WEB-INF/tlds/struts-tiles.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/struts-nested.tld</taglib-uri>
<taglib-location>/WEB-INF/tlds/struts-nested.tld</taglib-location>
</taglib>
<resource-ref>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- *************************************************************************start******** -->
<display-name>demo</display-name>
<!-- **********************************************************************context-param*********** -->
<!--spring配置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:appContext*.xml</param-value>
</context-param>
<!-- ***********************************************************************listener********** -->
<!--spring配置-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- **********************************************************************filter*********** -->
<!-- 中文过滤器 -->
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.syj.util.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<!-- hibernate3 OpenSessionInView 模式 -->
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>
com.syj.util.OpenSessionInViewFilter
</filter-class>
</filter>
<!--struct配置 -->
<filter>
<filter-name>Struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<!-- **********************************************************************filter-mapping*********** -->
<!-- 中文过滤器 -->
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- hibernate3 OpenSessionInView 模式 注意:一定配置struct mapping的前面-->
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<!--struct配置 注意:一定配置OpenSessionInView mapping的后面-->
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ************************************************************************servlet********* -->
<!-- 负责系统初始化的启动Servlet -->
<servlet>
<servlet-name>initServlet</servlet-name>
<servlet-class>com.syj.action.InitServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 配置图形码 -->
<servlet>
<servlet-name>codeFact</servlet-name>
<servlet-class>com.syj.util.CodeFact</servlet-class>
</servlet>
<!-- jfreechart显示图表 -->
<servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>
org.jfree.chart.servlet.DisplayChart
</servlet-class>
</servlet>
<!-- ************************************************************************servlet-mapping********* -->
<!-- 负责系统初始化的启动Servlet -->
<servlet-mapping>
<servlet-name>initServlet</servlet-name>
<url-pattern>/initServlet</url-pattern>
</servlet-mapping>
<!-- 配置图形码 -->
<servlet-mapping>
<servlet-name>codeFact</servlet-name>
<url-pattern>/codeFact</url-pattern>
</servlet-mapping>
<!-- jfreechart显示图表 -->
<servlet-mapping>
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/servlet/DisplayChart</url-pattern>
</servlet-mapping>
<!-- *************************************************************************jsp-config******** -->
<jsp-config>
<!--syj标签库配置-->
<taglib>
<taglib-uri>syj.tld</taglib-uri>
<taglib-location>/WEB-INF/syj.tld</taglib-location>
</taglib>
</jsp-config>
<!-- *************************************************************************end******** -->
</web-app>
ActionSupport
AbstracAction
MyOwnLogicAction
AbstracAction继承ActionSupport,里面进行相应的一些日志和权限判断处理,MyOwnLogicAction继承AbstracAction,进行我相应的业务逻辑处理。我的Service的获得,都是通过
new ClassPathXmlApplicationContext(configName).getBean("beanName")的方式里获得的 请问这样子有影响吗????
多谢
spring不在一个上下文环境里面,你要保证你的应用spring上下文环境只有一个,你不应该使用ClassPathXmlApplicationContext,你应该从web上下文中取的spring上下文环境
另外,有几个问题想请教您一下: 1、在action中调用service的时候,如果我不在spring的配置文件中配置action这个bean,那他这个action是不是通过
struts2的spring插件初始化的?是singleton类型的吗?
2、所有的bean,默认的都是singleton模式的,这个对性能会有影响吗? 期待您的回复。
2.单例的bean性能略优于非单例的bean
现在配置了这个filter后,对Update和delete等的操作,出现这个异常
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' er from transaction definition. 网上的解决方案是在spring的配置文件中设置事务,您能把您的配置贴出来吗,针对所有以*Service类型类的事务设置 另外,我自己在Service里面用TranscationTemplate,实现了一些编程式的事务处理。和配置文件中的事务处理有冲突吗?
期待您的回复。