Tomcat - départ webapps dans un ordre spécifique
Je sais que Tomcat et le Servlet spec ne prennent pas en charge le démarrage webapps dans un ordre particulier.
Toutefois, cela me semble être une commune de cas d'utilisation, et je me demandais si quelqu'un a découvert une astucieuse solution de contournement pour elle.
J'ai Une webapp qui utilise Spring Remoting pour exposer un service partagé, dont la webapp B est un client. Webapp B ne peut pas initialiser à moins d'Une webapp est en cours d'exécution. Cependant, mon Tomcat est toujours en commençant par les webapps de façon linéaire, en commençant par webapp B.
De l'infrastructure pour des raisons que j'ai d'avoir ces fonctionnant sur le même serveur Tomcat.
Des idées?
Grâce,
Roy
Mise à JOUR -
S'avère que dans mon cas particulier, l'ordre n'a pas d'importance. La raison est que dis-je utiliser l'une des méthodes ci-dessous pour lancer Une application avant l'application B. de ce fait, l'application A commence, mais, depuis le Printemps de l'accès distant à l'aide de la HTTP Invoker, le port HTTP est pas encore ouvert (il ne s'ouvre pas jusqu'à ce que tous applications sont démarrés). Donc Un va commencer, et B va s'accrocher, parce que le port est à la recherche n'est pas encore disponible. Doh.
Résultat final a été deux instances Tomcat.
Hey Dave, unf. ils ne commencent pas en parallèle.. B commence (enfin, essaie de démarrer), puis Un va commencer après. Mais si B ne peut pas démarrer car il ne peut pas se connecter à Un, n'essaie jamais de commencer.
Il devrait démarrer en ASCII commande. Un truc que je vois sur Debian Apache installations est de créer un 000_default, 001_default convention de nommage. Qui le rend un peu plus clair lors de la visualisation de l'ASCII afin de le dir d'inscription.
OriginalL'auteur Roy Truelove | 2012-01-09
Vous devez vous connecter pour publier un commentaire.
Nous avons le même problème et pour le résoudre, nous sommes en s'appuyant sur le fait (glissant, je sais) que les applications sont lancées dans l'ordre qu'ils sont définis dans
<tomcat_home>/conf/server.xml
.Bien sûr, cela a un inconvénient de coder en dur les applications dans le
server.xml
mais nous pouvons vivre avec elle.OriginalL'auteur mindas
C'est assez facile à faire si vous n'avez pas de soins de piratage d'un peu de tomcat code et de la création de votre propre instance de l'Hôte
1) Créer une sous-classe org.apache.catalina.de base.StandardHost, dire MyHost:
2) inscrivez votre classe sur votre serveur xml Hôte tag ()
Incroyable que cela puisse paraître, il résout le problème aussi longtemps que vous avez tous vos sites web app déclaré dans le bon ordre à l'intérieur de l'Hôte tag:
Thaen app1 démarre avant app2, peu importe SI vous avez utilisé.
peut-on avoir des exemple de la configuration de l'hôte
OriginalL'auteur Luiz Henrique Martins Lins Rol
En théorie, vous pourriez frayer un
Runnable
parExecutorService
danscontextInitialized()
qui vérifie la disponibilité de l'autre webapp à intervalles de temps réguliers (peut-être en tirer un HTTPHEAD
demande?). Une fois de l'autre webapp est disponible, puis définissez un attribut dans le contexte de servlet qui indique que. Ajouter unFilter
qui vérifie la présence de l'attribut et de blocs/continue demandes en conséquence.OriginalL'auteur BalusC
Je sais que cette question est un peu vieux, mais je l'ai trouvé en essayant de faire la même chose et j'ai pensé à jour avec une meilleure solution...
Vous pouvez définir de multiples services dans votre server.xml qui s'exécutent sur différents ports. Les services sont démarrés séquentiellement selon l'ordre qu'ils apparaissent dans le server.xml. Cela signifie que vous pouvez avoir, par exemple, la configuration de service en service pour la première fois et ensuite les applications qui en dépendent dans la seconde (j'utilise celui par défaut Catalina, l'autre pour le reste d'entre eux...)
Vous pouvez voir plus d'infos ici:
http://wiki.apache.org/tomcat/FAQ/Miscellaneous#Q27
Et c'est le service que j'ai inclure avant le Catalina Service:
Comme vous pouvez le voir, j'utilise docbase plutôt que appBase, mais vous devriez être en mesure de t de configurer une autre appBase si vous préférez...
NB il est important de changer le nom de la fois le service et le moteur.
HTH
OriginalL'auteur Tom
Voici une autre astuce sur Linux.
Certains de nos webservice applications ne parviennent pas à déployer, à cause d'erreurs de fichier WSDL. Cela se produit si ils sont affectés ou qui a commencé après un certain nombre d'autres applications.
L'ordre dans lequel ils sont commencé dépend de l'ordre dans quel contexte xml se trouvent dans /opt/apache tomee/conf/Catalina/localhost
Peut être vérifié à l'aide de "
ls -1f
". Un simple "ls" donne un classement de sortie.C'est l'ordre dans lequel les fichiers ont été ajoutés à ce répertoire, mais avec des systèmes de fichiers ext4, l'ordre est basé sur un hash du nom de fichier. Cela peut être désactivé comme suit:
Maintenant, vous pouvez au moins vous de décider dans quel ordre ils seront a commencé. Réorganisation: déplacer tous les fichiers dans un dossier temporaire, de les replacer dans l'ordre souhaité.
OriginalL'auteur Gerard H. Pille
Voici une belle astuce que j'utilise pour créer 2 niveaux de webapp de chargement. dans chaque niveau, la commande n'est pas garanti. Cela repose sur le fait que tomcat va se charger en premier contexte descripteurs de tomcat/conf/[Nom Moteur]/[Nom d'Hôte] et alors seulement, les contextes de la appBase attribut de l'élément Hôte dans server.xml
Il suffit d'ajouter le code suivant quelque part dans la webapp vous voulez charger dans le 2ème niveau ( c'est à dire plus tard )
OriginalL'auteur shandor