Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Deployment auf Glassfish Server V3 - DB Zugriffsproblem
BeitragVerfasst: 20 Jul 2010, 14:19 
Offline
Schüler

Registriert: 11 Jun 2010, 11:44
Beiträge: 20
Hi,
ich versuche eine JRuby on Rails Anwendung auf einem Glassfish zum Laufen zu kriegen (kein Glassfish Gem!).
Damit dem Glassfish bekannt ist, wo die JRuby Installation ist, habe ich folgende Wege probiert:

1. Eintrag in den JVM-Settings des Servers
-Djruby_home=C:\Programme\JRuby\jruby-1.4.1

2. Eintrag in die Datei asenv.bat des Servers (liegt unter Glassfishv3\glassfish\domains\domain1\config).

Jeweils den Server neugestartet und die Anwendung gelauncht.

Die JRuby-Installation hat alle benötigten Gems.

Die Anwendung ist eine mittels Warbler erstellte WAR Anwendung.
Die web.xml der Anwendung hat folgenden Aufbau:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>

<context-param>
<param-name>rails.env</param-name>
<param-value>production</param-value>
</context-param>

<context-param>
<param-name>public.root</param-name>
<param-value>/</param-value>
</context-param>


<filter>
<filter-name>RackFilter</filter-name>
<filter-class>org.jruby.rack.RackFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RackFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
<listener-class>org.jruby.rack.rails.RailsServletContextListener</listener-class>
</listener>


</web-app>



Wenn ich die Anwendung dann launche, bekomme ich in der Logfile vom Glassfish immer die Fehlermeldung, dass der activerecord-jdbc-adapter fehlt, obwohl er installiert ist.

Die Anwendung beinhaltet eine Datenbankverbindung auf eine HOST DB2, welche im Test über eine Direktverbindung über TCP/IP auch funktioniert.
Im Glassfish soll die Anwendung natürlich über JNDI gehen, dafür habe ich folgenden Eintrag in der database.yml gemacht:

test:
adapter: jdbc
jndi: jdbc/services

