Pure-Java vs Native SQLiteJDBC驱动程序和嵌套VM

时间:2013-08-12 12:03:51

标签: java sqlite jdbc native

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

发展很顺利,仍然有效,但在部署到分期时,我得到了一些意想不到的问题。

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

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实现? 还有什么能够导致这样的堆栈跟踪吗?

为了记录,dev和staging environements都是linux / bea weblogic。

谢谢你的时间:)

2 个答案:

答案 0 :(得分: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());

答案 1 :(得分:0)

正如评论中所述,这是我们想到的。

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

问题是负责通过NFS丢失文件分片的concurent访问的服务。 Dev env让它运行,分期没有。

谢谢大家的时间!