データベースからタイムスタンプを取得currentTimeInMillis
して減算すると、誤った値が得られます。ログを見ると、値が 197 907 ミリ秒 / 60 000 = 119.965117 分あたりに多少シフトしているように見えます。「2時間問題」のようです。
MySQL は SYSTEM タイムゾーンを使用します。
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | SYSTEM |
+--------------------+---------------------+
また、JVM への引数はタイムゾーンを指定しません (したがって、システムのタイムゾーンを取得する必要があります)。
Web サーバーと DB サーバーは同じマシンです。
この問題は、Virtuozzo を使用する実稼働サーバーでのみ再現可能であり (まったく問題にはなりません)、私のローカルホストでは再現できません。Java6 と Java7 の両方を使用する実稼働サーバーで再現可能です。
日付は JDBC を使用してデータベースに挿入されます。
cityItemInsertStmt.setDate(3, new Date(System.currentTimeMillis());
プレーンな JDBC で読み取ります。
cityItemEntry.setVoteDate(rs.getDate("vote_date"));
システムに関する詳細情報:
Ubuntu 10.04.4 LTS 2.6.18-028stab099.3 #1 SMP 水 3 月 7 日 15:20:22 MSK 2012 x86_64 GNU/Linux jdk1.6.0_33 (x64) Oracle Web サイトから取得し、手動でインストール
グラスフィッシュへのパラメータ
/usr/lib/jvm/jdk1.6.0_33/bin/java -cp /home/glassfish/glassfish/modules/glassfish.jar -XX:+UnlockDiagnosticVMOptions -XX:PermSize=64m -XX:MaxPermSize=192m -XX:NewRatio =2 -Xmx2048m -Xms1024m -server -javaagent:/home/glassfish/glassfish/lib/monitor/flashlight-agent.jar -Dfelix.fileinstall.disableConfigSave=false -Dproduct.name -Djavax.net.ssl.keyStore=/home /glassfish/glassfish/domains/domain1/config/keystore.jks -Djava.awt.headless=true -Dfelix.fileinstall.poll=5000 -Djava.endorsed.dirs=/home/glassfish/glassfish/modules/endorsed:/home /glassfish/glassfish/lib/endorsed -Dfelix.fileinstall.bundles.startTransient=true -Djavax.net.ssl.trustStore=/home/glassfish/glassfish/domains/domain1/config/cacerts.jks -Dcom.sun.enterprise. security.httpsOutboundKeyAlias=s1as -DANTLR_USE_DIRECT_CLASS_LOADING=true -Djava.security.auth.login.config=/home/glassfish/glassfish/domains/domain1/config/login.conf -Dgosh.args=--nointeractive -Dosgi.shell.telnet.maxconn=1 -Djdbc.drivers=org.apache.derby.jdbc.ClientDriver -Dfelix.fileinstall.dir=/home/glassfish/glassfish/modules/autostart/ -Dosgi.shell.telnet.port=6666 -Djava.security.policy=/home/glassfish/glassfish/domains/domain1/config/server.ポリシー -Dfelix.fileinstall.log.level=2 -Dcom.sun.enterprise.config.config_environment_factory_class=com.sun.enterprise.config.serverbeans.AppserverConfigEnvironmentFactory -Dosgi.shell.telnet.ip=127.0.0.1 -Dcom.sun. aas.instanceRoot=/home/glassfish/glassfish/domains/domain1 -Dcom.sun.aas.installRoot=/home/glassfish/glassfish -Djava.ext.dirs=/usr/lib/jvm/jdk1.6.0_33/lib/ ext:/usr/lib/jvm/jdk1.6.0_33/jre/lib/ext:/home/glassfish/glassfish/domains/domain1/lib/ext -Dfelix.fileinstall.bundles.new.start=true -Djava.library.path=/home/glassfish/glassfish/lib:/usr/lib/jvm/jdk1.6.0_33/jre/lib/amd64/server:/usr/lib/jvm/jdk1.6.0_33 /jre/lib/amd64:/usr/lib/jvm/jdk1.6.0_33/lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib com .sun.enterprise.glassfish.bootstrap.ASMain -domainname domain1 -asadmin-args --host,,,localhost,,,--port,,,4848,,,--secure=false,,,--terse=false ,,,--echo=false,,,--interactive=false,,,開始ドメイン,,,--verbose=false,,,--debug=false,,,--domaindir,,,/home/ glassfish/glassfish/domains,,,domain1 -instancename server -verbose false -debug false -asadmin-classpath /home/glassfish/glassfish/modules/admin-cli.jar -asadmin-classname com.sun.enterprise.admin.cli. AsadminMain -upgrade false -type DAS -domaindir /home/glassfish/glassfish/domains/domain1 -read-stdin true/usr/lib/jvm/jdk1.6.0_33/jre/lib/amd64/サーバー:/usr/lib/jvm/jdk1.6.0_33/jre/lib/amd64:/usr/lib/jvm/jdk1.6.0_33/ lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib com.sun.enterprise.glassfish.bootstrap.ASMain -domainname domain1 -asadmin-args --ホスト,,,localhost,,,--port,,,4848,,,--secure=false,,,--terse=false,,,--echo=false,,,--interactive=false,,, start-domain,,,--verbose=false,,,--debug=false,,,--domaindir,,,/home/glassfish/glassfish/domains,,,domain1 -instancename server -verbose false -debug false - asadmin-classpath /home/glassfish/glassfish/modules/admin-cli.jar -asadmin-classname com.sun.enterprise.admin.cli.AsadminMain -upgrade false -type DAS -domaindir /home/glassfish/glassfish/domains/domain1 -read-stdin true/usr/lib/jvm/jdk1.6.0_33/jre/lib/amd64/サーバー:/usr/lib/jvm/jdk1.6.0_33/jre/lib/amd64:/usr/lib/jvm/jdk1.6.0_33/ lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib com.sun.enterprise.glassfish.bootstrap.ASMain -domainname domain1 -asadmin-args --ホスト,,,localhost,,,--port,,,4848,,,--secure=false,,,--terse=false,,,--echo=false,,,--interactive=false,,, start-domain,,,--verbose=false,,,--debug=false,,,--domaindir,,,/home/glassfish/glassfish/domains,,,domain1 -instancename server -verbose false -debug false - asadmin-classpath /home/glassfish/glassfish/modules/admin-cli.jar -asadmin-classname com.sun.enterprise.admin.cli.AsadminMain -upgrade false -type DAS -domaindir /home/glassfish/glassfish/domains/domain1 -read-stdin true0_33/lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib com.sun.enterprise.glassfish.bootstrap.ASMain -ドメイン名 domain1 -asadmin-args --host,,,localhost,,,--port,,,4848,,,--secure=false,,,--terse=false,,,--echo=false,,,--interactive=false, ,,start-domain,,,--verbose=false,,,--debug=false,,,--domaindir,,,/home/glassfish/glassfish/domains,,,domain1 -instancename server -verbose false -debug false -asadmin-classpath /home/glassfish/glassfish/modules/admin-cli.jar -asadmin-classname com.sun.enterprise.admin.cli.AsadminMain -upgrade false -type DAS -domaindir /home/glassfish/glassfish/domains /domain1 -read-stdin true0_33/lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib com.sun.enterprise.glassfish.bootstrap.ASMain -ドメイン名 domain1 -asadmin-args --host,,,localhost,,,--port,,,4848,,,--secure=false,,,--terse=false,,,--echo=false,,,--interactive=false, ,,start-domain,,,--verbose=false,,,--debug=false,,,--domaindir,,,/home/glassfish/glassfish/domains,,,domain1 -instancename server -verbose false -debug false -asadmin-classpath /home/glassfish/glassfish/modules/admin-cli.jar -asadmin-classname com.sun.enterprise.admin.cli.AsadminMain -upgrade false -type DAS -domaindir /home/glassfish/glassfish/domains /domain1 -read-stdin true--echo=false,,,--interactive=false,,,開始ドメイン,,,--verbose=false,,,--debug=false,,,--domaindir,,,/home/glassfish/glassfish /domains,,,domain1 -instancename server -verbose false -debug false -asadmin-classpath /home/glassfish/glassfish/modules/admin-cli.jar -asadmin-classname com.sun.enterprise.admin.cli.AsadminMain -upgrade false -タイプ DAS -domaindir /home/glassfish/glassfish/domains/domain1 -read-stdin true--echo=false,,,--interactive=false,,,開始ドメイン,,,--verbose=false,,,--debug=false,,,--domaindir,,,/home/glassfish/glassfish /domains,,,domain1 -instancename server -verbose false -debug false -asadmin-classpath /home/glassfish/glassfish/modules/admin-cli.jar -asadmin-classname com.sun.enterprise.admin.cli.AsadminMain -upgrade false -タイプ DAS -domaindir /home/glassfish/glassfish/domains/domain1 -read-stdin true