gpt4 book ai didi

java - 我可以将 POJO 注入(inject) Backing Bean 吗?和 POJO 的@Entity?它是如何工作的?

转载 作者:行者123 更新时间:2023-11-29 03:33:01 24 4
gpt4 key购买 nike

所以这是我的代码:

<h:form>
<p:dataTable var="customer" value="#{customersTableBackingBean.allCustomers}">
<p:column headerText="First Name">
<h:outputText value="#{customer.contactFirstName}" />
</p:column>

<p:column headerText="City">
<h:outputText value="#{customer.city}" />
</p:column>
</p:dataTable>
</h:form>

后备 bean :

package com.tugay.maythirty.model;

import javax.inject.Inject;
import javax.inject.Named;
import java.io.Serializable;
import java.util.List;

@Named
public class CustomersTableBackingBean implements Serializable {

@Inject
CustomersService customersService;

public List<Customers> getAllCustomers(){
return customersService.getAllCustomers();
}

public String sayHello(){
return "Hello from a managed bean!";
}
}

服务:

import javax.inject.Inject;
import java.io.Serializable;
import java.util.List;

public class CustomersService implements Serializable {

@Inject
private CustomersDao customersDao;

public List<Customers> getAllCustomers(){
boolean userLoggedIn = true;
if(userLoggedIn){
return customersDao.getAllCustomers();
}
else{
return null;
}
}
}

道:

import javax.persistence.*;
import java.util.List;

public class CustomersDao {

@PersistenceContext(unitName = "Persistence")
private EntityManager em;

public List<Customers> getAllCustomers() {
TypedQuery<Customers> query = em.createQuery("SELECT c FROM Customers c", Customers.class);
List<Customers> allCustomers = query.getResultList();
return allCustomers;
}

public void addCustomer(String customerName, String city){
Customers customer = new Customers();
customer.setCustomerName(customerName);
customer.setCity(city);
em.persist(customer);
}
}

实体:

@Entity
public class Customers {
//relevant code here...

所以这在 Glassfish 服务器上运行,并且运行得很好..我可以从数据库中获取数据并在 index.xhtml 上查看它..

我的支持手段是一个@Named bean。所以 @Named 使它可以从 EL 访问。

但是,它没有任何其他注解,例如 Statless 或 Stateful。 ?

此外,如您所见,我正在使用@Inject 向我的BackingBean 注入(inject)一个服务,向我的服务注入(inject)一个Dao,向我的Dao 注入(inject)一个实体……这些是EJB 吗?如果它们像这样工作得很好,我为什么要制作这些@Stateless 或@Stateful?

为什么我会/应该将这些 bean 中的任何一个设为 @Stateful 或 @Statless?

最佳答案

CustomersService 只是一个 POJO。如果您使用 @Stateful 注释它,那么它将是一个有状态的 EJB(使用 @Statless - 一个无状态的 EJB)。与 POJO(不是 EJB)不同,EJB 由 EJB 容器管理,并且可以受益于 EJB 容器必须提供的设施(例如,容器管理的事务、安全性……)。

但是如果您不需要 EJB 容器提供的服务,那么我认为将它们制作成 EJB 是没有意义的。

So what is the "state" of this backing bean?

IMO,这不太合理。我认为你的意思是 bean 的范围(例如请求、 session 、应用程序等)。如果是这样,因为您没有为它指定任何范围,我认为它不会被放入任何范围。它会在需要时被实例化(例如,在这种情况下,它应该在每次请求页面时被实例化)。但是,如果它是作用域的,那么只要作用域本身存在,bean 的实例就会存在。例如为每个新请求实例化一个请求范围的 bean。

Here is the tutorial for EJB .

以上教程链接适用于 Java EE 6。感谢@Luiggi 提供 Java EE 7 tutorial link .

关于java - 我可以将 POJO 注入(inject) Backing Bean 吗?和 POJO 的@Entity?它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17098706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com