Question

Je vais mettre en place un système basé sur Neo4j en cours d'exécution sur JRuby GlassFish. GlassFish comme avec la plupart des systèmes de rails permet d'un mécanisme d'exécuter plusieurs instances. En cas GlassFish il y a un cadre interne pour la taille du pool de fil.

Mon problème est que je rencontre des problèmes avec la base de données Neo4j étant ouvert plus d'une fois, ce qui est à l'origine d'une erreur. Je suis en train de mise à niveau vers Rails3 à tirer la dernière Neo4j.rb mais dans le même temps voulu assurer que j'avais la configuration du serveur droit.

Voici ma configuration:

#
# GlassFish configuration.
#
# Please read the comments for each configuration settings before modifying.
#
# application environment. Default value development

environment: staging
# HTTP configuration
  http:
    # port
    port: 3000

    #address
    address: 0.0.0.0

    # context root. The default value is '/'
    contextroot: /

    # Grizzly is NIO based HTTP libraries used by GlassFish gem
    grizzly:
        chunking-enabled: true
        request-timeout: 30
        send-buffer-size: 8192
        max-keepalive-connextions: 256
        keepalive-timeout: 30
        thread-pool:
            idle-thread-timeout-seconds: 900
            max-queue-size: 4096
            max-thread-pool-size: 5
            min-thread-pool-size: 2                
#Logging configuration
log:
    log-level: all
jruby-runtime-pool:
    initial: 1
    min: 1
    max: 5
daemon:
    enable: true

jvm-options: -server -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewRatio=2 -XX:+DisableExplicitGC -Dhk2.file.directory.changeIntervalTimer=6000

Était-ce utile?

La solution

Vous pouvez essayer de régler la JRuby-exécution-pool valeur maximale à 1 au lieu (ont pas testé). Si vous utilisez une application multithread (comme des rails 3 et Neo4j) Je pense qu'il n'y a pas besoin d'utiliser plus d'un JRuby-exécution, droit?

Autres conseils

Le Neo4j.start méthode prend une instance de base de données en option Neo. Je ne l'ai pas essayé, mais si vous pouvez expérimenter en sorte que seule instance Neo est créée et assurez-vous que chaque aspect d'exécution pour cette instance partagée d'abord, votre travail multiple pourrait approche d'exécution.

Où mettre l'instance partagée? Si vous utilisez dans un contexte de servlet, vous pouvez le mettre dans un attribut de contexte de servlet. Puisque vous n'êtes pas, la meilleure façon serait probablement d'écrire une petite classe Java wrapper pour le démarrage et le stockage de l'instance unique, et l'importation de cette classe Java dans chaque exécution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top