当前位置: 首页 > 知识库问答 >
问题:

如何在CDI bean中调用服务类接口

竺绍辉
2023-03-14

我们计划将托管bean更改为CDIBeans。我们使用下面的代码来调用托管Bean中的服务类。

@ManagedProperty("#{userService}")
private UserService userService;  and setter method

对于CDI bean,我将@ManagedProperty替换为@注入,如下所示,它正在引发以下异常

@SessionScoped
@Named
public class LoginController implements Serializable {
   @Inject
   private UserService userService;

}

org.apache.webbeans.exception.WebBeansDeploymentException: Passivation capable beans must satisfy passivation capable dependencies. 

UserService是一个带有未实现方法的普通接口,UserServiceImpl实现了UserService接口。请看下面:

public interface UserService {
 public List<User> getUserList();   
}

public class UserServiceImpl implements UserService {
  private UserDao userDao;

  public List<User> getUserList() {
        return userDao.getUserList();
 }
}

请让我知道如何在CDI bean中调用服务接口?

共有1个答案

应俭
2023-03-14

阅读BalusC关于SpringJSF集成的回答:如何在JSF托管bean中注入Spring组件/服务?告诉我应该支持将SpringBeanuserService注入CDIBeanLoginController

但是您的userserviceinpl不可序列化,这在CDI上下文中意味着它不支持钝化。

这也是异常告诉您的。

因此,让LoginController@requestscope而不是@SessionScoped使其本身和@Injected子项不需要具有钝化功能(也称为可序列化的)。或者使您的userserviceinpl和DAO实现可序列化(哪个imho有点奇怪?)。

 类似资料:
  • 是否可以在使用关键字创建的类中获取CDIBean的实例?我们目前正在对一个旧的应用程序进行一些增强,每次我们在应用程序中对CDI单例bean进行编程查找时,都会得到一个ContextNotActiveException。 获取参考的代码: BeanManager支持。JAVA

  • 我对webservice世界相对来说是个新手,我的研究似乎让我困惑而不是启发,我的问题是我得到了一个库(jar),我必须用一些webservice功能来扩展它。 这个库将共享给其他开发人员,在jar中的类中,将有一个调用webservice的方法的类(该方法实质上设置类的属性,执行一些业务逻辑,如将对象存储在db中等,并将对象与这些修改一起发回)。我希望对这个服务的调用尽可能简单,希望尽可能简单,

  • 问题内容: }); 我正在尝试下载google.com主页并重新打印,但收到“发送后无法使用可变标头API”。错误 有人知道为什么吗?或如何拨打http电话? 问题答案: 退房的例子在这里对Node.js的文档。 该方法是一种便捷的方法,它处理GET请求的许多基本内容,通常没有任何内容。以下是如何发出简单HTTP GET请求的示例。

  • 这是我的spring控制器类KalamController Hibernate配置xml文件 EmployeeServiceImpl.Java档案 最后是 当我运行程序时,我得到以下错误 请告诉我哪里出了问题。我是否忘记了xml文件中的任何配置?我的意图是了解如何使用@AutoWired注释在controller中调用服务。

  • 我创建了一个捆绑包,我想用它的最佳实践。 所以我所有的服务都是私人的 https://symfony.com/doc/current/service_container/alias_private.html 和 https://symfony.com/blog/new-in-symfony-3-4-services-are-private-by-default 在Symfony core中,我们已

  • 在异步HTTP SERVER中使用服务 全局方法service_center() 使用service_center($service)获取服务地址,然后使用call()方法调用公开的服务方法 $service = (yield service_center('User')); $user = (yield $service->call("User::getUser", ['id'