2011-11-25 49 views
2

错误:无法在GlassFish中使用Hibernate连接到嵌入式Derby数据库

Connection could not be allocated because: 
The connection was refused because the database chapter2 was not found. 

的persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.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_1_0.xsd"> 
    <persistence-unit name="users" transaction-type="JTA"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <jta-data-source>jdbc/chapter2</jta-data-source> 
     <properties> 
     <property name="hibernate.hbm2ddl.auto" value="create-drop" /> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

domain.xml中:整个domain.xml中可以发现here

<resources> 
    <jdbc-resource pool-name="Chapter2Pool" description="Chapter 2 Datasource" jndi-name="jdbc/chapter2" /> 
    <jdbc-connection-pool datasource-classname="org.apache.derby.jdbc.ClientDataSource" res-type="javax.sql.DataSource" name="Chapter2Pool"> 
     <property name="DatabaseName" value="chapter2" /> 
     <property name="Password" value="password" /> 
     <property name="PortNumber" value="1527" /> 
     <property name="ServerName" value="localhost" /> 
     <property name="User" value="admin" /> 
     <property name="URL" value="jdbc:derby://localhost:1527/chapter2" /> 
     <property name="connectionAttributes" value="create=true" /> 
    </jdbc-connection-pool> 
</resources> 
<servers> 
     <server name="server" config-ref="server-config"> 
      <application-ref ref="__admingui" virtual-servers="__asadmin" /> 
      <resource-ref ref="jdbc/__TimerPool" /> 
      <resource-ref ref="jdbc/__default" /> 
      <resource-ref ref="jdbc/chapter2" /> 
     </server> 
</servers> 

完整源代码,包括pom.xml位于here

我开始德比服务器外部使用setNetworkServerCP命令

% sudo lsof -i :1527 
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME 
java 3369 bhaarat 27u IPv6 29472  0t0 TCP localhost:1527 (LISTEN) 
+0

会从“connectionAttributes”帮助中删除前导分号吗? “创建=真”。 – MaDa

+0

注意到了。认为这是一个错误的来源,但没有......这并没有帮助。我会为未来修正这个片段。 – Omnipresent

回答

2

权限可能很难处理。 derby在/usr/share/javadb/bin下运行,并且运行intelliJ的用户不是root用户,因此没有对该文件夹的写入权限。所以要解决这个问题,我必须给运行intelliJ的用户提供对该文件夹的写入权限。这样数据库就成功创建了。我仍然希望这个错误能够提供更多信息。任何与Permission有关的东西都会早早给我提示这个提示。

+0

+1,感谢您的跟进。你让我感到困惑,我的回答对你的情况无效;毕竟你并没有运行嵌入式数据库。 – MaDa

2

哦,对了,我忽略了冠军。

您正在尝试连接到嵌入式 Derby使用独立服务器的驱动程序。服务器没有运行,因此出现错误。

此属性一定要被改变:

<property name="URL" value="jdbc:derby:path_to_database;create=true" /> 

和司机必须是:org.apache.derby.jdbc.EmbeddedDriver

此外,实施嵌入式无厘头,连接池,因为有可能是只有一个连接这种模式。

+0

我确实从外部端口1527启动服务器。当该服务器没有运行时,我得到完全不同的错误,说它无法连接到服务器。 – Omnipresent

+0

将domain.xml中的'datasource-classname =“org.apache.derby.jdbc.EmbeddedDriver”'和URL属性更改为'jdbc:derby:// localhost:1527/chapter2; create = true'仍然获取相同的错误 – Omnipresent

+0

您是否可以使用该连接URL连接到数据库,并使用Derby“ij”工具? –

相关问题