2009-10-19 15 views
7

Per quanto comprendo JRuby, è perfettamente possibile utilizzare la classe Java all'interno del codice JRuby e viceversa, tuttavia, non riesco ancora a capire alcune cose.Limitazioni di JRuby quando si lavora con le classi Java

  • può JRuby funzionare con Annotazioni Java?
  • è possibile utilizzare la riflessione di JRuby sulla classe Java?
  • è possibile utilizzare la riflessione da Java sulla classe JRuby?
  • ho classi eseguibili in JRuby?
  • è possibile ridefinire la classe Java all'interno dello script JRuby? (allo stesso modo in cui posso ridefinire ad es. intero in C Ruby)
  • ci sono altre limitazioni che impediscono l'uso di JRuby come parte di qualsiasi applicazione Java?

risposta

9
  • può lavoro JRuby con Java annotazioni?

No. Ruby non ha annotazioni. Il compilatore ruby2java consentirà comunque di aggiungere annotazioni che vengono utilizzate durante la compilazione in un file di classe.

  • è possibile utilizzare la riflessione di JRuby su classe Java?

Sì:

java.util.Vector.methods.include? '[]' # => true 
  • è possibile utilizzare la riflessione da Java in JRuby classe?

Quando l'incorporamento JRuby utilizza BSF o JSR223? Solo nella misura in cui tali tecnologie lo consentono. Quando si usa ruby2java? Sì. Genera normali file .class di Java.

  • ho classi eseguibili in JRuby?

Non sono esattamente sicuro di cosa stai chiedendo.

  • è possibile ridefinire la classe Java all'interno dello script JRuby? (Allo stesso modo posso ridefinire esempio Integer in C Ruby.)

Sì, è possibile patch di scimmia in JRuby, ma le modifiche non sono visibili dal lato Java, basta JRuby:

import java.util.Vector 
class Vector 
    def foo 
    "foo!" 
    end 
end 
v = java.util.Vector.new 
v.foo      # => "foo!" 
  • ci sono altre limitazioni che impediscono l'uso di JRuby come parte di qualsiasi applicazione Java?

Un sacco di little gotchas abbondano quando si utilizzano Java da JRuby. ruby2java è ancora agli inizi e non sono ancora sicuro che sia pronto per un ambiente di produzione. Oltre a questo, l'attenzione si è concentrata maggiormente sullo scripting con BSF e JSR223, che possono o meno soddisfare i tuoi scopi.

+0

classi eseguibili significa che la definizione della classe è codice eseguibile, ad es. http://yehudakatz.com/2009/06/04/the-importance-of-executable-class-bodies/ o http://split-s.blogspot.com/2005/12/rubys-executable-class-definitions .html –

+0

In tal caso, sì, le classi JRuby sono esattamente come le classi Ruby. – Pesto

+1

Si noti che le annotazioni sono supportate con la chiamata ''Annazione '' java_annotation' –

3

JRuby 1.4 contiene un certo supporto per le annotazioni sulle classi Ruby, ma solo in fase di esecuzione. Guardare a http://github.com/nicksieger/ruby-jersey per un esempio di utilizzo della nuova generazione di classi di runtime per l'interoperabilità con i framework basati su annotazioni.

Il resto delle risposte di Pesto sono giuste.

1

JRuby ora supporta le annotazioni tramite java_annotation ma presenta alcune limitazioni. Uno dei più gravi nella mia esperienza finora è che richiede l'uso di become_java! (che non è documentato). Ciò impedisce di utilizzare le annotazioni sulle classi Ruby che sono state sottoclassate dalle superclassi Java a causa del problema 2359.

Questo è piuttosto problematico nella programmazione Web, dove molti framework utilizzano Annotazioni per il loro sistema di routing. Significa in effetti che non è possibile creare classi parent per i controller.

Problemi correlati