2010-08-02 3 views
1

Est-il possible de limiter la durée d'exécution du code utilisateur dans JRuby?Limite de temps d'exécution du code utilisateur (JRuby)

+0

Désolé d'être vague. Le code ruby ​​fourni par l'utilisateur est en cours d'exécution à l'intérieur de mon application Java. J'ai donc besoin d'un moyen de l'exécuter uniquement pendant un certain temps. C'est nécessaire parce que l'utilisateur peut écrire du code qui aboutit à des boucles infinies - cela devrait être évité. – instantsetsuna

+0

Je ne sais pas comment le faire en Java, mais dans Ruby vous pouvez le faire avec la librairie Timeout: http://www.ruby-doc.org/stdlib-1.9.3/libdoc/timeout/rdoc/Timeout. html –

Répondre

2

Je ne sais pas comment vous intégrez le code Ruby, mais vous pouvez facilement avoir un fil d'horloge de fond qui permet d'évaluer

raise YourTimeLimitExceededException, 'no more time' 

après une période de temps. Vous souhaiterez également désactiver Thread.new et Thread.start (ainsi que java.lang.Thread.new) pour le code utilisateur, ou ils pourraient facilement contourner votre minuteur.

+0

Pouvez-vous élaborer sur votre réponse, s'il vous plaît? (J'utilise JRuby-embed) – instantsetsuna

+0

Avoir un thread d'arrière-plan mesure le temps passé et appelle 'scriptingContainer.evalScriptlet (" raise Timeout :: Timeout ")' à partir du thread de minuteur. Vous pouvez utiliser les futures java.util.concurrent pour vous assurer que le timeout ne sera pas levé si le script se termine à temps. –

+0

Merci pour la réponse, je vais y jeter un coup d'oeil! :) – instantsetsuna

Questions connexes