我目前正在使用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。
谢谢你的时间:)
答案 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让它运行,分期没有。
谢谢大家的时间!