I thought SFSBs did not need to implement java.io.Serializable?
asookazian Feb 11, 2010 8:00 AMSo I was just playing around with Weld-1.0.1.CR2 and JRebel 3.0-M2-SNAPSHOT.
Couple of interesting findings:
1) I was able to add a method to the local interface of a EJB 3.0 SFSB and incrementally hot deploy using JRebel (this was not possible before).
2) The class below is the code for the SFSB I injected into the Game managed bean. Before ArbiTestBean implemented java.io.Serializable, I was seeing the following stack trace:
22:22:04,437 ERROR [AbstractKernelController] Error installing to Start: name=vfsfile:/C:/Java/jboss-6.0.0.M1/server/default/deploy/weld-numberguess.war/_WeldBootstrapBean state=Create org.jboss.weld.UnserializableDependencyException: The bean org.jboss.weld.bean-flat-ManagedBean-class org.jboss.weld.examples.numberguess.Game declares a passivating scope but has non-serializable dependency: org.jboss.weld.bean-flat-ManagedBean-class org.jboss.weld.examples.numberguess.ArbiTestBean at org.jboss.weld.Validator.validateInjectionPointPassivationCapable(Validator.java:261) at org.jboss.weld.Validator.validateInjectionPoint(Validator.java:249) at org.jboss.weld.Validator.validateBean(Validator.java:80) at org.jboss.weld.Validator.validateRIBean(Validator.java:100) at org.jboss.weld.Validator.validateBeans(Validator.java:282) at org.jboss.weld.Validator.validateDeployment(Validator.java:268) at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:389) at org.jboss.weld.integration.deployer.env.helpers.BootstrapBean.boot(BootstrapBean.java:121) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:59) at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:150) at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66) at org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelControllerContextAction.java:243) at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47) at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:111) at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchJoinPoint(KernelControllerContextAction.java:72) at org.jboss.kernel.plugins.dependency.LifecycleAction.installActionInternal(LifecycleAction.java:221) at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54) at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42) at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62) at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71) at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51) at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348) at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1633) at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:935) at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1083) at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:985) at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:775) at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:540) at org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer.deploy(BeanMetaDataDeployer.java:121) at org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer.deploy(BeanMetaDataDeployer.java:51) at org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalDeploy(AbstractSimpleRealDeployer.java:62) at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50) at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:179) at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1448) at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1166) at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1187) at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1107) at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348) at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1633) at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:935) at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1083) at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:985) at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:823) at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553) at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:783) at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:699) at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117) at org.jboss.system.server.profileservice.repository.ProfileDeployAction.install(ProfileDeployAction.java:70) at org.jboss.system.server.profileservice.repository.AbstractProfileAction.install(AbstractProfileAction.java:53) at org.jboss.system.server.profileservice.repository.AbstractProfileService.install(AbstractProfileService.java:403) at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348) at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1633) at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:935) at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1083) at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:985) at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:775) at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:540) at org.jboss.system.server.profileservice.repository.AbstractProfileService.registerProfile(AbstractProfileService.java:308) at org.jboss.system.server.profileservice.ProfileServiceBootstrap.start(ProfileServiceBootstrap.java:258) at org.jboss.system.server.profileservice.ProfileServiceBootstrap.start(ProfileServiceBootstrap.java:97) at org.jboss.bootstrap.impl.base.server.AbstractServer.startBootstraps(AbstractServer.java:860) at org.jboss.bootstrap.impl.base.server.AbstractServer$StartServerTask.run(AbstractServer.java:441) at java.lang.Thread.run(Thread.java:619) 22:22:04,500 INFO [TomcatDeployment] deploy, ctxPath=/weld-numberguess 22:22:04,687 INFO [config] Initializing Mojarra 2.0.1 (FCS b02) for context '/weld-numberguess' 22:22:13,703 WARN [Weld/Servlet] WELD-000700 Not starting Weld/Servlet integration as Weld failed to initialize 22:22:13,765 INFO [ProfileServiceBootstrap] Loading profile: ProfileKey@c33140[domain=default, server=default, name=default] 22:22:13,765 ERROR [ProfileServiceBootstrap] Failed to load profile: Summary of incomplete deployments (SEE PREVIOUS ERRORS FOR DETAILS): DEPLOYMENTS MISSING DEPENDENCIES: Deployment "vfsfile:/C:/Java/jboss-6.0.0.M1/server/default/deploy/weld-numberguess.war/_WBInjector" is missing the following dependencies: Dependency "vfsfile:/C:/Java/jboss-6.0.0.M1/server/default/deploy/weld-numberguess.war/_WeldBootstrapBean" (should be in state "Installed", but is actually in state "**ERROR**") DEPLOYMENTS IN ERROR: Deployment "vfsfile:/C:/Java/jboss-6.0.0.M1/server/default/deploy/weld-numberguess.war/_WeldBootstrapBean" is in error due to the following reason(s): **ERROR**, org.jboss.weld.UnserializableDependencyException: The bean org.jboss.weld.bean-flat-ManagedBean-class org.jboss.weld.examples.numberguess.Game declares a passivating scope but has non-serializable dependency: org.jboss.weld.bean-flat-ManagedBean-class org.jboss.weld.examples.numberguess.ArbiTestBean
I saw this stack trace before (when ArbiTestBean was a JavaBean) and after. In the latter case it doesn't make sense to me however as I thought SFSBs don't need to implement Serializable.
Here is an example from the distro which does not implement Serializable:
@Stateful @RequestScoped @Named("translator") public class TranslatorControllerBean implements TranslatorController
So what's the explanation for this?
here's the injection in the Game class:
@Inject ArbiTestBean arbi;
I'm pretty happy about the JRebel EJB interface change hot deploy!