更新 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;
}
}