2009-03-06 4 views
0

Je suis un développeur .Net qui commence à faire de plus en plus de développement Java au travail. J'ai une question spécifique sur la mise en cache que j'espère que vous pourrez résoudre ou proposer. Nous démarrons un projet Java qui sera déployé sur une machine Linux exécutant JBoss. Nous planifions à l'avance et essayons de réfléchir à notre stratégie de mise en cache. Une chose que nous aimerions faire est de mettre en cache les pages car notre contenu sera probablement cacheable pendant environ 8 heures. J'ai commencé à regarder mod_cache et cela fait ce que nous voulons faire. L'autre exigence que je dois respecter est que pour chaque demande, je dois faire une journalisation personnalisée. J'ai besoin de l'URL de base de la requête, puis d'autres éléments de la logique métier et je l'insère dans une base de données. Mes questions sont les suivantes:Comment sortir les fichiers cache et faire une journalisation personnalisée - projet jboss/java

1) Comment puis-je mettre du code au niveau de mod_cache pour lancer le processus de journalisation personnalisé?
2) Je veux mettre ces messages de journalisation en file d'attente parce que je ne veux pas aller à la base de données à chaque requête. Quel serait le meilleur moyen d'y remédier?

J'apprécierais des suggestions ou des solutions si vous les avez!

Répondre

1

Je suppose que votre configuration prévue est Apache httpd -> mod_cache -> mod_proxy/mod_jk -> JBoss

1) Vous ne pouvez pas, car mod_cache au niveau Apache ne soit même pas vers le bas pour appeler Java. Par conséquent, vous devrez vérifier si mod_cache possède lui-même une fonction de journalisation dans laquelle vous pouvez ajouter quelque chose, ou vous devrez modifier mod_cache et le recompiler. Cela n'a rien à voir avec Java et je ne pense pas que vous puissiez le faire en Java.

2) Encore une fois, ce n'est pas une question Java quand mod_cache gère la réponse par lui-même sans appeler JBoss. JBoss/Catalina/Tomcat sont assez rapides lorsqu'il s'agit de livrer des pages rendues par des JSP ou d'autres frameworks web. Définissez la date d'expiration du cache et laissez le navigateur gérer le cache.

0

Vous pouvez utiliser plutôt memcached. Je ne sais pas s'il existe un module d'encapsulation Tomcat/JBoss pour ce programme ou non. Il vous permettra de mettre en cache à peu près toutes les données que vous pouvez sérialiser et faire une valeur de clé de chaîne pour.

Vous devez écrire un accesseur pour ce dont vous avez besoin, qui essaie de retirer des données du processus memcached, et/ou appelle une fonction de générateur en cas d'absence de cache (ainsi que le résultat du cache). Au sein de cet accesseur, vous pouvez enregistrer les occurrences et les échecs du cache. Le démon memcached est écrit en C, bien sûr, donc il ne va pas "marquer et se balayer" lui-même en conservant des données, contrairement à java (ou la plupart des autres runtimes "modernes"). D'autre part, peut-être que mod_cache a des hooks de journalisation. Peut-être que vous devriez regarder dans cela, car cela allégera la charge sur votre processus Java.

Est-ce près du type de chose que vous cherchez?

Questions connexes