我在Glassfish 3.1.2.2中使用JavaEE6。我有一个EJB项目,其中包含无状态会话bean,还有一个WEB项目,包含命名的会话范围类。
例如:
命名类
@Named
@SessionScoped
public class MyWebController implements Serializable {
@EJB
private MyBean myBean;
}
EJB类
@Stateless
public class MyBean {
@PersistenceContext
private EntityManager em;
}
项目正在运行,但当我进行代码分析时,我收到以下消息。
可序列化类中的非暂时性不可序列化实例字段
这个Serializable类定义了一个非基元实例字段,它既不是transient、Serializable,也不是java.lang.Object,并且似乎没有实现Externalizable接口或readObject()和writeObject()方法。如果不可序列化的对象存储在此字段中,则此类的对象将不会被正确反序列化。
有人知道吗,我能重构我的代码来避免这种情况吗?
不是这些主题的专家,但请尝试以下主题:
1) 确保您使用的是正确的@SessionScoped
注释:
@Named
@javax.enterprise.context.SessionScoped
public class MyWebController implements Serializable {
@EJB
private MyBean myBean;
}
2) 也尝试使用可序列化的 EJB:
@Stateless
public class MyBean implements Serializable {
...
}
3)如果此解决方案一直损坏。尝试使用@Inject
而不是@EJB
我的项目中有无状态实体bean(EJB3.x)和EJBbean(EJB2.x)以及其他类。我想将实体Bean注入EJB Bean。到目前为止,我能够使用JNDI方式(即BeanName#completename)注入它,但我想使用@EJB注入它,就像我们在没有任何JNDI查找的情况下将实体bean注入另一个实体bean一样。这两个bean都是不同模块的一部分,但部署在同一台服务器上。我将weblo
null 最好的选择是什么? (哦,我正在使用wicket作为框架,如果这与此有任何关系的话) 编辑: null 谢谢!
问题内容: 我尚未遇到任何与序列化相关的问题。但是PMD和Findbugs发现了一系列关于序列化的潜在问题。典型的情况是注入的记录器被检测为不可序列化。但是还有更多- 还有几个CDI bean。 我还没有找到有关如何正确处理序列化的最佳实践。 反序列化注入的和注入的字段是否会被注入? 应该将它们标记为吗? 还是应该忽略/关闭代码检查? 我真的应该按照PMD的建议为所有这些字段提供访问者吗? 问题答
由于在所述实体不可用的情况下返回,因此需要进行如上所示的条件测试,以避免可能的,否则很可能发生。在任何地方重复这个琐碎的条件测试都是非常不可接受和不鼓励的,这使得业务逻辑应该尽可能简单,几乎不可读。 为了防止这种条件检查到处重复,我在一个单独的EJB中有一个通用方法, 从另一个EJB内部调用此方法,如下所示, 在这里,尽管所有事情都发生在同一个事务中,返回,即返回的实体由两个EJB中的管理。 虽然
我是EJB 3.1的初学者,并试图运行我的第一个Hello World程序并获得NameNotFoundException。 这是我的课 本地接口: 远程接口: 豆类: 客户: } 有人能对此提出建议吗?提前谢谢
问题内容: 我正在使用EJB 3.1和jboss-eap-6.4,并且要为ejb调度程序的小时,分钟和秒设置一些动态参数,如下所示: 非参数代码-每5分钟的30秒运行一次: 上面的代码正确执行。 动态参数代码-应每5分钟30秒运行一次: 上面的代码执行不正确,通常每秒执行多次。 另外,我还阅读了其他一些对我没有帮助的问题: EJB3.x中@Schedule方法的动态参数 使用计时器服务-Jav