Ответ заключается в том, что вы можете сделать более или менее сложным изменение контейнеров приложений на основе ваших методов разработки. Например, портал Liferay содержит пользовательские файлы конфигурации XML для многих контейнеров приложений, что позволяет использовать его во многих контейнерах. Так что, безусловно, возможно гибкое переключение, но вам необходимо заново выполнить все файлы конфигурации для сервера, и вы не можете полагаться на функции, специфичные для контейнера.
В некоторых случаях сами контейнеры затрудняют это. Например, загрузчик классов JBoss имеет ограниченную поддержку фактических стандартов J2EE и Java EE. Это позволяет легко полагаться на нестандартные функции, а в некоторых случаях практически невозможно использовать стандартные.
Помимо того, что ваш сервер приложений обеспечивает соблюдение стандартов, вам нужно убедиться, что вам нужен полный сервер приложений, а не просто контейнер сервлетов, как упоминалось выше. Вашему приложению нужны EJB или просто сервлеты? Если вы не занимаетесь разработкой EJB, то сервер приложений перегружен.
Если вы занимаетесь разработкой EJB или иным образом используете другие функции EE, помимо того, что поставляет контейнер сервлетов, подумайте об удобстве настройки и администрирования, а также о соответствии стандартам, и я думаю, вы найдете сервер, который соответствует вашим потребностям.