运行 带有 JasperStarter 的 JasperReport 没有创建输出文件
Running a JasperReport with JasperStarter doesn't create an output file
我有以下设置:
- 连接到名为
mydb
的 HSQLDB 拆分数据库的 LibreOffice Base mybase.odb
- 带有打开报告按钮的表单
- 这个按钮后面的宏主要执行:
shell(convertToUrl(Tools.Strings.DirectoryNameOutOfPath( _
ThisComponent.Parent.getURL(), "/") & "myReport.cmd"), HIDE)
myReport.cmd
包含:
:: From: http://hsqldb.org/doc/2.0/guide/listeners-chapt.html#lsc_listener_types
start /min java -cp %~dp0driver/hsqldb.jar org.hsqldb.server.Server
--database.0 file:mydb --dbname.0 mydb
timeout /t 3
:: From: http://jasperstarter.cenote.de/index.html
jasperstarter -v pr %~dp0myReport.jasper -r -o . -f pdf
-H [localhost|127.0.0.1] --db-port 9001 -n mydb -u myuser
[此处插入换行符以便于阅读。]
HSQLDB 服务器启动成功:
...
[Server@1742700]: Startup sequence completed in 382 ms.
[Server@1742700]: 2016-05-09 23:05:49.129 HSQLDB server 2.3.2 is online on port 9001
...
随后的 JasperStarter
没有显示任何错误,但没有创建 PDF
。
根据 HSQLDB 服务器输出 Server@1742700
我也尝试过(希望不大):
jasperstarter ... -H 1742700 ... -n Server
无济于事。
myReport.cmd
中的以下内容独立运行:
jasperstarter pr %~dp0myReport.jasper -r -o . -f pdf -t generic
--jdbc-dir %~dp0driver --db-driver org.hsqldb.jdbcDriver
--db-url jdbc:hsqldb:file:%~dp0database/mydb;sql.syntax_mys=true;shutdown=true
-u myuser
[此处插入换行符以便于阅读。]
但不是,当然,如果 mybase.odb
是开放的:
Unable to connect to database: Database lock acquisition failure: lockFile:
org.hsqldb.persist.LockFile@68306856[file =<path>\database\mydb.lck, exists=true,
locked=false, valid=false, ] method: checkHeartbeat read: 2016-05-09 21:25:13
heartbeat - read: -6188 ms.
顺便说一句,当锁文件存在时为什么 locked=false
?
一次只有一个 Java 进程可以连接到一个文件:数据库。该消息表明第二个进程无法获取锁,因为锁文件已由另一个进程创建并且确实存在。
您应该更改设置,以便在启动 LibreOffice 之前启动 HSQLDB 服务器。然后,LibreOffice 连接到服务器数据库,您的宏不再启动服务器,而只是使用服务器 URL.
启动报告生成器
根据 fredt 的回答,我创建了一个 myapp.cmd
包含:
start "My DB Server" /min java -cp %~dp0driver/hsqldb.jar org.hsqldb.server.Server
--database.0 file:%~dp0database/mydb --dbname.0 mydb
timeout /t 2
start /b /max %~dp0mybase.odb
myReport.cmd
现在只包含:
jasperstarter -v pr %~dp0myReport.jasper -r -o %~dp0 -f pdf
-H localhost --db-port 9001 -n mydb -u myuser
我意识到:
jasperstarter ... -o .
没有按预期工作。使用 '.
' 时,它将 C:\Program Files (x86)\LibreOffice 5\program
作为输出目录(如果从 Base 中调用则可以理解)。因此我将其更改为绝对 %~dp0
.
我有以下设置:
- 连接到名为
mydb
的 HSQLDB 拆分数据库的 LibreOffice Base - 带有打开报告按钮的表单
- 这个按钮后面的宏主要执行:
mybase.odb
shell(convertToUrl(Tools.Strings.DirectoryNameOutOfPath( _
ThisComponent.Parent.getURL(), "/") & "myReport.cmd"), HIDE)
myReport.cmd
包含:
:: From: http://hsqldb.org/doc/2.0/guide/listeners-chapt.html#lsc_listener_types
start /min java -cp %~dp0driver/hsqldb.jar org.hsqldb.server.Server
--database.0 file:mydb --dbname.0 mydb
timeout /t 3
:: From: http://jasperstarter.cenote.de/index.html
jasperstarter -v pr %~dp0myReport.jasper -r -o . -f pdf
-H [localhost|127.0.0.1] --db-port 9001 -n mydb -u myuser
[此处插入换行符以便于阅读。]
HSQLDB 服务器启动成功:
... [Server@1742700]: Startup sequence completed in 382 ms. [Server@1742700]: 2016-05-09 23:05:49.129 HSQLDB server 2.3.2 is online on port 9001 ...
随后的 JasperStarter
没有显示任何错误,但没有创建 PDF
。
根据 HSQLDB 服务器输出 Server@1742700
我也尝试过(希望不大):
jasperstarter ... -H 1742700 ... -n Server
无济于事。
myReport.cmd
中的以下内容独立运行:
jasperstarter pr %~dp0myReport.jasper -r -o . -f pdf -t generic
--jdbc-dir %~dp0driver --db-driver org.hsqldb.jdbcDriver
--db-url jdbc:hsqldb:file:%~dp0database/mydb;sql.syntax_mys=true;shutdown=true
-u myuser
[此处插入换行符以便于阅读。]
但不是,当然,如果 mybase.odb
是开放的:
Unable to connect to database: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@68306856[file =<path>\database\mydb.lck, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2016-05-09 21:25:13 heartbeat - read: -6188 ms.
顺便说一句,当锁文件存在时为什么 locked=false
?
一次只有一个 Java 进程可以连接到一个文件:数据库。该消息表明第二个进程无法获取锁,因为锁文件已由另一个进程创建并且确实存在。
您应该更改设置,以便在启动 LibreOffice 之前启动 HSQLDB 服务器。然后,LibreOffice 连接到服务器数据库,您的宏不再启动服务器,而只是使用服务器 URL.
启动报告生成器根据 fredt 的回答,我创建了一个 myapp.cmd
包含:
start "My DB Server" /min java -cp %~dp0driver/hsqldb.jar org.hsqldb.server.Server
--database.0 file:%~dp0database/mydb --dbname.0 mydb
timeout /t 2
start /b /max %~dp0mybase.odb
myReport.cmd
现在只包含:
jasperstarter -v pr %~dp0myReport.jasper -r -o %~dp0 -f pdf
-H localhost --db-port 9001 -n mydb -u myuser
我意识到:
jasperstarter ... -o .
没有按预期工作。使用 '.
' 时,它将 C:\Program Files (x86)\LibreOffice 5\program
作为输出目录(如果从 Base 中调用则可以理解)。因此我将其更改为绝对 %~dp0
.