У меня есть этот друг....
У меня есть этот друг, который работает над приложением java ee application (j2ee), начатым в начале 2000-х годов. В настоящее время они добавляют функцию здесь и там, но имеют большую базу кода. За эти годы команда сократилась на 70%.
[Да, "у меня этот друг". Это я, пытаясь с юмором ввести в заблуждение подросткового старшеклассника в миксе]
Java, Vintage 2002
Приложение использует EJB 2.1, struts 1.x, DAO и т.д. с прямыми вызовами jdbc (смесь хранимых процедур и подготовленных операторов). Нет ORM. Для кеширования они используют смесь OpenSymphony OSCache и самодельного уровня кеша.
В течение последних нескольких лет они потратили усилия на модернизацию пользовательского интерфейса, используя ajax методы и библиотеки. Это во многом связано с javascript-библиотеками (jquery, yui и т.д.).
Клиентская сторона
На стороне клиента отсутствие пути обновления от struts1 до struts2 не поощряло их переходить на struts2. Другие веб-фреймворки стали популярными (калитка, spring, jsf). Struts2 не был "явным победителем". Миграция всего существующего пользовательского интерфейса от Struts1 до Struts2/wicket/и т.д., По-видимому, не представляла очень незначительных преимуществ при очень высокой стоимости. Они не хотели иметь пэчворк технологий-du-jour (подсистема X в Struts2, подсистема Y в Wicket и т.д.), Поэтому разработчик записывает новые функции с помощью Struts 1.
Сторона сервера
На стороне сервера они переместились в ejb 3, но никогда не имели большого толчка. Разработчикам все удобно с ejb-jar.xml, EJBHome, EJBRemote, что "ejb 2.1 as is" представляет собой путь наименьшего сопротивления.
Одна большая жалоба на среду ejb: программисты все еще притворяются, что "сервер ejb работает в отдельном jvm, чем движок сервлета". Сервер приложений (jboss/weblogic) никогда не применял это разделение. Команда никогда не развертывала сервер ejb в отдельном окне, а затем на сервере приложений.
Ушной файл содержит несколько копий одного и того же файла jar; один для "веб-слоя" (foo.war/WEB-INF/lib) и один для серверной части (foo.ear/). Сервер приложений загружает только одну банку. Дубликации делают двусмысленность.
Кэширование
Что касается кэширования, они используют несколько реализаций кэш-памяти: кеш OpenSymphony и встроенный кэш. Jgroups обеспечивает поддержку кластеризации
Теперь что?
Вопрос: У команды в настоящее время есть запасные циклы для инвестиций в модернизацию приложения? Где бы их потратил интеллектуальный инвестор?
Основные критерии:
1) прирост производительности. В частности, сокращение времени на разработку новых функций подсистем и снижение уровня обслуживания. 2) производительность/масштабируемость.
Они не заботятся о моде или техно-дю-джиуэр-стрит.
Что вы все рекомендуете?
С сохранением стороны
Переключить все (или только новую разработку) на JPA/JPA2?
Прямой спящий режим?
Подождите, пока Java EE 6?
На стороне клиента/веб-структуры: Мигрировать (некоторые или все) на struts2? калитка? JSF/jsf2?
Что касается кеширования: керамическая плитка? EHCache? когерентность? придерживаться того, что у них есть? как лучше всего использовать огромные размеры кучи, предлагаемые 64-битными jvms?
Спасибо заранее.