3

我目前正在使用托管在 Weblogic 和 SQLite DB 中的 Java Web 应用程序开发一个非常简单的项目。(范围很小,只有两个表)

Developpement 运行良好并且仍然可以工作,但是在部署到 staging 时,我遇到了一些意想不到的问题。

每当应用程序必须从数据库中读取(选择)时,我可以读取以下堆栈跟踪:

Root cause of ServletException.java.lang.Error:  in _syscall()
    at org.ibex.nestedvm.Runtime.syscall(Runtime.java:1086)
    at org.sqlite.SQLite.run_0x171800(target/build/SQLite.mips:???)
    at org.sqlite.SQLite.trampoline(target/build/SQLite.mips:???)
    at org.sqlite.SQLite._execute(target/build/SQLite.mips:???)
    at org.ibex.nestedvm.Runtime.__execute(Runtime.java:506)
    at org.ibex.nestedvm.Runtime.call(Runtime.java:678)
    at org.ibex.nestedvm.Runtime.call(Runtime.java:647)
    at org.sqlite.NestedDB.call(NestedDB.java:568)
    at org.sqlite.NestedDB.call(NestedDB.java:563)
    at org.sqlite.NestedDB.prepare(NestedDB.java:130)
    at org.sqlite.DB.prepare(DB.java:123)
    at org.sqlite.Stmt.executeQuery(Stmt.java:121)

如果我错了,请告诉我,但我理解的是 target/build/SQLite.mips 指的是驱动程序的本机实现。但是,我确实指定它应该坚持纯 java 使用:

Connection con;

//Load the JDBC driver class dynamically.
Driver d = (Driver)Class.forName("org.sqlite.JDBC").newInstance();
DriverManager.registerDriver(d);

//init the connection
System.setProperty("sqlite.purejava", "true");          
con = DriverManager.getConnection(getConnectionString());

我的理解正确吗?我怎样才能进一步强制使用纯 java 实现?还有什么能导致这样的堆栈跟踪吗?

作为记录,开发和临时环境都是 linux / bea weblogic。

谢谢你的时间:)

4

2 回答 2

1

从您的堆栈跟踪中的类名,我假设您正在使用 XerialJ JDBC 驱动程序(这不是有点旧吗?)

根据其wiki,您应该在加载 JDBC 驱动程序之前设置该属性

System.setProperty("sqlite.purejava", "true");
Class.forName("org.sqlite.JDBC"); 

您在驱动程序加载(但在连接设置之前)进行设置。请更改初始化顺序如下,然后重试:

//Load the JDBC driver class dynamically.
System.setProperty("sqlite.purejava", "true");          
Driver d = (Driver)Class.forName(driver).newInstance();
DriverManager.registerDriver(d);

//init the connection

con = DriverManager.getConnection(getConnectionString());
于 2013-08-12T12:57:01.300 回答
0

正如评论中所说,这是我们发现的。

尽管明确指出 NFS 和 SQLite 不能很好地混合在一起,但有限的写入操作和 3 台机器同时读取访问的需要迫使我们将两者混合在一起。

问题是缺少一项负责通过 NFS 对文件分片进行并发访问的服务。Dev env 让它运行,staging 没有。

谢谢大家的时间!

于 2013-08-13T12:15:46.127 回答