2012-01-18 2 views
2

JRuby에서 Rails 3.1 응용 프로그램을 JBoss에 배포 할 때 jndi/jdbc 연결 문제가 있습니다. 데이터 소스는Rails 3.1에서 JBoss 4.2.2로 배포

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) 

에게 ...

############################################################### 
#################### PRODUCTION DATA ########################## 
############################################################### 

production: 
    adapter: jdbc 
    jndi: java:jdbc/my_datasource 
    driver: com.microsoft.sqlserver.jdbc.SQLServerDriver 

나는 소스와 database.yml을 파일을 모두 확인했지만 내가 가진 database.yml을

존재하고

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' 

잘 연결 Rails가 데이터 소스를 찾지 못하는 이유는 없습니다.

업데이트

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 

데이터 소스 설정 나를 위해

<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> 

답변

3

다음 작동하는 .war 파일이 레일 3.0.x의/보스 5.1.0GA 위해 warbled 배포.

성공적 같을 것이다 XML 구성 파일을 사용하여 데이터 소스를 배포 한 것으로 가정하면

<?xml version="1.0" encoding="UTF-8"?> 
<datasources> 
    <local-tx-datasource> 
     <jndi-name>my_datasource</jndi-name> 
     <connection-url>MYDATASOURCE_URL</connection-url> 
     <driver-class>your.Driver</driver-class> 
     ... define any other connection properties here ... 
    </local-tx-datasource> 
</datasources> 

당신은 당신의 데이터 소스가 실제로하고 실행하여 JBoss의 관리 콘솔에 있는지 확인해야합니다.

그런 다음, 당신은 당신의 config/warble.rb 파일에 다음이 가정 :

# JNDI data source name 
config.webxml.jndi = 'jdbc/my_datasource' 

# JBoss web-xmle file 
config.includes = 'jboss-web.xml' 

... 그리고 더 아래로, 당신은 당신의 레일 프로젝트 폴더 바로 아래에있는 jboss-web.xml 구성 파일이 있다고 가정 :

<jboss-web> 
    <resource-ref> 
     <res-ref-name>jdbc/my_datasource</res-ref-name> 
     <jndi-name>java:/my_datasource</jndi-name> 
     <res-type>javax.sql.DataSource</res-type> 
    </resource-ref> 
</jboss-web> 

... 그러면 afaik가 좋을 것입니다.

warble.rb, 데이터 소스 XML 구성 파일 및 설정중인 모든 JBoss 웹 구성 매개 변수를 게시 할 수 있습니까?

[편집] 구성 파일을 게시 해 주셔서 감사합니다. 내 머리 위로 떨어져, 난 당신에게 조언의 다음 비트를 제공 할 수 있습니다 : 당신의 database.ymljava:comp/env/jdbc/my_datasource에의

  1. 을 정정 jndi 값입니다.
  2. warble.rbconfig.webxml.jndi 구성을 정의하고 jdbc/my_datasource으로 설정하십시오.
  3. warble.rb의 새 JBoss web.xml 파일에 대한 참조를 config.includes = jboss-web.xml으로 정의하십시오.
  4. 이 새로운 jboss-web.xml을 작성하여 JNDI 이름을 JBoss 자원 참조 이름에 매핑하십시오. 공유 한 파일을 기반으로, 내가 위에 보여준 것의 라인을 따라 뭔가있을 것입니다. 이 파일은 Rails 프로젝트의 루트 바로 아래에 만들 수 있습니다.

희망이 있습니다.

+0

에 종속

<depends>jboss.jca:service=DataSourceBinding,name=mydatasource</depends> 

을 추가하여 모든 응용 프로그램을하기 전에 데이터 소스 파일의 로딩을 강제로 배웠습니다. 전구가 오늘 밤에 갔고 앱이 데이터 소스보다 먼저로드되고 있다는 것을 깨달았습니다. 동료가 잘 배치되었지만 JBoss를 사용할 수 없었습니다 (다른 JBoss 애플리케이션은 없었습니다). http://confluence.atlassian.com/display/CONF210/Known+Issues+for+JBoss –

+0

은 워블 설정, 데이터 소스 등을 추가했습니다. –

2

나는 부루 자에 몬의 조언을 받았다. 그러나 우연히 내 war 파일을 /deploy/uuid-key-generator.sar 디렉토리에 복사했는데 jboss 스택 추적이 잘못된 jruby-jars 버전을 보여준 후에 만 ​​발견했습니다. 어떻게 그 가치를 들면

, 나는

내일 것
/jboss-web.deployer/META-INF/jboss-service.xml 
+0

데이터 소스 의존성에 대한 비트를 공유해 주셔서 감사합니다 ... 잘 알고 있습니다! – buruzaemon

관련 문제