0

更新 2:在 VMWare 播放器上的 Ubuntu 12.04 虚拟机上对此进行了测试,因此问题可能出在我的 Ubuntu 工作站上。

更新 1: 我在 Windows 7 上对此进行了测试,并且安装的版本在那里工作,所以我将此作为错误报告提交给 netbeans。 http://netbeans.org/bugzilla/show_bug.cgi?id=217699

原始问题

我的使用 JPA 和嵌入式 Derby 的NetBeans 平台应用程序在我从 NetBeans 7.2 IDE 启动它时可以工作,但是当我为 Ubuntu 12.04 创建 linux 安装程序并安装时,安装的应用程序不会在我的 derby 主目录中创建我的数据库设置为System.getProperty("user.home").

基本上,它在 IDE 中运行良好,但在启动 nb 平台部署版本时,我无法获取实体管理器。我尝试使用默认为 /usr/local/myapp 的 sudo 进行安装,并且还将数据库的权限临时更改为安装目录的 777,但这没有帮助。似乎没有任何日志目录可以查看可能失败的内容。我担心 Netbeans 平台正在吃掉异常或错误消息。

希望 NetBeans 平台或嵌入式 derby 人员可以分享一些解决此问题的建议。

这是我的persistance.xml,它是我的netbeans平台应用程序中的一个包装jar

<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="VmCfgLibPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>mycompany.jpa.Vmcfg</class>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:derby:myDB;create=true"/>
      <property name="javax.persistence.jdbc.password" value="app"/>
      <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
      <property name="javax.persistence.jdbc.user" value="app"/>
      <property name="eclipselink.ddl-generation" value="create-tables"/>
    </properties>
  </persistence-unit>
</persistence>

这是我用来获取实体管理器的 Utils 类。后面的em = emf.createEntityManager();行不执行,也不会抛出异常。

public class Util {

    static public EntityManager getEm() {
        return getEntityManager();
    }

    static public EntityManager em;

    static public EntityManager getEntityManager() {
        if (em == null || em.isOpen() == false) {
            try {
                File homeDir = new File(System.getProperty("user.home")+"/.simdriver");
                homeDir.mkdirs();
                Msg.info("home dir is: "+homeDir.getAbsolutePath());
                System.setProperty("derby.system.home", homeDir.getAbsolutePath());
                EntityManagerFactory emf 
                      = Persistence.createEntityManagerFactory("VmCfgLibPU");
                Msg.info("Check B2");
                System.out.println("Check B2");

                // .createEntityManager() does not execute when formally installed
                // works when running in IDE
                em = emf.createEntityManager();
                Msg.info("Check C2");
                System.out.println("Check C2");
            } catch (Exception e) {
                Exceptions.printStackTrace(e);
                Msg.err("Error while getting entity manager");
            }
        }
        return em;
    }
}
4

0 回答 0