2009-11-13 8 views
0

Derby dispose d'une série d'options de configuration contrôlées par les propriétés du système. Il est assez pénible d'organiser les paramètres de propriété du système dans une application Web. Quelqu'un at-il trouvé une solution?Contrôle derby.log (etc) dans une application Web

En outre, j'ai été incapable de les faire fonctionner dans une application web.

Voici le code d'un écouteur de contexte de servlet. Le fichier derby.log est toujours créé dans le fichier cwd du conteneur, plutôt que d'être appelé dans ma procédure de consignation.

/** 
* Listener to try to get Derby to behave better. 
*/ 
public class ContextListener implements ServletContextListener { 

    private static final String TEMP_DIR_ATTRIBUTE = "javax.servlet.context.tempdir"; 
    private static ServletContext context; 
    private static Writer logWriter; 

    private class LogWriter extends Writer { 

     @Override 
     public void close() throws IOException { 
     } 

     @Override 
     public void flush() throws IOException { 
     } 

     @Override 
     public void write(char[] cbuf, int off, int len) throws IOException { 
      context.log(new String(cbuf, off, len)); 
     } 

    } 

    /** {@inheritDoc}*/ 
    public void contextDestroyed(ServletContextEvent sce) { 
    } 

    public static Writer getLogSteam() { 
     return logWriter; 
    } 

    /** {@inheritDoc}*/ 
    public void contextInitialized(ServletContextEvent sce) { 
     logWriter = new LogWriter(); 
     File tempDirFile = (File)sce.getServletContext().getAttribute(TEMP_DIR_ATTRIBUTE); 
     context = sce.getServletContext(); 
     System.setProperty("derby.system.home", tempDirFile.getAbsolutePath()); 
     System.setProperty("derby.stream.error.method", "com.basistech.vws.ContextListener.getLogStream"); 
    } 

} 

Répondre

0

Il existe plusieurs façons de définir les propriétés Derby. Voici quelques documents: http://db.apache.org/derby/docs/10.5/devguide/cdevsetprop24222.html Vous ne dites pas quelle partie de ce que vous trouvez être douloureuse, cependant, il est donc difficile de savoir quelle sorte de solution vous recherchez.

Quelles sont les propriétés que vous essayez de définir, et quel aspect de leur réglage s'avère pénible?

+0

Je n'aime pas dire aux clients/utilisateurs qu'ils doivent ajouter des propriétés système au lancement de tomcat/what. Ce qui semble manquer, c'est la possibilité de mettre quelque chose dans le classpath. Si j'ai raté quelque chose, laissez-moi s'il vous plaît. J'ai traversé ce document. – bmargulies

+1

Eh bien, en fonction des propriétés que vous essayez de définir et de la façon dont votre application est configurée, voici d'autres techniques: Premièrement, vous pourriez mettre un fichier derby.properties dans l'emplacement que vous utilisez comme derby maison. Deuxièmement, vous pouvez appeler System.setProperty() vous-même avant de charger le pilote Derby JDBC. –

+0

Vérifiez les réponses à http://stackoverflow.com/questions/1599043/limit-derby-log-file-size pour obtenir du code qui illustre la technique System.setProperty. –

Questions connexes