【问题标题】:Mirth SQL Server Database reader source, DBMaxRetries errorMirth SQL Server 数据库阅读器源,DBMaxRetries 错误
【发布时间】:2019-10-14 10:01:56
【问题描述】:

我正在使用 Mirth Connect Server 3.4.2.8129。我创建了一个测试通道,一个非常简单的通道,它应该只从表(SQL Server)中选择记录并将它们发送到 javascript writer 类型的目的地。

我定义了一个数据库读取器源,我正在尝试选择一个表的记录。我将粘贴下面的代码。

我在 Source 中使用的 Javascript 代码是这样的(我用 *** 替换了敏感信息):


var dbConn;
try 
{
    dbConn = DatabaseConnectionFactory.createDatabaseConnection('net.sourceforge.jtds.jdbc.Driver','jdbc:jtds:sqlserver://***:***;InstanceName=***;DatabaseName=***','***','***');
    var results = executeCachedQuery('select * from [***].[dbo].[***]');        
    return results;
} 
finally 
{
    if (dbConn) 
    { 
        dbConn.close();
    }
}

我收到以下错误:

ERROR 2019-10-14 12:41:00,164 [Database Reader Polling Thread on TestMedisOrders (fba0f4c7-0a2d-47ec-b638-acb586925c92) < fba0f4c7-0a2d-47ec-b638-acb586925c92_Worker-1] com.mirth.connect.connectors.jdbc.DatabaseReceiver: Failed to poll for messages from the database in channel "TestMedisOrders"
com.mirth.connect.connectors.jdbc.DatabaseReceiverException: Error executing script 4bf7e588-202a-4aea-9d5e-be0155a4fa6a.
    at com.mirth.connect.connectors.jdbc.DatabaseReceiverScript.poll(DatabaseReceiverScript.java:128)
    at com.mirth.connect.connectors.jdbc.DatabaseReceiver.poll(DatabaseReceiver.java:108)
    at com.mirth.connect.donkey.server.channel.PollConnectorJob.execute(PollConnectorJob.java:49)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
    Caused by: com.mirth.connect.server.MirthJavascriptTransformerException: 
    CHANNEL:    TestMedisOrders
    CONNECTOR:  Source
    SOURCE CODE:    
    125: }
    126: 
    127: function executeOperation(source, operation, expression, parameters) {
    128:    var dbConn = getDBConnection(source);
    129:    var attempts = 0;
    130:    var maxAttempts = java.lang.Integer.parseInt($('DBMaxRetries'));
    131: 
    132:    while (attempts < maxAttempts) {
    133:        attempts++;
    134: 
    LINE NUMBER:    130
    DETAILS:    Wrapped java.lang.NumberFormatException: For input string: ""
        at 4bf7e588-202a-4aea-9d5e-be0155a4fa6a:130 (executeOperation)
        at 4bf7e588-202a-4aea-9d5e-be0155a4fa6a:67 (executeCachedQuery)
        at 4bf7e588-202a-4aea-9d5e-be0155a4fa6a:249 (doScript)
        at 4bf7e588-202a-4aea-9d5e-be0155a4fa6a:259
        at com.mirth.connect.server.util.javascript.JavaScriptUtil.executeScript(JavaScriptUtil.java:527)
        at com.mirth.connect.connectors.jdbc.DatabaseReceiverScript$SelectTask.doCall(DatabaseReceiverScript.java:168)
        at com.mirth.connect.server.util.javascript.JavaScriptTask.call(JavaScriptTask.java:113)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.NumberFormatException: For input string: ""
        at java.lang.NumberFormatException.forInputString(Unknown Source)
        at java.lang.Integer.parseInt(Unknown Source)
        at java.lang.Integer.parseInt(Unknown Source)
        at sun.reflect.GeneratedMethodAccessor46.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:126)
        at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:225)
        at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:1479)
        at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:815)
        at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:109)
        at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:393)
        at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3280)
        at org.mozilla.javascript.InterpretedFunction.exec(InterpretedFunction.java:120)
        at com.mirth.connect.server.util.javascript.JavaScriptTask.executeScript(JavaScriptTask.java:142)
        at com.mirth.connect.server.util.javascript.JavaScriptUtil.executeScript(JavaScriptUtil.java:522)
        ... 6 more

我尝试在 mirth 安装文件夹中的所有配置文件中搜索设置,但我没有找到任何包含它的文件。我还解压缩了 SQL Server 驱动程序(jtds 1.3.1.jar)并在那里搜索,但没有。我没有找到任何关于 DBMaxRetries 的信息。

还有其他人遇到过这种情况吗?

谢谢。

【问题讨论】:

    标签: mirth


    【解决方案1】:

    你可能想打电话:

    var results = dbConn.executeCachedQuery('select * from [***].[dbo].[***]');
    

    根据堆栈跟踪,您必须定义 javascript 函数 executeCachedQueryexecuteOperation,如果您检查通道依赖项,可能通过代码模板进行定义。您正在调用 executeCachedQuery javascript 函数而不是 DatabaseConnection.executeCachedQuery API 方法。

    $('DBMaxRetries') 正在尝试从其中一张 mirth 映射中提取值。 globalMapglobalChannelMapconfigurationMap 是数据库读取器上下文中唯一可用的。如果您没有在这些映射中的至少一个中定义 DBMaxRetries,它将返回 null。

    【讨论】:

    • 非常感谢您不厌其烦地回答,您拯救了我的一天。它确实是代码库中的一个函数,它使用了一个应该在配置映射中的变量。我要求要导入正确的配置图(第一个是旧的且不完整的),现在一切正常,我开始开心起来。再次感谢您。
    猜你喜欢
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多