2010-04-01 6 views
1

Disons que je veux permettre à mes développeurs de télécharger leurs war fichiers à une application Web (pas le serveur d'application lui-même) en cours d'exécution sur notre intranet et que l'application web seraient alors terme ces guerres comme si elles étaient applications distinctes déployées individuellement dans notre conteneur J2EE.Est-il possible de virtualiser l'exécution de fichiers war sans déploiement de conteneur J2EE séparé?

En d'autres termes, nous ne sommes pas déployaient en fait la wars comme des applications distinctes dans le conteneur - ils sont tout simplement côte à côte à l'intérieur en cours d'exécution celui-application webqui agit comme un conteneur J2EE.

Est-ce possible?

Quelque chose comme une application de virtualisation war?

Répondre

0

Vous pouvez commencer à créer ClassLoader, étendre le .war, le chargement des classes et l'envoi de la demande à votre application à l'application Web sous droit. Cela ressemble à réinventer la roue (étant donné que le serveur de l'application le fait déjà) et est probablement très compliqué.

D'un autre côté, cela ressemble terriblement au fonctionnement de portlets. Les portlets sont empaquetés dans un fichier .war et sont ensuite utilisés par le portail. Par exemple, dans le portail Liferay, vous pouvez télécharger un portlet .war à partir du portail liferay (pas le serveur de l'application lui-même). Liferay placera ensuite le fichier .war téléchargé dans le répertoire de déploiement automatique de l'application. serveur qui sera ensuite déployé comme une application web régulière. Ensuite, il y a le pont de portlet qui envoie la demande du portail à l'application web du portlet, etc. Il vaut peut-être mieux y jeter un coup d'œil.

Je ne connais pas vos exigences, mais j'essaierais définitivement de le garder simple car de telles choses peuvent devenir vraiment compliquées. Mais vous pouvez:

  • Laisser l'utilisateur télécharger le .war de votre application
  • Manipulez le .war et web.xml pour veiller à ce que le contexte est quelque chose comme /ParentApp/ChildApp
  • Enregistrer modifié .war dans le dossier auto-deploy et laissez l'application. le serveur le déploie

Cela donnera l'illusion que vous pouvez déployer une sous-application Web à partir de votre application Web parente.

+0

C'est excellent. Tu connais vraiment tes trucs. Merci beaucoup. – Smith

0

Y a-t-il une raison particulière pour laquelle vous avez besoin d'eux pour faire face au contexte d'une autre guerre? On dirait que ce que vous devez faire pour atteindre votre objectif - il est probablement impossible de le faire si vous l'utilisez dans votre guerre - est de construire une guerre qui prend ensuite cette guerre et utilise l'API pour déployer les guerres que le serveur web expose à déployer la guerre et ainsi le laisser fonctionner comme une application web de premier niveau. Je ne pense pas qu'il existe un autre moyen de le faire.

Questions connexes