Archive for the 'Java' Category

Problem with JFreechart

一个基于Tomcat的程序里面用到了JFreeChart,偶尔用浏览器访问时,PC端安装的XManager的XServer会自动的打开,然后Tomcat就莫名其妙的挂掉。在没有安装XManager的PC上通常就不会出这种情况。查看一下log,如下:

Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.

搜之,此乃awt的bug。加入以下参数启动即可:

-Djava.awt.handless=true

如果是Tomcat,把上面的参数加到环境变量:CATALINA_OTPS里即可。

Upload the 3rd party artifact to local Archiva

Maven is a powerful build tool, more and more developers migrate to it, so do I. Below is the command for deploy the 3rd artifact to your local Archiva:

mvn deploy:deploy-file -DrepositoryId=internal -Durl=http://ssuzsws02:8080/archiva/repository/internal -DgroupId=com.amd.sws -DartifactId=mysql-connector-java -Dversion=3.0.17 -Dpackaging=jar -Dfile=test.jar

but before you issue this command, you should add the following lines to your local settings.xml

<servers>
  <server>
   <id>internal</id>
   <username>admin</username>
   <password>mypassword</password>
  </server>
</servers>

FYI.: when you upload your jar file to Archiva, you can't see it immediately, please be patient and wait several minutes, the artifact list will be synced soon.

Hibernate, SocketTimeOutException错误

项目中用到Hibernate,部署的时候发现,过了一段时间后,Hibernate就不能正常工作了,时间很有规律,通常是在部署后的若干个小时。错误日志如下:

** BEGIN NESTED EXCEPTION **

java.net.SocketTimeoutException
MESSAGE: Read timed out

STACKTRACE:

java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(Unknown Source)
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1392)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:1539)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1930)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1168)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1279)
    at com.mysql.jdbc.MysqlIO.sqlQuery(MysqlIO.java:1225)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:2278)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:2237)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:2218)
    at com.mysql.jdbc.Connection.commit(Connection.java:1155)
    at org.hibernate.transaction.JDBCTransaction.commitAndResetAutoCommit(JDBCTransaction.java:139)
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:115)
    at com.amd.BizB.test(BizB.java:27)
    at org.apache.jsp.index_jsp._jspService(index_jsp.java:109)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)

最后发现是由于配置文件Hibernate.cfg.xml没有写好,少加了若干的项(注意黑体部分)

<property name="connection.autocommit">true</property>

<property name="connection.url">jdbc:mysql://ssuzsws01:3306/foo?autoReconnect=true</property>

加了这些选项后,就正常了,希望对遇到类似问题的朋友有帮助。

Java中发送结构体

最近给个朋友做个网站的客户端,使用C/S模式,Client为VC6开发,Server为Java,通过Socket通信。由于Client这边为C++,所以,在接受Java发过来的数据包时,需要知道发来的包的长度,所以,就要引入变长包的机制。

方法是:首先Server发送一个包头,如下:

// packet head
typedef struct tagPacketHead{
long PacketID;
long PacketLen;
}PacketHead;

Read the rest of this entry »