Jruby 1.6 + Rails 3 и проблема хранилища сеансов Java сервлетов - PullRequest
0 голосов
/ 13 декабря 2011

Я обновляюсь с JRuby 1.5 до JRuby 1.6.3 и Rails 2.3.5 до Rails 3.0.

Раньше я использовал:

ActionController::Base.session_store = :java_servlet_store if defined?($servlet_context)

в config / initializer /session_store.rb

Теперь в том же файле я делаю:

Mb30::Application.config.session_store = :java_servlet_store if defined?($servlet_context)

Более ранняя версия в Production использовалась для получения jsessionid и хорошо работала с сессией.Так как я использовал хранилище сервлетов Java в Tomcat, я использовал функцию времени ожидания сеанса по умолчанию в web.xml, и она работала очень хорошо.

Однако после обновления я вижу в Firebug, что создан идентификатор jsession,но в то же время существует Rails _session_id, также созданный, и уничтожение jsessionid не уничтожает идентификатор сеанса Rails.Кроме того, у меня есть приложение HTTP-оболочки над моим приложением, которое получает ответ и отправляет его в формате xml.Здесь я понял, что jsessionid не соответствует сеансу Rails, из-за чего в API я не могу получить объекты сеанса, поскольку они устанавливаются в сеансе Rails.

Вот мои драгоценные камни:

*** LOCAL GEMS ***

abstract (1.0.0)
actionmailer (3.0.0)
actionpack (3.0.0)
activemodel (3.0.0)
activerecord (3.0.0)
activerecord-jdbc-adapter (0.9.7 java)
activerecord-jdbcpostgresql-adapter (0.9.7 java)
activeresource (3.0.0)
activesupport (3.0.0)
arel (1.0.0)
bouncy-castle-java (1.5.0146.1)
builder (2.1.2)
bundler (1.0.18)
erubis (2.6.6)
i18n (0.4.1)
jdbc-postgres (8.4.701 java)
jrails (0.6.0)
jruby-jars (1.6.3)
jruby-openssl (0.7.2, 0.7)
jruby-rack (1.1.1, 1.0.10)
mail (2.2.5)
mime-types (1.16)
polyglot (0.3.2)
rack (1.2.1)
rack-mount (0.6.12)
rack-test (0.5.4)
rails (3.0.0)
railties (3.0.0)
rake (0.9.2, 0.8.7)
rubyzip (0.9.4)
sources (0.0.1)
thor (0.14.0)
treetop (1.4.10)
tzinfo (0.3.29, 0.3.23)
warbler (1.2.0)

Может кто-нибудь сказать мне, в чем здесь проблема?

1 Ответ

0 голосов
/ 29 декабря 2011

Я предполагаю, что Mb30::Application - это ваше Rails-приложение, которое само по себе является подклассом Rails::Application, поэтому параметр конфигурации, вероятно, не подходит к ActionController::Base.

Попробуйтедобавив это к config/application.rb:

config.action_dispatch.session_store = :java_servlet_store

, а также к настройке инициализатора для хранилища сеансов в config/initializers/session_store.rb:

Mb30::Application.config.session_store :java_servlet_store

Инициализатор может не понадобиться;Я использовал это при настройке пользовательского хранилища сеансов БД, поскольку столкнулся с аналогичной проблемой.

...