Bean 共享接口时的 EJB 注入
EJB Injection When Beans Share an Interface
我正在为 jboss 应用程序更新一些遗留代码,但 运行 遇到了一些麻烦。我有两个 ejb bean,PersonBean 和 ClientBean。 ClientBean 负责处理客户特定的服务。 ClientBean 被注入了一个 PersonBean 实例,它用作委托将请求传递给服务器端服务。我遇到的问题 运行 是这两个 bean 还实现了一个也需要注入的 LoginService 接口。我想要的是将 PersonBean 的一个实例作为 loginService 注入到 ClientBean 中,但我最终将 ClientBean 注入到自身中。
我需要做什么才能正确定义此 ejb 映射?
ClientServiceProviderBean:
@Stateless(name = "ClientServiceProvider")
@Local({ ClientServiceProvider.class, LoginService.class })
public class ClientServiceProviderBean implements ClientServiceProvider, LoginService
{
@EJB(name = "personService")
protected PersonService personService;
@EJB(name = "loginService")
protected LoginService loginService;
@Override
public LoginDTO getLoggedInUser()
{
LoginDTO loginDTO = loginService.getLoggedInUser();
return loginDTO;
}
@Override
public Long activateSession(String applicationName, String ipAddress)
{
return personService.activateSession(applicationName, ipAddress);
}
}
PersonServiceBean:
@Stateless(name = "PersonService")
@Local({ PersonService.class })
@Remote({ RemotePersonService.class })
public class PersonServiceBean implements PersonService, RemotePersonService, LoginService
{
@Override
@RolesAllowed({ "authenticated" })
public Long activateSession(String applicationName, String ipAddress)
{
Person p = getCallerAsPerson(entityManager, context.getCallerPrincipal());
SessionActivity sessionActivity = new SessionActivity(p.getId(), applicationName, true, ipAddress);
sessionActivity = save(entityManager, sessionActivity);
return sessionActivity.getId();
}
@Override
@PermitAll
public LoginDTO getLoggedInUser()
{
Principal p = context.getCallerPrincipal();
if (p != null && !"unauthenticated".equals(p.getName()))
{
try
{
Person person = getCallerAsPerson(entityManager, p);
if (person != null)
{
return createLoginDTO(person);
}
}
catch (javax.persistence.NoResultException e)
{
}
}
return null;
}
}
如果你想在 ClientServiceProviderBean
中将 PersonServiceBean
作为 LoginService
注入,你应该在 PersonServiceBean
的 @Local
注释中添加 LoginService.class
] 并将其从 ClientServiceProviderBean
.
中删除
我正在为 jboss 应用程序更新一些遗留代码,但 运行 遇到了一些麻烦。我有两个 ejb bean,PersonBean 和 ClientBean。 ClientBean 负责处理客户特定的服务。 ClientBean 被注入了一个 PersonBean 实例,它用作委托将请求传递给服务器端服务。我遇到的问题 运行 是这两个 bean 还实现了一个也需要注入的 LoginService 接口。我想要的是将 PersonBean 的一个实例作为 loginService 注入到 ClientBean 中,但我最终将 ClientBean 注入到自身中。
我需要做什么才能正确定义此 ejb 映射?
ClientServiceProviderBean:
@Stateless(name = "ClientServiceProvider")
@Local({ ClientServiceProvider.class, LoginService.class })
public class ClientServiceProviderBean implements ClientServiceProvider, LoginService
{
@EJB(name = "personService")
protected PersonService personService;
@EJB(name = "loginService")
protected LoginService loginService;
@Override
public LoginDTO getLoggedInUser()
{
LoginDTO loginDTO = loginService.getLoggedInUser();
return loginDTO;
}
@Override
public Long activateSession(String applicationName, String ipAddress)
{
return personService.activateSession(applicationName, ipAddress);
}
}
PersonServiceBean:
@Stateless(name = "PersonService")
@Local({ PersonService.class })
@Remote({ RemotePersonService.class })
public class PersonServiceBean implements PersonService, RemotePersonService, LoginService
{
@Override
@RolesAllowed({ "authenticated" })
public Long activateSession(String applicationName, String ipAddress)
{
Person p = getCallerAsPerson(entityManager, context.getCallerPrincipal());
SessionActivity sessionActivity = new SessionActivity(p.getId(), applicationName, true, ipAddress);
sessionActivity = save(entityManager, sessionActivity);
return sessionActivity.getId();
}
@Override
@PermitAll
public LoginDTO getLoggedInUser()
{
Principal p = context.getCallerPrincipal();
if (p != null && !"unauthenticated".equals(p.getName()))
{
try
{
Person person = getCallerAsPerson(entityManager, p);
if (person != null)
{
return createLoginDTO(person);
}
}
catch (javax.persistence.NoResultException e)
{
}
}
return null;
}
}
如果你想在 ClientServiceProviderBean
中将 PersonServiceBean
作为 LoginService
注入,你应该在 PersonServiceBean
的 @Local
注释中添加 LoginService.class
] 并将其从 ClientServiceProviderBean
.