Каков наиболее эффективный способ разработки веб-приложений на Java? Или, если быть более точным, скажем, приложения Wicket? - PullRequest
2 голосов
/ 22 апреля 2011

я впервые задаю вопрос здесь, я постараюсь сделать мой вопрос максимально понятным.

Я пытаюсь найти лучший процесс для разработки веб-приложений на Java. После нескольких месяцев проб и ошибок моя среда веб-разработки состоит из следующих частей:

фреймворк: Apache Wicket 1.4.16
IDE: затмение Galileo, с плагином m2eclipse
Инструменты сборки: Maven 2
Доступ к данным: EclipseLink 2.1.1 через JPA 2.0 (со StaticWeave)
СУБД: MSSQL 2005 или выше с jTDS
DI: Google Guice 2.0
разработка веб-контейнера: сервер Jetty, встроенный в плагин Maven Jetty.
Целевой веб-контейнер: Tomcat 6.x или выше

Я использую плагин maven Jetty для тестового запуска моих веб-приложений, включаю JPDA, в то время как требуется точная трассировка линии.

Всякий раз, когда в исходные коды вносятся изменения, я должен перезагрузить свое приложение, чтобы оно вступило в силу. нажмите ENTER, чтобы перезагрузить, это нормально, но после нескольких повторных загрузок (примерно 3 ~ 5 зависит от моих настроек PermGen), генерируется исключение OutOfMemoryException, после чего мне приходится завершать работу и снова запускать свое приложение. Я знаю, что автоматическая перезагрузка может быть достигнута с помощью конфигурации, но она приводит к ускорению OOME (из-за избыточных перезагрузок).

После поиска в Google я понимаю, что есть некоторые проблемы с утечкой памяти. Я попытался увеличить настройки MaxPermSize, но объем оперативной памяти на моем буфере ограничен, и нецелесообразно устанавливать что-то действительно большое. Кстати, обнаружение утечки памяти введено в Tomcat 7, и я обнаружил, что большинство утечек памяти происходит от jTDS, Google Guice и самого Wicket, но я ничего не могу с этим поделать.

Что я могу сделать, чтобы ускорить процесс разработки? Чтобы сократить время перезагрузки, я должен перейти на более продвинутый веб-контейнер, такой как Glassfish (извините, я не могу позволить себе WebLogic или WebSphere здесь.) Или что-то еще.

Заранее спасибо, любые комментарии приветствуются!

Ответы [ 2 ]

5 голосов
/ 24 апреля 2011

Я использую JRebel , это действительно очень помогает. Я все еще должен перезапустить сервер время от времени, но большинство изменений просто работают. Он идеально подходит для Java-ориентированной среды, такой как Wicket. Вы также можете попробовать DCEVM , если у вас есть «взломанная» версия JDK для разработки.

0 голосов
/ 23 апреля 2011

У меня есть простая оболочка Jetty для запуска webapp в eclipse. Если я запускаю его в режиме отладки, перезагрузка не требуется, если я не изменяю сигнатуры методов или имена полей. Перезагрузка контекста не требуется.

    import org.eclipse.jetty.server.Server;
    import org.eclipse.jetty.webapp.WebAppContext;

    public static void main(String[] args) {
       Properties properties= ...//read properties from text file
       Server server = new Server(properties.getPort());
       WebAppContext webapp = new WebAppContext(
              properties.getWebApplicationPath(), properties.getContextPath());
    server.start();
       //.... and here can be key capture for stopping Jetty

    }

где properties.getWebApplicationPath () имеет значение ./WebContent (или может различаться в зависимости от структуры вашего проекта maven).

Это не устраняет утечки памяти при развертывании в Tomcat, но может быть очень полезным в процессе разработки. Я также использую Wicket и Guice, и я не заметил утечек памяти.

...