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)
Répondre
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.
Pouvez-vous élaborer sur votre réponse, s'il vous plaît? (J'utilise JRuby-embed) – instantsetsuna
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. –
Merci pour la réponse, je vais y jeter un coup d'oeil! :) – instantsetsuna
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
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 –