2015-08-16 51 views
0

我有一个j2ee Web应用程序部署在glassfish 4.0.1上,我想与Windows Azure数据库一起使用。微软Azure数据库和Glassfish

该应用程序使用JPA和eclipseLink。

如果我从glassfish界面ping它它的工作,所以我提供的属性是好的。

如果应用程序使用后立即启动服务器的数据库中,一切顺利的话(它可以检索/存储数据)

当应用程序试图在空闲一段时间后使用的数据库,我得到一个异常称该连接已关闭。

如果我冲洗连接(从glassfish管理员)它开始再次工作,直到它闲置一段时间。

所以基本上,只要它执行数据库操作一切正常,但如果一段时间没有数据库操作,下一个数据库操作将导致异常。

我找到了解决方案,但我很难实现它。有人能帮助我吗 ?

这里是解决方案的链接 http://www.robblackwell.org.uk/2010/12/02/java-jdbc-to-sqlazure-connection-drop-workaround.html

或这里 https://msdn.microsoft.com/en-us/library/hh290696(v=sql.110).aspx

+0

您是否将Azure VM安装在Azure VM或本地主机上?是Windows还是Linux? –

+0

@ PeterPan-MSFT它是一个Windows Server 2008R,我在localhost上安装了glassfish。 –

回答

0

按我的经验,来解决这个问题的另一种方式是,你可以通过使用Java计划框架创建一个crontab监听器“ Cron4j“或”Quartz“在您的Java Web应用程序上。 crontab监听器以小于1分钟的时间间隔发送一个简单的查询(如“从t_XXX限制为1的选择标识”),以保持数据库连接的活跃。


按“Windows + R”并运行“regedit”。检查注册表项“KeepAliveTime”,“KeepAliveInterval”和“TcpMaxDataRetransmission”是否存在于注册表树路径“HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters”中。

如果路径中不存在,则需要以管理员身份打开cmd窗口,并将以下commonds复制到cmd窗口中以运行它们。

REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v KeepAliveTime /t REG_DWORD /d 30000 
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v KeepAliveInterval /t REG_DWORD /d 1000 
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v TcpMaxDataRetransmission /t REG_DWORD /d 10 

然后,你可以在注册表中找到它们并测试问题。

最好的问候。

+0

尝试添加注册表项并测试问题。问候。 –

+0

谢谢@Peter Pan MSFT,我改变了注册表,现在似乎工作。还有一个问题,连接有多长时间? 30分钟 ? –

+0

@EvanilsonAbril,从文档看,超过30分钟的连接空闲将终止。 –