ruby-on-rails – 如何使用JRuby解决JBoss上的CachedConnectionM
我有一个问题是将J
Ruby Rails应用程序部署到JBoss中,使用JNDI来管理数据库连接.
第一次请求后我有这个错误: [CachedConnectionManager] Closing a connection for you. Please close them yourself 我认为这是因为JBoss使用连接池并期望rails(jruby)在每次使用后释放连接,这是错误的,因为rails(ActiveRecord)有自己的连接池. 我试着打电话 ActiveRecord::Base.clear_active_connections! 在每个请求之后,在after_filter中,但这没有用. 有人有点想法吗? 提前致谢. 解决方法
我也有尝试在Glassfishv3容器中以多线程模式运行Sinatra / ActiveRecord应用程序的连接池问题.该应用程序包含一个“before”块,其中包含ActiveRecord :: Base.connection以强制获取线程拥有的连接,以及一个带有ActiveRecord :: Base.clear_active_connections的“after”块!释放该连接.
多线程模式 我已经尝试了很多ActiveRecord 3.0.12和3.2.3,JNDI和Glassfish连接池,只需使用ActiveRecord的连接池,甚至猴子修补ActiveRecord连接池以完全绕过它,直接使用Glassfish池. 使用简单的多线程HTTP提取程序进行测试时,我尝试过的所有变体都会导致错误,当我增加HTTP提取程序中的工作线程时,失败请求的百分比也会增加. 对于AR 3.0.12,典型的错误是Glassfish池抛出超时异常(因为它值得,我的AR连接池比我的Glassfish池大;我理解AR将汇集连接适配器对象,并且arjdbc将获取和释放幕后的实际连接). 使用AR 3.2.3,我得到了一个更不祥的错误.下面的错误来自不使用JNDI但仅使用ActiveRecord连接池的测试.这是一个更好的配置,大约95%的请求完成正常.错误请求因此异常而失败: org.jruby.exceptions.RaiseException: (ConcurrencyError) Detected invalid hash contents due to unsynchronized modifications with concurrent users at org.jruby.RubyHash.keys(org/jruby/RubyHash.java:1356) at ActiveRecord::ConnectionAdapters::ConnectionPool.release(/Users/pat/app/glassfish/glassfish3/glassfish/domains/domain1/applications/lookup_service/WEB-INF/gems/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:294) at ActiveRecord::ConnectionAdapters::ConnectionPool.checkin(/Users/pat/app/glassfish/glassfish3/glassfish/domains/domain1/applications/lookup_service/WEB-INF/gems/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:282) at MonitorMixin.mon_synchronize(classpath:/META-INF/jruby.home/lib/ruby/1.9/monitor.rb:201) at MonitorMixin.mon_synchronize(classpath:/META-INF/jruby.home/lib/ruby/1.9/monitor.rb:200) at ActiveRecord::ConnectionAdapters::ConnectionPool.checkin(/Users/pat/app/glassfish/glassfish3/glassfish/domains/domain1/applications/lookup_service/WEB-INF/gems/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:276) at ActiveRecord::ConnectionAdapters::ConnectionPool.release_connection(/Users/pat/apps/glassfish/glassfish3/glassfish/domains/domain1/applications/lookup_service/WEB-INF/gems/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstrac/connection_pool.rb:110) at ActiveRecord::ConnectionAdapters::ConnectionHandler.clear_active_connections!(/Users/pat/apps/glassfish/glassfish3/glassfish/domains/domain1/applications/lookup_service/WEB-INF/gems/gems/activerecord-3.2.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:375) ... 单线程模式 失去对ActiveRecord(或arjdbc?)的一般线程安全性的信心,我放弃了使用ActiveRecord多线程和配置的warbler和JRuby-Rack做JRuby运行时池,模拟多个单线程Ruby进程,就像Unicorn,Thin和其他典型的Ruby服务器. 在config / warble.rb中: config.webxml.jruby.min.runtimes = 10 config.webxml.jruby.max.runtimes = 10 我这次使用JNDI重新进行了测试,所有请求都完成了没有错误! 我的Glassfish连接池大小为5.请注意,jruby运行时的数量大于连接池大小.使JRuby运行时池大于数据库连接池可能没什么意义,因为在这个应用程序中,每个请求都使用数据库连接,但我只是想确保即使争用数据库连接我也没有时间 – 我在多线程模式下看到的错误. 至少可以说,这些并发性问题令人失望.是否有人在温和并发下成功使用ActiveRecord?我知道在Rails应用程序中,必须调用config.threadsafe!避免全局锁定.查看代码,它似乎不会修改任何ActiveRecord设置;有没有ActiveRecord的配置我不做? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- cocos2dx3.1从零学习(二)菜单、场景切换、场景
- 【道森试听】flashback——Dave偶像
- MT 202 General Financial Institution Transfer
- 【COCOS2DX-LUA 脚本开发之八】使用quick-cocos2
- 108.You are installing Oracle Database 11g on
- 正则匹配与替换 regexp & regsub
- C#接口在派生类和外部类中的调用方法示例
- SmartRF Flash Programmer1.6.2打不开程序界面问
- oracle在导入数据时报600错误的解决方法
- postgresql where having