Java持久化.jar文件无法运行。

3

我建立了一个简单的应用程序,连接使用 Java Persistence、实体管理器绑定 jTable 的 Derby 数据库(Netbeans)。问题是当我在其他系统上运行 .jar 文件时,它无法执行。有人能告诉我这是为什么吗?

在其他系统上运行它时出现错误:

C:\>java -jar persist.jar
[EL Info]: 2013-01-08 17:06:45.715--ServerSession(4597467)--EclipseLink, version
: Eclipse Persistence Services - 2.3.2.v20111125-r10461
[EL Severe]: 2013-01-08 17:06:48.24--ServerSession(4597467)--Exception [EclipseL
ink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.p
ersistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLNonTransientConnectionException: java.net.Connec
tException : Error connecting to server localhost on port 1527 with message Conn
ection refused: connect.
Error Code: 40000
Exception in thread "AWT-EventQueue-0" javax.persistence.PersistenceException: E
xception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r104
61): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLNonTransientConnectionException: java.net.Connec
tException : Error connecting to server localhost on port 1527 with message Conn
ection refused: connect.
Error Code: 40000
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(En
tityManagerSetupImpl.java:517)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.get
DatabaseSession(EntityManagerFactoryDelegate.java:188)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.cre
ateEntityManagerImpl(EntityManagerFactoryDelegate.java:277)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createE
ntityManagerImpl(EntityManagerFactoryImpl.java:294)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createE
ntityManager(EntityManagerFactoryImpl.java:272)
    at persist.NewJFrame.initComponents(NewJFrame.java:30)
    at persist.NewJFrame.<init>(NewJFrame.java:17)
    at persist.NewJFrame$1.run(NewJFrame.java:101)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v2
0111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLNonTransientConnectionException: java.net.Connec
tException : Error connecting to server localhost on port 1527 with message Conn
ection refused: connect.
Error Code: 40000
    at org.eclipse.persistence.exceptions.DatabaseException.sqlException(Dat
abaseException.java:324)
    at org.eclipse.persistence.exceptions.DatabaseException.sqlException(Dat
abaseException.java:319)
    at org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConn
ector.java:138)
    at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(
DatasourceLogin.java:162)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAn
dDetectDatasource(DatabaseSessionImpl.java:584)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.log
in(EntityManagerFactoryProvider.java:206)
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(En
tityManagerSetupImpl.java:488)
    ... 21 more
Caused by: java.sql.SQLNonTransientConnectionException: java.net.ConnectExceptio
n : Error connecting to server localhost on port 1527 with message Connection re
fused: connect.
    at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unkn
own Source)
    at org.apache.derby.client.am.SqlException.getSQLException(Unknown Sourc
e)
    at org.apache.derby.jdbc.ClientDriver.connect(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConn
ector.java:98)
    ... 25 more
Caused by: org.apache.derby.client.am.DisconnectException: java.net.ConnectExcep
tion : Error connecting to server localhost on port 1527 with message Connection
refused: connect.
    at org.apache.derby.client.net.NetAgent.<init>(Unknown Source)
    at org.apache.derby.client.net.NetConnection.newAgent_(Unknown Source)
    at org.apache.derby.client.am.Connection.<init>(Unknown Source)
    at org.apache.derby.client.net.NetConnection.<init>(Unknown Source)
    at org.apache.derby.client.net.NetConnection40.<init>(Unknown Source)
    at org.apache.derby.client.net.ClientJDBCObjectFactoryImpl40.newNetConne
ction(Unknown Source)
    ... 29 more
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at javax.net.DefaultSocketFactory.createSocket(Unknown Source)
    at org.apache.derby.client.net.OpenSocketAction.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    ... 35 more

它给你什么错误? - cowls
它没有显示任何错误。当我双击jar文件时,什么也没有发生。 - Nitesh Verma
错误:找不到主类persist.jar。 - Nitesh Verma
你创建了自己的 jar,它使用 persist.jar 作为它的依赖关系,对吧? - Less
其他系统如何知道你的数据库在哪里?请检查我的答案。 - vels4j
显示剩余7条评论
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
1

看一下这个SO问题。似乎是一个类似的问题(即,依赖的jar包可能不在classpath上)。

编辑
由于您发布了堆栈跟踪,现在很明显您有一些数据库连接问题:

java.net.ConnectException : Error connecting to server localhost on port 1527 with messageConnection refused: connect.

你有检查那个系统上的数据库是否正常运行吗?


其实我并不知道如何在其他系统上设置数据库。 - Nitesh Verma
好的,这意味着我需要在“其他”系统(除了我的开发电脑)上安装Derby,创建数据库,然后尝试运行应用程序,对吗? - Nitesh Verma
当然。如果您只在本地拥有数据库(用于开发目的),那么您肯定需要在“其他”系统上安装它并创建所有表格(如果需要,还要导出/导入数据),但这是完全不相关于您最初的问题的另一个故事。 - Less
不好意思,我已经暂时离开我的项目一段时间了,但是等我回来的时候,我一定会在这里发布。 - Nitesh Verma
我已经解决了这个问题。需要将数据库文件夹复制到另一个系统上,打开连接,然后运行jar文件。它非常顺利地工作了。 - Nitesh Verma
显示剩余2条评论

1

请检查您的persistence.xml文件中的数据库URL

<properties>
 <property name="javax.persistence.jdbc.password" value="sa"/>
 <property name="javax.persistence.jdbc.user" value="sa"/>
 <property name="javax.persistence.jdbc.driver" 
                         value="org.apache.derby.jdbc.ClientDriver"/>
 <property name="javax.persistence.jdbc.url" value="jdbc:derby://??:1527/??"/>
</properties>

当您在Netbeans中运行应用程序并创建数据库时,Netbeans会分配默认位置。我建议您将URL作为参数传递以创建实体管理器工厂,或将其放在属性文件中并加载它。

java -jar project.jar persistence.properties

谢谢,问题已解决。我只需要将数据库文件夹放到我的另一个系统中即可。 - Nitesh Verma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,