我将使用Jboss提供的JPA库来启动基于struts2的应用程序。我已经在standalone.xml中配置了数据源,我可以从jboss管理控制台中看到已经创建了数据源。并读取和处理presistence.xml文件。但是,如果我在操作类中检查EntityManager实例。它总是说null。
这是我的persistence.xml和Action类代码片段
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="primary">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/mysqlDS</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<!-- Properties for Hibernate -->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.use_sql_comments" value="true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
</properties>
</persistence-unit>
</persistence>
Struts2动作类:
public class RegistrationAction extends ActionSupport implements SessionAware,Preparable ,ModelDriven{
/**
*
*/
private static final long serialVersionUID = 1L;
@PersistenceContext(unitName="primary")
private EntityManager em;
@Override
public Object getModel() {
// TODO Auto-generated method stub
return null;
}
@Override
public void prepare() throws Exception {
if(em==null)
System.out.println(" EM is null still..");
//even Persistence.createEntityManagerFactory("primary"); returning NULL
}
@Override
public void setSession(Map<String, Object> arg0) {
// TODO Auto-generated method stub
}
public EntityManager getEm() {
return em;
}
public void setEm(EntityManager em) {
this.em = em;
}
}
动作由Struts容器管理。
EntityManager由CDI Container管理。您可以将其注入CDI托管对象(EJB容器中的EJB,CDI托管Bean,Servlet,ecc …),但不能将其注入Actions中。
您需要使用Struts2-CDI-Plugin或执行查找来获取它。您甚至不应将其注入到Actions BTW中,最好使用业务组件(例如EJB)并对此进行查找。
如果不使用CDI插件(例如,由于使用Spring插件),该CDIUtil.java罗布Veldpaus是为这个完美的。
示例EJB:
@Stateless
public class MyEjb{
@PersistenceContext(unitName="primary")
EntityManager em;
public Foo find(long id){
return em.find(Foo.class, id);
}
}
动作示例:
public class RegistrationAction extends ActionSupport
implements SessionAware,Preparable ,ModelDriven {
public String execute(){
MyEjb ejb = new CdiUtil().lookup(MyEjb.class);
System.out.println(ejb.find(1L));
return SUCCESS;
}
/* your other stuff here */
}
Json服务器数据显示,在使用retrofit2和rxjava2的android中,当参数传递给inteface时,会出现错误。 接口
问题内容: 我有一个方法创建一个,另一个方法更改字符串 我的编译器说它“可能尚未初始化”。 有人可以解释吗? 问题答案: 变量可能尚未初始化 在内部定义方法时,必须在其中初始化程序的每个变量中必须先使用一个值的地方。 同样重要的是,您的代码将永远无法正常运行,因为Java中的字符串是不可变的,因此您无法编辑字符串,因此应更改方法。 我将您的代码更改为类似的内容,但是我认为您的编辑方法应该做另一件事
我不知道这是怎么回事 主要活动 我遇到了这个问题 2022-03-18 09:18:27.393 13874-13874/com。实例githubuser2 E/AndroidRuntime:致命异常:主进程:com。实例githubuser2,PID:13874 java。lang.RuntimeException:无法启动活动组件信息{com.example.githubuser2/com.e
我有一个类,我注入到ViewModel ViewModel工厂,当在活动中的onCreate方法中初始化视图模型时,它说传递的值没有初始化。 下面是我的代码 我对Kotlin很陌生,所以尝试过调试,但在这个问题上卡住了。 这是Mainactive代码: 我的ViewModelFactory: 我的班级回购: 这是我收到的错误:
我正在尝试使用Spring-boot+Vaadin创建一个web项目,并且希望使用spring-data-jpa和hibernate从PostgreSQL数据库中获取数据。 在我的Vaadin看来,我尝试自动连接我的服务类,但我总是得到null,而且eror堆栈跟踪没有告诉我原因。 数据库得我得配置: 视图和UI: pom.xml: 我的服务: 更新的解决方案:
我知道一个类似的问题已经在这里得到了回答。但那是由于黄油刀库的问题,但我的情况不同。在我的例子中,当我在基本活动中使用dagger injected属性时,它显示了由:kotlin.uninitializedPropertyAccessException引起的错误:lateinit属性pref尚未初始化 AppComponent