2013-03-20 8 views
0

Я пытаюсь создать масштабируемое приложение JSF. Я хотел бы сохранить состояния просмотра на стороне клиента, но у меня проблемы с ViewScoped ManagedBean с атрибутами CDI Injected.NotSerializableException на ViewScoped ManagedBean с CDI Injected properties

SomeService.java:

@Singleton 
public class SomeService { 
    // ... 
} 

SomeBean.java

@ManagedBean 
@ViewScoped 
public class SomeBean implements Serializable { 

      @Inject 
      private SomeService someService; 
} 

К сожалению GlassFish не удается сериализовать someService, которые я не хочу быть serializabled но закачивается.

Я попытался сделать это переходным процессом, который заканчивается исключением NullPointerException при доступе к someService после де-сериализации.

Что мне делать?

Я знаю, что я мог бы использовать CDI ViewScoped с Seam Faces или CODI, но я хочу свести к минимуму большинство зависимостей.

Я также могу дождаться JEE7, который предоставит @ViewScoped для CDI, но мы не будем использовать JEE7 до нескольких месяцев.

UPDATE:
Я просто хотел бы добавить, что я использовал встроенный EJB в комплекте в банку, которая сама связана с моей войны. Трассировка стека NotSerializableException имеет следующее сообщение: com.company.core.service.__EJB31_Generated__SomeService__Intf____Bean__

+0

Почему вы вводите EJB с помощью '@ Inject' CDI вместо EJB EJB? – BalusC

+0

Я действительно не понимаю, в соответствии с [link] (http://www.adam-bien.com/roller/abien/entry/inject_vs_ejb) лучше использовать '@ EJB' в некоторых случаях. Я попытался перейти от '@ Inject' к' @ EJB' без каких-либо улучшений. Есть ли у вас рекомендации? –

ответ

0

мне не нравится самостоятельно отвечать на мои собственные вопросы, но после еще некоторых исследований я обнаружил, что это была ошибка в Mojarra 2.1.6 (я использую Glassfish 3.1.2.2), который теперь решен в Мохарре 2.1.20.

Для обновления Mojarra вам просто нужно скачать более свежую версию (например: https://maven.java.net/content/repositories/releases/org/glassfish/javax.faces/2.1.20/javax.faces-2.1.20.jar) и поместить ее в каталог $ GLASSFISH/modules как javax.faces.jar.

Смежные вопросы