Hier ein Auszug aus der Logfile des Glassfish:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[#|2010-07-20T14:07:08.744+0200|SEVERE|glassfishv3.0|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=29;_ThreadName=Thread-1;|WebModule[/KundenMatching]Application Error
org.jruby.rack.RackInitializationException: Please install the jdbc adapter: `gem install activerecord-jdbc-adapter` (no such file to load -- active_record/connection_adapters/jdbc_adapter)
from D:/InstallationsSW/Glassfishv3/glassfish/domains/domain1/applications/KundenMatching/WEB-INF/gems/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/connection_specification.rb:60:in `establish_connection'
from D:/InstallationsSW/Glassfishv3/glassfish/domains/domain1/applications/KundenMatching/WEB-INF/gems/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/connection_specification.rb:55:in `establish_connection'
from D:/InstallationsSW/Glassfishv3/glassfish/domains/domain1/applications/KundenMatching/WEB-INF/gems/gems/rails-2.3.5/lib/initializer.rb:438:in `initialize_database'
from D:/InstallationsSW/Glassfishv3/glassfish/domains/domain1/applications/KundenMatching/WEB-INF/gems/gems/rails-2.3.5/lib/initializer.rb:141:in `process'
from D:/InstallationsSW/Glassfishv3/glassfish/domains/domain1/applications/KundenMatching/WEB-INF/gems/gems/rails-2.3.5/lib/initializer.rb:113:in `run'
from D:/InstallationsSW/Glassfishv3/glassfish/domains/domain1/applications/KundenMatching/WEB-INF/config/environment.rb:9
from D:/InstallationsSW/Glassfishv3/glassfish/domains/domain1/applications/KundenMatching/WEB-INF/config/environment.rb:44:in `load'
from /D:/InstallationsSW/Glassfishv3/glassfish/domains/domain1/generated/jsp/KundenMatching/loader_1789167/jruby/rack/rails.rb:44:in `load_environment'
from /D:/InstallationsSW/Glassfishv3/glassfish/domains/domain1/generated/jsp/KundenMatching/loader_1789167/jruby/rack/rails.rb:38:in `to_app'
from /D:/InstallationsSW/Glassfishv3/glassfish/domains/domain1/generated/jsp/KundenMatching/loader_1789167/jruby/rack/rails.rb:186:in `new'
from <script>:2
from /D:/InstallationsSW/Glassfishv3/glassfish/domains/domain1/generated/jsp/KundenMatching/loader_1789167/vendor/rack-1.1.0/rack/builder.rb:46:in `instance_eval'
from /D:/InstallationsSW/Glassfishv3/glassfish/domains/domain1/generated/jsp/KundenMatching/loader_1789167/vendor/rack-1.1.0/rack/builder.rb:46:in `initialize'
from <script>:2:in `new'
from <script>:2




Welche Angaben muss ich machen damit der Glassfish Server die JRuby Installation findet???


Danke!


Zuletzt geändert von saschap am 22 Jul 2010, 08:05, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Deployment auf Glassfish Server V3
BeitragVerfasst: 20 Jul 2010, 17:41 
Offline
Schüler

Registriert: 01 Okt 2008, 16:50
Beiträge: 45
Hast du mal in die WAR-Datei geschaut, ob das Gem auch wirklich eingepackt wurde?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Deployment auf Glassfish Server V3
BeitragVerfasst: 21 Jul 2010, 08:38 
Offline
Schüler

Registriert: 11 Jun 2010, 11:44
Beiträge: 20
Hi Mad.

Die Anwendung ist mit drinnen und auch activerecord-2.3.5. Aaaaaber der activerecord-jdbc-adapter nicht.
Wie bekomme ich den mit rein?

Müssen wirklich die benötigten Gems in die Anwendung mit rein? Kann man die nicht über den jeweiligen Applicationserver einmalig laden?

Danke!!


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Deployment auf Glassfish Server V3
BeitragVerfasst: 21 Jul 2010, 12:09 
Offline
Schüler

Registriert: 01 Okt 2008, 16:50
Beiträge: 45
Ich glaube, die kann man auch im AppServer hinterlegen. Ein War-File sollte im Allgemeinen aber portabel sein. Soll heißen: Alle benötigten Libs stecken im War.

Einpacken konnte man die, indem man in der environment.rb den entsprechenden Eintrag vornimmt:


1
config.gem "activerecord-jdbc-adapter", :lib => false
(http://stackoverflow.com/questions/1927378/glassfish-cant-find-activerecord-jdbc-adapter)

Bei deinem JNDI-Problem hilft vielleicht folgender Post vom Glassfish-Guru Arun Gupta: http://blog.arungupta.me/2008/09/totd-44-jdbc-connection-pooling-for-rails-on-glassfish-v3/


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Deployment auf Glassfish Server V3
BeitragVerfasst: 21 Jul 2010, 15:36 
Offline
Schüler

Registriert: 11 Jun 2010, 11:44
Beiträge: 20
Hi Mad,

danke für die Antwort.

Ich erstelle die WAR File über NetBeans und den entsprechenden Rake Task.
Dabei hatte er den Adapter nicht mitgezogen, weil er es nicht wusste.

Google brachte mich dazu über die Kommandozeile in dem Projekt über die Eingabe "warble config" eine warble.rb im config-Order zu erstellen. In der rb-File habe ich folgenden Eintrag gemacht:




config.gems += ["activerecord-jdbc-adapter", "jruby-openssl"]


Dann gab es noch ein Problem mit der Warbler Version, funktionieren tut es auf jeden Fall mit der Version 1.1.0.

Mit den Voraussetzungen bindet er mir den Adapter (und alle in config.gems eingetragenen Gems) in die War-File ein.


Egal ob ich die Connection zur DB2 direkt oder über JNDI mache, ich kriege folgende Fehlermeldung, welche mir leider nicht weiterhilft:






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
Processing adressesController#index (for 192.168.115.88 at 2010-07-21 15:41:55) [GET]
Rendering template within layouts/adresses
Rendering adresses/index

ActionView::TemplateError (Invalid operation: result set closed) on line #5 of app/views/adresses/index.html.erb:
2:
3:
4: <% # Layout %>
5: <%= collection_select :adress, :id, adress.find(:all, :conditions=>["cst_number=0 and status='2'"]), :cst_number, :id, {}, {:id=>:select_kunde} %>
6: <%= observe_field :select_kunde, :url => { :action => :show_address_overview }, :update => "kundenformdiv", :with => "adress[id]"%>
7: <%= observe_field :select_kunde, :url => { :action => :clear_hostdiv1 }, :update => "hostdiv1"%>
8: <div id="kundenformdiv">

gems/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/query_cache.rb:68:in `columns_with_query_cache'
gems/gems/activerecord-2.3.5/lib/active_record/base.rb:1271:in `columns'
gems/gems/activerecord-2.3.5/lib/active_record/base.rb:1279:in `columns_hash'
gems/gems/activerecord-2.3.5/lib/active_record/base.rb:2813:in `column_for_attribute'
gems/gems/activerecord-2.3.5/lib/active_record/base.rb:2449:in `id'
gems/gems/actionpack-2.3.5/lib/action_view/helpers/form_options_helper.rb:328:in `options_from_collection_for_select'
gems/gems/actionpack-2.3.5/lib/action_view/helpers/form_options_helper.rb:327:in `each'
gems/gems/actionpack-2.3.5/lib/action_view/helpers/form_options_helper.rb:327:in `map'
gems/gems/actionpack-2.3.5/lib/action_view/helpers/form_options_helper.rb:327:in `options_from_collection_for_select'
gems/gems/actionpack-2.3.5/lib/action_view/helpers/form_options_helper.rb:542:in `to_collection_select_tag'
gems/gems/actionpack-2.3.5/lib/action_view/helpers/form_options_helper.rb:162:in `collection_select'
app/views/adresses/index.html.erb:5
gems/gems/actionpack-2.3.5/lib/action_view/renderable.rb:34:in `render'
gems/gems/actionpack-2.3.5/lib/action_view/base.rb:306:in `with_template'
gems/gems/actionpack-2.3.5/lib/action_view/renderable.rb:30:in `render'
gems/gems/actionpack-2.3.5/lib/action_view/template.rb:205:in `render_template'
gems/gems/actionpack-2.3.5/lib/action_view/base.rb:265:in `render'
gems/gems/actionpack-2.3.5/lib/action_view/base.rb:348:in `_render_with_layout'
gems/gems/actionpack-2.3.5/lib/action_view/base.rb:262:in `render'
gems/gems/actionpack-2.3.5/lib/action_controller/base.rb:1250:in `render_for_file'
gems/gems/actionpack-2.3.5/lib/action_controller/base.rb:951:in `render'
gems/gems/actionpack-2.3.5/lib/action_controller/benchmarking.rb:51:in `render_with_benchmark'
gems/gems/actionpack-2.3.5/lib/action_controller/benchmarking.rb:51:in `render_with_benchmark'
gems/gems/actionpack-2.3.5/lib/action_controller/mime_responds.rb:135:in `custom'
gems/gems/actionpack-2.3.5/lib/action_controller/mime_responds.rb:175:in `call'
gems/gems/actionpack-2.3.5/lib/action_controller/mime_responds.rb:175:in `respond'
gems/gems/actionpack-2.3.5/lib/action_controller/mime_responds.rb:173:in `each'
gems/gems/actionpack-2.3.5/lib/action_controller/mime_responds.rb:173:in `respond'
gems/gems/actionpack-2.3.5/lib/action_controller/mime_responds.rb:107:in `respond_to'
app/controllers/adresses_controller.rb:8:in `index'
gems/gems/actionpack-2.3.5/lib/action_controller/base.rb:1331:in `perform_action'
gems/gems/actionpack-2.3.5/lib/action_controller/filters.rb:617:in `call_filters'
gems/gems/actionpack-2.3.5/lib/action_controller/filters.rb:610:in `perform_action_with_filters'
gems/gems/actionpack-2.3.5/lib/action_controller/benchmarking.rb:68:in `perform_action_with_benchmark'
gems/gems/actionpack-2.3.5/lib/action_controller/benchmarking.rb:68:in `perform_action_with_benchmark'
gems/gems/actionpack-2.3.5/lib/action_controller/rescue.rb:160:in `perform_action_with_rescue'
gems/gems/actionpack-2.3.5/lib/action_controller/flash.rb:146:in `perform_action_with_flash'
gems/gems/actionpack-2.3.5/lib/action_controller/base.rb:532:in `process'
gems/gems/actionpack-2.3.5/lib/action_controller/filters.rb:606:in `process_with_filters'
gems/gems/actionpack-2.3.5/lib/action_controller/base.rb:391:in `process'
gems/gems/actionpack-2.3.5/lib/action_controller/base.rb:386:in `call'
gems/gems/actionpack-2.3.5/lib/action_controller/routing/route_set.rb:437:in `call'
gems/gems/actionpack-2.3.5/lib/action_controller/dispatcher.rb:87:in `dispatch'
gems/gems/actionpack-2.3.5/lib/action_controller/dispatcher.rb:121:in `_call'
gems/gems/actionpack-2.3.5/lib/action_controller/dispatcher.rb:130:in `build_middleware_stack'
gems/gems/activerecord-2.3.5/lib/active_record/query_cache.rb:29:in `call'
gems/gems/activerecord-2.3.5/lib/active_record/query_cache.rb:29:in `call'
gems/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/query_cache.rb:34:in `cache'
gems/gems/activerecord-2.3.5/lib/active_record/query_cache.rb:9:in `cache'
gems/gems/activerecord-2.3.5/lib/active_record/query_cache.rb:28:in `call'
gems/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:361:in `call'
gems/gems/actionpack-2.3.5/lib/action_controller/string_coercion.rb:25:in `call'
gems/gems/actionpack-2.3.5/lib/action_controller/params_parser.rb:15:in `call'
gems/gems/actionpack-2.3.5/lib/action_controller/session/cookie_store.rb:93:in `call'
gems/gems/actionpack-2.3.5/lib/action_controller/failsafe.rb:26:in `call'
gems/gems/actionpack-2.3.5/lib/action_controller/dispatcher.rb:106:in `call'
/D:/InstallationsSW/Glassfishv3/glassfish/domains/domain1/generated/jsp/KundenMatching/loader_28384535/rack/adapter/rails.rb:36:in `serve_rails'
/D:/InstallationsSW/Glassfishv3/glassfish/domains/domain1/generated/jsp/KundenMatching/loader_28384535/rack/adapter/rails.rb:41:in `call'
/D:/InstallationsSW/Glassfishv3/glassfish/domains/domain1/generated/jsp/KundenMatching/loader_28384535/jruby/rack/rails.rb:180:in `call'
/D:/InstallationsSW/Glassfishv3/glassfish/domains/domain1/generated/jsp/KundenMatching/loader_28384535/rack/handler/servlet.rb:19:in `call'
<script>:2

Rendering D:\InstallationsSW\Glassfishv3\glassfish\domains\domain1\applications\KundenMatching\/500.html (500 Internal Server Error)
|#]



Der Direktzugriff funktioniert auf meinem Entwicklungsrechner. Gestaltet ist er folgendermaßen:



1
2
3
4
5
6
  adapter: jdbc
url: jdbc:db2://IP-ADRESSE:PORTNR/DATENBANKNAME
username: USERNAME
password: PASSWORT
driver: com.ibm.db2.jcc.DB2Driver
schema: SCHEMANAME


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Deployment auf Glassfish Server V3
BeitragVerfasst: 21 Jul 2010, 15:55 
Offline
Schüler

Registriert: 01 Okt 2008, 16:50
Beiträge: 45
Hmm, der Fehler sagt mir nichts. Kenne mich da auch zu wenige mit DB2 bzw. jndi aus. Sorry, kann dir hier nicht weiterhelfen. Vielleicht jemand anders?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Deployment auf Glassfish Server V3 - DB Zugriffsproblem
BeitragVerfasst: 22 Jul 2010, 10:17 
Offline
Schüler

Registriert: 11 Jun 2010, 11:44
Beiträge: 20
Ok, trotzdem danke.

Der Fehler hat auch nicht direkt mit JNDI zu tun.
Auch bei einer Direktverbindung tritt er auf.


Es sieht ja so aus als ob Rails oder der Glassfish die DB Connection schliesst bevor die Daten abgefragt werden.
Die DB2 sollte es nicht machen, für diese ist es eine normale Anfrage wie jede andere auch.

Auf dem Glassfish laufen noch andere (Java) Anwendungen in denen dieselbe Direktverbindung und auch derselbe JNDI Zugriff funktionieren.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: