| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > как оптимизировать работу сервлета |
| Автор: Samotnik 23.10.2007, 17:56 | ||||
| Значит есть следущее: Сервлет
и класс MessageService (обычный) в котором, тупо передается приветствие в зависимости от времени суток (к примеру Доброе утро, .. Добрый день, .... и т.д.)
Любопытно кзнать на счет этой строки MessageService msgService = new MessageService(); из сервлета! Нужна ли она, а если нужна, то чем ее заменить, ведь если на мой сервер полезут 200 человек, то этот обьект для Каждого будет создаваться заново, Так вот вопрос, как сделать что бы оптимизировать эту строку (чтоб не создавался обьект каждый раз, когда идет запрос на сервер ???) Добавлено @ 18:08 Вобщем как заменить создание обьекта MessageService msgService = new MessageService(); на что нибудь НЕ генерирующееся при каждом запросе!! |
| Автор: AntonSaburov 23.10.2007, 18:25 |
| Так сделай метод static - тогда он будет вызываться без создания объекта. |
| Автор: Samotnik 23.10.2007, 18:29 | ||
| AntonSaburov, пишу
и есттно его сделал static , а мне ошибка в ответ Cannot find symbol method getTimeBasedPrefixMessage() |
| Автор: AntonSaburov 23.10.2007, 18:35 | ||||
| Эй, ты чего. static сделать для класса MessageService.
А вызов внутри сервлета в таком виде
|
| Автор: Samotnik 23.10.2007, 18:35 |
| Прошу прощения, я ступил, нужно ведь имя класса указывать!!! |
| Автор: Samotnik 23.10.2007, 18:55 |
| AntonSaburov, Пасибо вам! Способ классный, но сказали, что не совсем корректный! Т.е. статик метод вызывает статик данные, и если 10 юзеров начнут их юзать, то с данными (или сервером) что - то случиться!! (Я точно не помню, но как-то так обьяснили) Может есть еще какой нибудь способ вызвать метод из другого класса, не создавая его обьекта!!! |
| Автор: solve 23.10.2007, 19:04 |
| потому что не указал, метод какого класса вызывается Вариант со статическим методом у меня заработал. но в любом случае внутри вызываемого метода будет каждый раз вызываться инициализация того же календаря и выигрыш в производительности будет невелик,поэтому его стоит сделать статической переменной класса |
| Автор: Samotnik 23.10.2007, 19:09 |
| solve, Я же написал, что я ступил, и все у меня заработало. Но заказчика, не устраивает такой вариант, т. к. он ..... ну в общем не устраивает он его. Есть еще какие-нить предположения о том, как можно заменить создание обьекта и static метод ?? |
| Автор: Zamuta 23.10.2007, 22:37 | ||
Да, будет создаваться заново, но если я не ошибаюсь, то неиспользуемые объекты удаляются сборщиком мусора. Samotnik, почитайте Брюса Эккеля и основные принципы ооп. |
| Автор: Kangaroo 24.10.2007, 01:25 | ||
Может от тебя хотят использование Singleton шаблона? Почитай http://www.javaworld.com/javaworld/jw-04-2003/jw-0425-designpatterns.html. Ну или любую статью в интернете, по Синглтону их много |
| Автор: Samotnik 24.10.2007, 11:35 |
| 2 all Всем спаисбо за участие, оказалось вообще все просто. Нужно было просто создать обьект в методе Инит!! Тогда, он походу будет ток один раз создаваться! |
| Автор: Kangaroo 24.10.2007, 11:44 |
| Samotnik, но про Синглетон ты все равно почитай |
| Автор: Samotnik 24.10.2007, 11:47 |
| Kangaroo, ок! Спс! |
| Автор: fixxer 25.10.2007, 10:01 | ||
Сильно в этом сомневаюсь. Ну создашь ты его в ините и куда положишь? В поле сервлета? Нехорошо. Добавлено через 1 минуту и 28 секунд Я предлагаю по совету Zamuta забить. Не такой уж тяжелый объект. GC разрулит. |
| Автор: AlexeyVorotnikov 25.10.2007, 10:23 |
| Кстати, а с чего это вы взяли, что объект MessageService будут создаваться при каждом запросе? |
| Автор: fixxer 25.10.2007, 10:32 | ||
| O! Не посмотрел код внимательно. Внесите MessageService msgService = new MessageService(); в метод. Использование полей сервлета не очень хорошая практика. Можно также положить в сессию, в JNDI или Singleton, как Вам уже говорили. Добавлено через 9 минут и 36 секунд
А с такой, что нельзя гарантировать наличие одного экземпляра класса сервлета. При каждом или не при каждом, в общем случае это не определено. |