JSF 2 Spring XRebel Огромная сессия

1

Недавно я установил плагин XRebel, который позволяет вам видеть текущий размер сеанса.

Я обнаружил, что сеанс мгновенно доходит до 10 мб при загрузке первой страницы (инициализация сеанса сеанса аутентификации).

К моей настройке:

Я использую JSF 2.2, Spring 4 и Hibernate 4.

Уровень DAO> Уровень обслуживания> Управляемый компонент

Уровень DAO

@Named
@Singleton
@Repository
public class UserDao extends BaseDao<User>
{
...
}

Уровень обслуживания

@Service
@Named
@Singleton
public class UserService extends BaseService<User>
{


    @Autowired
    private UserDao dao;

...

}

Мой сеанс сеанса аутентификации, который загружается при загрузке первой страницы

@Named
@Component
@Scope("session")
public class Auth implements Serializable
{

    @Autowired
    private UserService userService;

    ...
}

В моем applicationContext.xml я использую

<context:component-scan base-package="com.mypackage" />

Это общая проблема, которую я имею, когда я автообновляю bean-компоненты службы в своих сессионных компонентах.

Служба Userservice содержит только методы для извлечения, сохранения и удаления пользовательских объектов, не содержащих ArrayList или каких-либо других.

У меня есть два @Autowired службы в моем Иденте бобе - UserService и SessionService.

Если я выйду из UserService, SessionService достигнет такого же размера. Если я прокомментирую и то, что есть "DestructionCallbackBindingListener" из "org.springframework.web.context.request.ServletRequestAttribute...", который достигает 8mb мгновенно.

Что я делаю не так? Как уменьшить размер сеанса?

Я с радостью принимаю любую помощь.

Вот образ XRebel, показывающий, что userService занимает около 8 МБ в сеансе. http://i.stack.imgur.com/TBXx3.png

Глядя на XRebel, кажется, что beanFactory сохраняется в сеансе пользователя.

Теги:
spring
session
jsf

1 ответ

1
Лучший ответ

Я опубликовал на официальных форумах относительно XRebel. Это ответ, который я получил.

Действительно, beanFactory доступен из сеанса через прокси CGLIB. Возможно, нам нужно будет улучшить то, как мы распознаем объекты, которые являются общими или не должны рассматриваться как часть сеанса.

Мы пытаемся показать, сколько памяти занимает каждый сеанс, но Spring beanFactories, конечно же, делится между сеансами.

Часто тот факт, что мы отфильтровываем переходные поля из сеанса, достаточно, но хорошо взгляните на прокси CGLIB/Spring, чтобы увидеть, как мы можем отфильтровывать их по общему правилу, или, может быть, мы можем просто добавить определенные классы Spring для игнорирования список.

Короче говоря: beanfactory можно игнорировать при просмотре размера сеанса, опционально, если это возможно, отметить переходный процесс с автоподдержкой.

В самом деле, вы можете игнорировать это мысленно или сейчас, если это возможно, да, делая переходные переменные исключат их.

  • 1
    К сведению, хотя общие объекты в сеансе не имеют значения как утечка памяти, они все равно будут создавать массу накладных расходов, если ваш сеанс сериализован, если только они не используют writeReplace () или подобное.
  • 0
    Есть ли способ для меня, чтобы обеспечить это или все это связано с весной, и я ничего не могу с этим поделать?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню