错误信息:I/O exceptioncaught when processing request: Connection timed out:connect
错误原因:IP不正确。
解决方法:改正IP
错误信息:java.lang.IllegalStateException: Ambiguoushandler methods mapped for HTTP path ‘/lowpressure.json‘
Ambiguous:模糊不清的,有歧义的
错误原因:项目中存在两个相同的RequestMapping路径
解决方法:修改其中一个名称
错误信息:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode(FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO orremove ‘readOnly‘ marker from transaction definition.
错误原因:开启了openSessionInViewFilter,而这种session的默认模式是只读。
解决方法:为其设置初始化参数singleSession=false。
<init-param>
<param-name>singleSession</param-name>
<param-value>false</param-value>
</init-param>
错误信息:
javax.servlet.ServletException:java.lang.NoClassDefFoundError:org/hibernate/exception/DataException
Caused by: java.lang.NoClassDefFoundError:org/hibernate/exception/DataException
错误原因:不明。好像是因为开启了openSessionInViewFilter(你可能不信,但确实是这样!)
解决方法:关闭openSessionInViewFilter
异常信息:Initializing connection provider:
org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider
Tomcat启动时长时间停留在此处
原因:不明!
解决方法:自愈!
错误信息:
uncaught exception: Highcharts error #13: www.highcharts.com/errors/13
highcharts画趋势图时firebug捕捉到异常!
错误原因:highchairs官网给出原因
Rendering div not found
This error occurs if the chart.renderTo option ismisconfugured so that Highcharts is unable to find the HTML element to renderthe chart in.
解决方法:配置chart.renderTo为一个存在的div的id。
错误信息:java.sql.SQLException: An attempt by a clientto checkout a Connection has timed out
错误原因:客户端从连接池中获取连接超时,通常是因为连接池中连接达到最大数量,且都被取走还未归还,出项这一现象的原因有两种:一是连接最大数配置过小不够并发使用,二是程序中存在连接泄露,有使用后未归还处。
解决方法:排查有无连接未close,若没有则增加最大连接数量!
错误信息:a differentobject with the same identifier value was already associated with the session:
错误原因:这个错误产生原因是因为在hibernate中同一个session里面有了两个相同标识但是不同实体的对象.比如通过hibernate从数据库中查出一个对象A,有手动new了一个新的对象B,并且付给B与A相同的标识符,再通过hibernate保存B,这样就在session里同时存在A和B这两个相同标识符但不同的对象。
解决方法:方法1,保存B之前,调用一下session.clear(),清空一下当前session,但此方法不适合在一次需要保存多个对象时,不推荐使用!
方法2,在保存B之前,清除一下session中A对象,只清除A对象,调用session.evict(A)即可;
方法3,通过调用session.merge(B),这样会用B去更新库中的A,但不会把B持久化,session中就不会同时存在A和B
方法4,把B对象的属性值都set到A中,然后还保存A即可。
几种方法根据业务需要选择使用,如无特殊需要,推荐采用第三种方法。
错误信息:Request[/patientSelfAction] does not contain handlerparameter named ‘method‘. This may becaused by whitespace in the label text.
该异常发生在服务器端进行new ServerSocket(port)(port是一个0,65536的整型值)操作时。异常的原因是以为与port一样的一个端口已经被启动,并进行监听。此时用netstat –an命令,可以看到一个Listending状态的端口。只需要找一个没有被占用的端口就能解决这个问题。
该异常发生在客户端进行new Socket(ip, port)操作时,该异常发生的原因是或者具有ip地址的机器不能找到(也就是说从当前机器不存在到指定ip路由),或者是该ip存在,但找不到指定的端口进行监听。出现该问题,首先检查客户端的ip和port是否写错了,如果正确则从客户端ping一下服务器看是否能ping通,如果能ping通(服务服务器端把ping禁掉则需要另外的办法),则看在服务器端的监听指定端口的程序是否启动,这个肯定能解决这个问题。
该异常在客户端和服务器均可能发生。异常的原因是己方主动关闭了连接后(调用了Socket的close方法)再对网络连接进行读写操作。
该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个,第一个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。简单的说就是在连接断开后的读和写操作引起的。
该异常在客户端和服务器均有可能发生。在第4个异常的第一种情况中(也就是抛出SocketExcepton:Connect reset by peer:Socket write error后),如果再继续写数据则抛出该异常。前两个异常的解决方法是首先确保程序退出前关闭所有的网络连接,其次是要检测对方的关闭连接操作,发现对方关闭连接后自己也要关闭该连接。
使用navicat工具导出数据库为sql文件后,其中视图的sql语句中有以下内容:
DROP VIEW IF EXISTS `bloodpressure`;
CREATE ALGORITHM=UNDEFINEDDEFINER=`root`@`` SQL SECURITY DEFINER VIEW `bloodpressure` AS....
其中DEFINER的值中@后面应该是数据库所在主机的IP地址,通过可视化工具建立连接后执行sql语句的话,可以直接使用localhost或者127.0.0.1即可,即DEFINER=`root`@`localhost`
由于各种原因需要重装MysSQL,通常会遇到原来的配置信息卸载不干净而引起重装失败的现象。那么如何才能确保MySQL卸载干净呢?如果你是通过控制面板的“添加和删除程序”来卸载MySQL的话,那么你还需要进行以下两步操作:
1、删除原数据信息,即删除C:\Documents and Settings\All Users\Application Data路径下的MySQL文件夹,有时改文件夹可能被隐藏,通过选择“工具”下的“文件夹选项”,点击“查看”,选择“隐藏文件和文件夹”下的“显示所有文件和文件夹”,就可以显示出来了。
2、删除注册表信息,运行regedit命令,以此展开,删除里面的MySQL文件夹,有几个地方:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL
引起java.lang.OutOfMemoryError: Java heap space异常,可能是由JAVA的堆栈设置太小的原因
在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。
根据网上的答案大致有以下三种解决方法:
1、在D:/apache-tomcat-6.0.18/bin/catalina.bat最前面加入:set JAVA_OPTS=-Xms200m-Xmx512m
注意:只有startup.bat启动tomcat,设置才能生效,如果利用windows的系统服务启动tomcat服务,上面的设置就不生效了,
就是说set JAVA_OPTS=-Xms200m -Xmx512m没起作用
2、在Eclilpse中修改启动参数,在VM arguments 加入了-Xms200m -Xmx512m,设置如下图所示
3、 可以在windows 更改系统环境变量,加上JAVA_OPTS=-Xms64m-Xmx512m
The endpoint reference (EPR) for the Operation not found is/EMRServer/services/BloodpressureService/getBloodpressure
错误原因:找不到资源。可能是service名称不存在,或者方法名称错误等原因
最近在做axis2,开始运行正常,今天加入spring AOP 后,出现下面的异常
org.apache.axis2.deployment.DeploymentException:The following error occurred during schema generation:
Unable to load bytecode for classcom.cmcc.emr.common.Controller.BloodpressureController$$EnhancerByCGLIB$$39228aa1
网上找资料看了之后,发现是由于axis2 不能参与事务管理,而我的写的service又刚好符合pointcut,所以报错了,后来把pointcut改写了一下,就不会报错了,
结论:service服务不能配置为切入点。
Sql in 语句 效率奇低(ExecutionTime : 24 s)
SELECT phone FROM runmessage WHERE encounterDatetime IN (SELECT MAX(encounterDatetime) FROM runmessageWHERE DATE(encounterDatetime)=‘2013-07-19‘ GROUPBY email) ORDER BY steps DESC LIMIT 0,10;
优化后:效果显著(Execution Time : 3 s)
SELECT * FROM (SELECT MAX(encounterDatetime) ASencounterDatetime,phone,steps,email FROM runmessage WHEREDATE(encounterDatetime)=‘2013-07-19‘ GROUPBY email) AS tempMessage ORDER BY tempMessage.steps DESC LIMIT 0,10;
Tomcat关闭时报出警告:
严重: The webapplication [/EMRServer] registered the JDBC driver [com.mysql.jdbc.Driver] butfailed to unregister it when the web application was stopped. To prevent amemory leak, the JDBC Driver has been forcibly unregistered.
原因未知。
错误原因:hibernate通过Hql语句进行数据库操作时,hql语句中的字段拼写错误,导致无法识别,报出此异常。比如,如果from后面写的是实体类名,后面的字段就必须是类的属性,而不能是表字段的名称。切记!!!
异常信息:org.springframework.web.util.NestedServletException:
Request processing failed; nested exceptionisorg.springframework.web.bind.annotation.support.HandlerMethodInvocationException:Failed to invoke handler method [publicorg.springframework.web.servlet.ModelAndViewcom.cmcc.emr.restful.Controller.BloodSugarController.findBloodsugar(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)throws java.lang.Exception]; nested exception isjava.lang.IllegalStateException: Could not find @PathVariable[startTime] in @RequestMapping
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:659)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
com.cmcc.emr.Util.LoginFilter.doFilter(LoginFilter.java:27)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
错误原因:
最近在使用restful规范实现webService,发现这个非常奇怪的异常!明明存在@PathVariable[startTime]这个参数,但却一直报:Couldnot find!
两个接口如下:
Post接口:
@RequestMapping(method=RequestMethod.POST, value="/bloodSugars/{idcard}/{encounterDatetime}/{beforemeal}/{aftermeal}/{appType}")
public void insertBloodSugar(@PathVariable String idcard,@PathVariable StringencounterDatetime,
@PathVariable String beforemeal,@PathVariable String aftermeal,@PathVariable StringappType,
HttpServletRequestrequest,HttpServletResponse response) throws Exception{
…
}
Get接口:
@RequestMapping(method=RequestMethod.GET, value="/bloodSugars/{idcard}/{startTime}/{endTime}/{startNum}/{offset}")
public ModelAndView findBloodsugar(@PathVariable String idcard,@PathVariable StringstartTime,@PathVariable String endTime,
@PathVariable StringstartNum,@PathVariable String offset) throws Exception{
…
}
Post接口调用正常,但是调用Get接口时,就一直报上面的这个异常,百思不得其解!!
后来各种观察,各种测试,发现当两个方法参数个数不同时,都可以正常运行,因此怀疑是restful 没能把post 和 get 方法区分清除,导致查找失败,后又做了几个测试,证明确实如此,不仅是get和post,put方法也是一样,只要参数个数相同,都会去匹配post注解下的方法,如果两个方法参数名称不同,结果就会出现Could not find @PathVariable,不明白问什么会出现这种现象,注解@RequestMapping的保留策略也是runtime的!待查。。。
Tomcat6上使用ActiveMQ AjaxServlet时,完全没有问题
但是,Tomcat7使用ActiveMQ AjaxServlet时,发生Not supported. exception
网上搜索了很多方案,都说只要对AjaxServlet加上async-supported支持就可以了。
但是,实际结果还是报同样的异常。
经过长时间的尝试,终于找到问题的原因了。
原来消息请求在AjaxServlet处理前,会先被filter先处理,所以filter也要加上async-supported支持。
具体配置代码如下:
web.xml
<!-- ActiveMQ servlet --><servlet><servlet-name>AjaxServlet</servlet-name><servlet-class>org.apache.activemq.web.AjaxServlet</servlet-class><load-on-startup>1</load-on-startup><async-supported>true</async-supported></servlet><servlet-mapping><servlet-name>AjaxServlet</servlet-name><url-pattern>/amq/*</url-pattern></servlet-mapping><!-- 著名 Character Encoding filter --><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><async-supported>true</async-supported><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><!-- 强制进行转码 --><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- ActiveMQ --><filter><filter-name>session</filter-name><filter-class>org.eclipse.jetty.continuation.ContinuationFilter</filter-class><async-supported>true</async-supported></filter><filter-mapping><filter-name>session</filter-name><url-pattern>/*</url-pattern></filter-mapping>
项目部署在tomcat下,启动的时候报错: java.net.MalformedURLException: unknown protocol: c at java.net.URL.<init>(URL.java:574) at java.net.URL.<init>(URL.java:464) at java.net.URL.<init>(URL.java:413) at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:650) at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:186) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771)...
这个错一般有两种原因导致: 1、URL协议、格式或者路径错误,好好检查下你程序中的代码 如果是路径问题,最好不要包含中文路径,因为有时中文路径会乱码,导致无法识别 Tomcat 不要安装在有中文或空格的路径下。 2、jar问题:用jdom解析xml文件,如果应用路径里有gnujaxp.jar包的话,jdom就会 调用它去解析xml文件,导致上述异常的出现。 如果是这个问题,解决方法:在应用路径里去掉对gnujaxp.jar包的引用。
问题产生的原因:用jdk7编译的class文件放到基于jdk6运行在tomcat之中,就会报这个错。
解决起来也很方便:打开eclipse中项目上的属性—java compiler–选择一个合适的版本后重新编译即可。
具体步骤
解决:项目------>右键------>属性------>Java Compiler------>Compiler Compliance Level------>选择你使用的JDK版本------>应用。
总结:不同的JDK版本使用的major.minor不同,所以会导致这个错误。在项目中要使用当前电脑配置的JDK版本,切忌张冠李戴。
知识扩充:major.minor version,它相当于一个软件的主次版本号,只是在这里是标识的一个Java Class的主版本号和次版本号。
JDK1.7 51.0
JDK1.6 50.0
JDK1.5 49.0
JDK1.4 48.0
总之问题的根由是低版本的 JVM 无法加载高版本的 class 文件造成的,找到高版本的 class 文件处理一下就行了。
Can not issue data manipulation statementswith executeQuery().
atcom.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
atcom.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
atcom.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
atcom.mysql.jdbc.StatementImpl.checkForDml(StatementImpl.java:413)
atcom.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1336)
atcom.mchange.v2.c3p0.impl.NewProxyStatement.executeQuery(NewProxyStatement.java:35)
atcom.cmcc.util.C3p0Utils.executeQuery(C3p0Utils.java:147)
错误原因:
使用executeQuery()方法执行了update,insert,delete等语句
本文总结Hibernate中常见的异常。
当出现net.sf.hibernate.MappingException: Errorreading resource:…异常时一般是因为映射文件出现错误。
当出现net.sf.hibernate.MappingException:Resource: … not found是因为XML配置文件没找到所致,有可能是放置目录不正确,或者没将其加入hibernate.cfg.xml中。
当出现net.sf.hibernate.PropertyNotFoundException:Could not find a setter for property name in class …时,原因一般是因为XML映射文件中的属性与对应的Java类中的属性的getter或setter方法不一致。
当出现org.hibernate.id.IdentifierGenerationException:ids for this class must be manually assigned before calling save():异常时,一般是因为<id>元素配置不正确,<id>元素缺少其子元素<generator></generator>的配置引起。
解决方案:<id>元素映射了相应数据库表的主键字段,对其子元素<generatorclass="">,其中class的取值可以为increment、identity、sequence、hilo、native……等,更多的可参考hibernate参考文档,一般取其值为native 。具体可参考2.2.2.1小节。
当出现a different object with the same identifiervalue was already associated with the session时,一般是因为在hibernate中同一个session里面有了两个相同标识但是是不同实体。
有如下几种解决方案:
(1)使用session.clean(),如果在clean操作后面又进行了saveOrUpdate(object)等改变数据状态的操作,有可能会报出"Found two representationsof same collection"异常。
(2)使用session.refresh(object),当object不是数据库中已有数据的对象的时候,不能使用session.refresh(object)因为该方法是从hibernate的session中去重新取object,如果session中没有这个对象,则会报错所以当你使用saveOrUpdate(object)之前还需要判断一下。
(3)session.merge(object),Hibernate里面自带的方法,推荐使用。
当出现SQL Grammer Exception,Could not executeJDBC batch update异常时,一般是由如下问题引起:
(1)SQL语句中存在语法错误或是传入的数据有误;
(2)数据库的配置不合法,或者说是配置有误。较容易出现的有数据表的映射文件(,hbm.xml文件)配置有误;Hibernate.cfg.xml文件配置有误;
(3) 当前的数据库用户权限不足,不能操作数据库。以是以Oracle 数据库为例,这种情况下在错误提示中会显示java.sql.BatchUpdateException: ORA-01031: insufficient privileges这样的信息。
针对上面的各种原因,开发人员可以找出对应的解决方案。
这个问题蛮简单,如果你用“远程桌面”连过去开启teamview的话,当你退出“远程桌面”后,外网用teamview连接就会出现这个问题, 解决方法: 不用远程连接过去开启teamview,直接在在电脑本机上手动开启teamview就可以了
已验证!
Struts1中 action这样配置的话:
<action path="/login" name="loginForm"parameter="method"
type="org.springframework.web.struts.DelegatingActionProxy" >
页面访问时:正确方式是:/login.do?method=xxx ,如果以 /login.do 访问就会报此异常
一、 java.lang.OutOfMemoryError:PermGen space PermGen space的全称是Permanent Generation space,是指内存的永久保存区域, 这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中, 它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对 PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen
space错误, 这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
解决方法: 手动设置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.sh 在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: JAVA_OPTS="-server -XX:PermSize=64M-XX:MaxPermSize=128m
二、 Windows
在catalina.bat最前面加入
set JAVA_OPTS=-Xms128m -Xmx350m
如果用startup.bat启动tomcat,OK设置生效.够成功的分配200M内存.
但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了,
就是说setJAVA_OPTS=-Xms128m -Xmx350m
没起作用.上面分配200M内存就OOM了..
windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.
解决办法:
修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\ApacheSoftware Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions
原值为
-Dcatalina.home="C:\ApacheGroup\Tomcat5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat5.0\common\endorsed"
-Xrs
加入 -Xms300m-Xmx350m
重起tomcat服务,设置生效
You have an error in your SQL syntax; check the manual thatcorresponds to your MySQL server version for the right syntax to use near‘OPTION SQL_SELECT_LIMIT=DEFAULT‘ at line 1
原因:
项目中我用的jdbc驱动版本
mysql-connector-java-5.1.15.jar
mysql数据库版本为5.6
jdbc在连接数据库时候会发送测试语句SETOPTION SQL_SELECT_LIMIT=DEFAULT
这在mysql5.6以下版本是可以的,但是5.6不再支持SET...
由于5.6这个变化,导致一些旧的软件可能运行出错。mysql官方也不承认这是bug,只能升级你的Mysql驱动来解决。
目前所知:mysql-connector-java-5.1.15.jar及以前版本不可以,
mysql-connector-java-5.1.25.jar及之后版本可以
解决方法:
升级驱动版本,我改成了mysql-connector-java-5.1.25.jar
Caused by:org.springframework.beans.factory.BeanCreationException: Could not autowirefield: public com. flex.dao.JdbcDaocom.cmcc.flex.service.PatientService.jdbcDao; nested exception isorg.springframework.beans.factory.NoSuchBeanDefinitionException: No matchingbean of type [com.flex.dao.JdbcDao] found for dependency: expected at least 1bean which qualifies as autowire candidate for this dependency. Dependencyannotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
不能创建bean,因为自动注入失败。出现此异常的原因是:注解扫描配置顺序错误,或者配置冲突,请检查各个引入的xml文件中是否有重复配置。参考配置如下:
<context:component-scan base-package="com.test"/>
<!-- enable autowire -->
<context:annotation-config />
<!-- enable transaction demarcation with annotations -->
<tx:annotation-driven />
java程序通过Runtime.getRuntime().exec()方法调用C程序可执行文件,报此异常。
最后的解决方法是:把jdk的版本从7换成了6,一切就正常了,哎!!
解决方法:export jar的时候,勾选add directory entries
Tomcat启动后报:IOException while loading persistedsessions: java.io.EOFException错误
出现原因:tomcat对保存硬盘的session读取失败
解决方法:打开TOMCAT的安装目录,在WORK文件夹找到Catalina\localhost\你的工程名所在文件夹下, 把里面的session.ser删除即可,或者直接清空localhost
原文地址:http://blog.csdn.net/rchm8519/article/details/41624381