UnserializableDependencyException: WELD-001413: bean declares a passivating region, but has a non-passivation dependency

I have a CDI bean managed below:

@Named @SessionScoped public class InfoPageController implements Serializable { @Inject private InfoPageMapper mapper; } 

It throws an exception below when deploying to GlassFish 4.1:

 Exception while loading the app : CDI deployment failure:WELD-001413: The bean Managed Bean [class de.triaconsulting.cashyourgame.fe.controller.InfoPageController] with qualifiers [@Default @Any @Named] declares a passivating scope but has a non-passivation-capable dependency Managed Bean [class de.triaconsulting.cashyourgame.fe.mapper.InfoPageMapper] with qualifiers [@Any @Default] org.jboss.weld.exceptions.UnserializableDependencyException: WELD-001413: The bean Managed Bean [class de.triaconsulting.cashyourgame.fe.controller.InfoPageController] with qualifiers [@Default @Any @Named] declares a passivating scope but has a non-passivation-capable dependency Managed Bean [class de.triaconsulting.cashyourgame.fe.mapper.InfoPageMapper] with qualifiers [@Any @Default] at org.jboss.weld.bootstrap.Validator.validateInjectionPointPassivationCapable(Validator.java:477) at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:395) at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:291) at org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:134) at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:165) at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:529) at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:515) at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:490) at org.jboss.weld.bootstrap.WeldStartup.validateBeans(WeldStartup.java:419) at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:90) at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:225) at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:131) at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:328) at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:496) at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219) at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:539) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:535) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:356) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:534) at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:565) at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:557) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:356) at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:556) at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1464) at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:109) at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1846) at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1722) at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534) at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224) at org.glassfish.grizzly.http.server.StaticHttpHandlerBase.service(StaticHttpHandlerBase.java:189) at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545) at java.lang.Thread.run(Thread.java:745) 

How is this caused and how can I solve it?

+6
source share
2 answers

First a solution followed by an explanation:

The easiest way is to mark the InfoPageMapper mapper field in InfoPageController as transient :

 @Named @SessionScoped public class InfoPageController implements Serializable { @Inject transient private InfoPageMapper mapper; 

And now the explanation:

The error message states this in a readable language:

The bean InfoPageController, which is a SessionScoped, must be serializable, but this requires an InfoPageMapper that is not serializable or transient β€” it is not possible to determine how to serialize the InfoPageController.

There are several areas in CDI (most often SessionScope) that require beans to be Serializable - mainly because they are somehow related to an HTTP session, which may contain more objects that fit into memory and from time to time a server may be required replace them with a disk.

It seems you got this because InfoPageController implements Serializable. But this is not enough in accordance with the principles of Java serialization. You must make sure that all the fields of the members of your Serializable class are one of the following: - a primitive type (int, boolean) - an object that is serialized (all serialization rules are applied recursively) - the field is marked with the keyword transient (which is located at the same level as the private keyword)

The trick with CDI is that you can mark all entered fields as transient, because they are re-entered when the object is deserialized from disk to memory. Therefore, you will not lose the transition object, which otherwise would have been null during deserialization, since it had not previously been saved to disk.

Another solution is to create a serializable embeddable bean InfoPageMapper. But then the problem can recurs recursively with the fields entered in InfoPageMapper. The Transient keyword solves your problem when this happens, and does not cause other benas to be serializable if they don't need to.

+10
source

In response to the server error message, check the de.triaconsulting.cashyourgame.fe.mapper.InfoPageMapper file. Is InfoPageMapper Implementable Serializable or Not?

You enter the InfoPageMapper object in the session area of ​​the InfoPageController object. The objects of the session area and its member need to be serialized. Therefore, the InfoPageMapper object must be serializable.

Therefore, InfoPageMapper must implement the Serializable interface.

If you do not want to serialize the InfoPageMapper object in the InfoPageController, you can set the transient keyword in this variable.

0
source

All Articles