我正在将Web应用程序(WAR)部署到Tomcat 8 Web容器.
WAR在'/ WEB-INF/lib'目录中包含以下jTDS JDBC驱动程序:
<dependency org="net.sourceforge.jtds" name="jtds" rev="1.3.1" />
Run Code Online (Sandbox Code Playgroud)
(文件是:) jtds-1.3.1.jar.
这是资源的定义方式META-INF/context.xml:
<Resource name="jdbc/jtds/sybase/somedb"
auth="Container"
type="javax.sql.DataSource"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sybase://localhost:2501/somedb"
username="someuser" password="somepassword"
/>
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我以正常方式获取javax.sql.DataSource:
InitialContext cxt = new InitialContext();
if ( cxt == null ) {
throw new RuntimeException("Uh oh -- no context!");
}
DataSource ds = (DataSource) cxt.lookup( lookupName );
Run Code Online (Sandbox Code Playgroud)
我进一步验证(通过打印)DataSource对象ds是期望的类型:
org.apache.tomcat.dbcp.dbcp2.BasicDataSource
Run Code Online (Sandbox Code Playgroud)
...但是当我尝试从中获取连接时:
Connection conn = ds.getConnection();
Run Code Online (Sandbox Code Playgroud)
......我得到以下描述:
java.lang.AbstractMethodError
net.sourceforge.jtds.jdbc.JtdsConnection.isValid(JtdsConnection.java:2833)
org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:924)
org.apache.tomcat.dbcp.dbcp2.PoolableConnection.validate(PoolableConnection.java:282)
org.apache.tomcat.dbcp.dbcp2.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:359)
org.apache.tomcat.dbcp.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:2316)
org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2299)
org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2043)
org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1543)
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?
Clojure arity-overloading的示例如下所示(取自cookbook):
(defn argcount
([] 0) ; Zero arguments
([x] 1) ; One argument
([ x & args] (inc (count args)))) ; List of arguments
Run Code Online (Sandbox Code Playgroud)
...使用一个似乎不允许较低arity函数的表单来简单地调用具有一些默认值的较高arity函数(这是Java中常见的习语).是否使用了其他一些特殊形式?
我在JBoss 7中部署的Java EE应用程序中使用PostgreSQL 9.1 JDBC4驱动程序(postgresql-9.1-902.jdbc4.jar).
我可以假设javax.sql.DataSource是线程安全的,这样多个线程可以同时调用它上面的getConnection()方法吗?
我做了一个实验,其中一个表具有一个带有空值的VARCHAR列,试图获取具有特定列NULL的行数.我用了三种形式:
表格A.
SELECT COUNT(*) FROM buyers WHERE buye_resp IS NULL
Run Code Online (Sandbox Code Playgroud)
表格B.
SELECT COUNT(*) FROM buyers WHERE buye_resp = ?
Run Code Online (Sandbox Code Playgroud)
...其中参数由setString提供(1,null)
表格C.
...比如表单B,但参数是用setNull(1,java.sql.Types.VARCHAR)设置的
在这三种形式中,只有形式A产生了正确的结果,形式B和C都返回0(在帖子的末尾有三种形式的代码).这引出了一个问题:setNull的目的是什么?
针对PostgreSQL 9.2数据库运行的测试.
private static int numOfRows_formA(Connection conn) throws SQLException {
PreparedStatement pstm = null;
ResultSet rs = null;
try {
String pstmStr = "SELECT COUNT(*) FROM buyers WHERE buye_resp IS NULL";
pstm = conn.prepareStatement(pstmStr);
rs = pstm.executeQuery();
rs.next();
return rs.getInt(1);
} finally {
DbUtils.closeQuietly(null, pstm, rs); …Run Code Online (Sandbox Code Playgroud) 根据这个接受的答案使用set -e内置应该足以让bash脚本退出第一个错误.然而,以下脚本:
#!/usr/bin/env bash
set -e
echo "a"
echo "b"
echo "about to fail" && /bin/false && echo "foo"
echo "c"
echo "d"
Run Code Online (Sandbox Code Playgroud)
打印:
$ ./foo.sh
a
b
about to fail
c
d
Run Code Online (Sandbox Code Playgroud)
删除echo "foo" 确实会停止脚本; 但为什么?
我正在使用相当长的文件名,在查看缓冲区列表时,Buffer 列的宽度太短,不适合我的目的.
如何增加宽度(例如,Mode以File列的宽度为代价).
宽度我想在下面的屏幕截图中用黄色标记增加:

以下缩小的代码:
// @flow'use strict';
import assert from 'assert';
class Node<V, E> {
value: V;
children: ?Map<E, Node<V,E>>;
constructor(value: V) {
this.value = value;
this.children = null;
}
}
function accessChildren(tree: Node<number, string>): void {
if (tree.children!=null) {
assert(true); // if you comment this line Flow is ok
tree.children.forEach( (v,k)=>{});
} else {
}
}
Run Code Online (Sandbox Code Playgroud)
...使用以下消息进行流类型检查:
$ npm run flow
> simple-babel-serverside-node-only-archetype@1.0.0 flow /home/blah/blah/blah
> flow; test $? -eq 0 -o $? -eq 2
es6/foo.js:21
21: tree.children.forEach( (v,k)=>{});
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call of …Run Code Online (Sandbox Code Playgroud) 我对OCaml Batteries Included概念和我能找到的大多数教程的方式感到有点沮丧和困惑.之前,我用像GODI"生产力"工具或更换的调用ocamlc与ocamlfind电池/ ocamlc(这是,在这一点上,对我来说太不可思议),我希望能够简单地使用OCaml中有电池组核心库像任何其他图书馆.为此,我从git(head hash:9f94ecb)下载了最新的源代码并完成了make all.我注意到我在./_build/src/上有三个.cma库以及同一目录中的102个.cmi文件.所以我假设使用指向该目录的-I开关进行编译并链接到三个.cma库中的一个,发现这样就足够了而无需"安装"电池或使用平台工具.为了测试它,我开始为我在某处找到的以下简单程序生成一个可执行文件:
(* file euler001.ml *)
open BatEnum
open BatPervasives
let main () =
(1--999)
|> BatEnum.filter (fun i -> i mod 3 = 0 || i mod 5 == 0)
|> BatEnum.reduce (+)
|> BatInt.print stdout
let _ = main ()
Run Code Online (Sandbox Code Playgroud)
我能够编译它:
ocamlc -c -I ../batteries-included/_build/src/ euler001.ml
但当我试图链接:
ocamlc -o euler001 unix.cma nums.cma ../batteries-included/_build/src/batteries.cma euler001.cmo
我有:
File "_none_", line …
假设我有一个如下定义的Clojure树
(def eval-logic
'(:OR
(:METHOD "methodName1" ["a1" "a2" "a3"])
(:METHOD "methodName2" ["b1" "b2" "b3"])
:AND
(:METHOD "methodName3" [])
(:METHOD "methodName4" ["d1"])
))
Run Code Online (Sandbox Code Playgroud)
即树表示一个布尔表达式,其中节点如:OR和:AND表示布尔运算符,树的叶子是方法调用.不评估树,仅遍历以生成在运行时执行实际评估的代码.我应该如何遍历树,访问不同类型的节点,询问节点的父亲,孩子,兄弟姐妹等?是否有任何指针或库可供查看?
树不能太嵌套,因此尾递归不是问题.随意提出一些可能更适合遍历的其他数据结构.
我对深度优先遍历特别感兴趣,因为这是必须生成代码以确保在使用之前定义函数的顺序.此外,树被给予并且不会改变,因此我对添加或删除子项等内容不感兴趣
为什么以下代码干净地编译而没有任何警告,即使是xlint:all?
class A<V> {
public V v;
public <V> A() {
}
public static <V> A<V> create() {
return new A<V>();
}
}
public class FooMain {
public static void main(String args[]) {
A.create().v = 5;
A.create().v = "a string";
}
}
Run Code Online (Sandbox Code Playgroud)
运行:
javac -Xlint:all src/FooMain.java
Run Code Online (Sandbox Code Playgroud)
导致干净的编译没有任何警告(未选中等).A在第一行创建的泛型类实例的类型参数化是什么,第二行是什么?编译器如何确定类型?通过查看r值的类型?