初学者在java ee 7和glassfish 4中制作持久性javadb数据库时遇到问题

时间:2015-12-29 00:52:39

标签: jpa glassfish javadb

我已编程代码超过二十年了,但我是java ee 7的新手。

我购买了antonio gonclaves一本书并修改了他的代码以便开始使用,但是无法完全了解所有细节以便将数据存储在数据库中以备将来检索。

我只想让用户输入三个字符串,并使用jsf将它们列在数据表中的同一个xhtml页面上。

jsf表单有效,因为我可以立即在我的页面上看到提交表单的结果。

问题是,对象似乎没有持久存储在数据库中,甚至甚至没有创建数据库。

这一点很明显,因为数据表没有生成新项目。

有没有办法监控日志,或者看看幕后发生了什么?或者,我只是错过了一些细节?

如果你问我,我可以展示我的代码部分。

这是我的persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
             version="2.1">

  <persistence-unit name="saciMataPU" transaction-type="JTA">
    <jta-data-source>java:global/jdbc/nityanandaDB</jta-data-source>
    <properties>
      <property name="javax.persistence.schema-generation.database.action" value="create"/>
      <property name="eclipselink.logging.level" value="INFO"/>
    </properties>
  </persistence-unit>
</persistence>

根据他书中第11章的antonio gonclaves代码,我创建了一个实体类,一个与xhtml页面接口的类,以及一个ejb类。

这是我的EJB:

package gaurirasa.bhaktios.globallydevoted;

import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityManager;
import java.util.List;


@Named
@Stateless
public class SaciMataEJB {

  // ======================================
  // =             Attributes             =
  // ======================================


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

  // ======================================
  // =          Business methods          =
  // ======================================

  public Kurukshetra createKurukshetra(Kurukshetra kurukshetra) {
    em.persist(kurukshetra);
    return kurukshetra;
  }

  public List<Kurukshetra> findAllkurukshetras() {
    return em.createNamedQuery("findAllKurukshetras", Kurukshetra.class).getResultList();
  }

  public Kurukshetra findKurukshetraById(Long id) {
    return em.find(Kurukshetra.class, id);
  }
}

1 个答案:

答案 0 :(得分:1)

<强>解决

Marged 的帮助下,最终很清楚,所有需要做的就是修改persistence.xml文件中的jta-data-source。我基本上缺乏对连接玻璃鱼资源过程的概念性理解。

old jta-data-source:

<jta-data-source>java:global/jdbc/nityanandaDB</jta-data-source>

new jta-data-source:

<jta-data-source>jdbc/__default</jta-data-source>

此修改仅使用默认的derby连接池作为其数据库资源。

同样,在故障排除期间,我继续使用ij命令行工具创建数据库