Lors du déploiement d'une application Rails 3.1 sur JRuby vers JBoss, j'ai un problème de connexion jndi/jdbc. La source de données existe et se relie très bienRails 3.1 Déploiement sur JBoss 4.2.2
17:47:20,862 ERROR [STDERR] JNDI data source unavailable: javax.naming.NameNotFoundException: jdbc not bound; trying straight JDBC
17:47:20,926 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/MyApp]] unable to create shared application instance
org.jruby.rack.RackInitializationException: jdbc adapter requires driver class and url
from C:/opt/jboss/jboss-4.2.2.GA-Virgin/server/default/tmp/deploy/tmp1619261931370223075MyApp-exp.war/WEB-INF/gems/gems/activerecord-jdbc-adapter-1.2.0/lib/arjdbc/jdbc/connection.rb:21:in `configure_connection'
from C:/opt/jboss/jboss-4.2.2.GA-Virgin/server/default/tmp/deploy/tmp1619261931370223075MyApp-exp.war/WEB-INF/gems/gems/activerecord-jdbc-adapter-1.2.0/lib/arjdbc/jdbc/connection.rb:84:in `initialize'
from C:/opt/jboss/jboss-4.2.2.GA-Virgin/server/default/tmp/deploy/tmp1619261931370223075MyApp-exp.war/WEB-INF/gems/gems/activerecord-jdbc-adapter-1.2.0/lib/arjdbc/jdbc/adapter.rb:32:in `initialize'
from C:/opt/jboss/jboss-4.2.2.GA-Virgin/server/default/tmp/deploy/tmp1619261931370223075MyApp-exp.war/WEB-INF/gems/gems/activerecord-jdbc-adapter-1.2.0/lib/arjdbc/jdbc/connection_methods.rb:6:in `jdbc_connection'
from org/jruby/RubyKernel.java:2097:in `send'
...
Caused by: org.jruby.exceptions.RaiseException: (ConnectionNotEstablished) jdbc adapter requires driver class and url
17:47:23,010 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/MyApp]] Error: application initialization failed
org.jruby.rack.RackInitializationException: unable to create shared application instance
at org.jruby.rack.SharedRackApplicationFactory.init(SharedRackApplicationFactory.java:39)
at org.jruby.rack.RackServletContextListener.contextInitialized(RackServletContextListener.java:45)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3856)
database.yml
###############################################################
#################### PRODUCTION DATA ##########################
###############################################################
production:
adapter: jdbc
jndi: java:jdbc/my_datasource
driver: com.microsoft.sqlserver.jdbc.SQLServerDriver
J'ai vérifié à la fois la source de données et le fichier database.yml mais je aucune raison pour laquelle Rails ne trouve pas la source de données.
Mise à jour
Warbler config
# Disable Rake-environment-task framework detection by uncommenting/setting to false
# Warbler.framework_detection = false
#
puts 'Compiling the asset manifests & other files in the pipeline to the disk'
system('bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile')
# Warbler web application assembly configuration file
Warbler::Config.new do |config|
# Application directories to be included in the webapp.
config.dirs = %w(app config lib log vendor tmp)
# Name of the archive (without the extension). Defaults to the basename
# of the project directory.
config.jar_name = "MyApp"
# Control the pool of Rails runtimes. Leaving unspecified means
# the pool will grow as needed to service requests. It is recommended
# that you fix these values when running a production server!
config.webxml.jruby.min.runtimes = 1
config.webxml.jruby.max.runtimes = 1
# JNDI data source name
# config.webxml.jndi = 'jdbc/rails'
end
config Datasource
<datasources>
<xa-datasource>
<jndi-name>jdbc/my_datasource</jndi-name>
<track-connection-by-tx/>
<isSameRM-override-value>false</isSameRM-override-value>
<xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class>
<xa-datasource-property name="ServerName">myserver</xa-datasource-property>
<xa-datasource-property name="DatabaseName">mydb</xa-datasource-property>
<xa-datasource-property name="SelectMethod">cursor</xa-datasource-property>
<valid-connection-sql>SELECT 1</valid-connection-sql>
<user-name>user</user-name>
<password>pwd</password>
<metadata>
<type-mapping>MS SQLSERVER2000</type-mapping>
</metadata>
</xa-datasource>
</datasources>
Je vais demain. L'ampoule s'est allumée ce soir et j'ai réalisé que l'application pourrait être en train de charger avant les sources de données. Mon collègue s'est déployé très bien, mais je ne pouvais pas (JBoss frais, pas d'autres applications). http://confluence.atlassian.com/display/CONF210/Known+Issues+for+JBoss –
ajouté warble config, datasource, etc –