小编Mar*_*tus的帖子

Tomcat 8上使用jTDS JDBC驱动程序的AbstractMethodError

我正在将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)

是什么赋予了?

jtds tomcat8

11
推荐指数
2
解决办法
7684
查看次数

Clojure :: arity-overloaded函数互相调用

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中常见的习语).是否使用了其他一些特殊形式?

clojure

10
推荐指数
1
解决办法
3903
查看次数

是javax.sql.DataSource线程安全吗?

我在JBoss 7中部署的Java EE应用程序中使用PostgreSQL 9.1 JDBC4驱动程序(postgresql-9.1-902.jdbc4.jar).

我可以假设javax.sql.DataSource是线程安全的,这样多个线程可以同时调用它上面的getConnection()方法吗?

java datasource

10
推荐指数
2
解决办法
5931
查看次数

JDBC什么是PreparedStatement#setNull的目的

我做了一个实验,其中一个表具有一个带有空值的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)

java postgresql jdbc

10
推荐指数
1
解决办法
1303
查看次数

为什么设置-e; true && false && true不退出?

根据这个接受的答案使用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" 确实会停止脚本; 但为什么?

bash

10
推荐指数
3
解决办法
1850
查看次数

在缓冲区列表视图中增加"缓冲区"列宽

我正在使用相当长的文件名,在查看缓冲区列表时,Buffer 列的宽度太短,不适合我的目的.

如何增加宽度(例如,ModeFile列的宽度为代价).

宽度我想在下面的屏幕截图中用黄色标记增加: 在此输入图像描述

emacs emacs23

10
推荐指数
1
解决办法
1291
查看次数

奇怪的`方法不能在可能的null/undefined值`上调用

以下缩小的代码:

// @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)

flowtype

10
推荐指数
1
解决办法
3857
查看次数

使用OCaml电池作为香草cma

我对OCaml Batteries Included概念和我能找到的大多数教程的方式感到有点沮丧和困惑.之前,我用像GODI"生产力"工具或更换的调用ocamlcocamlfind电池/ 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 …

ocaml

9
推荐指数
1
解决办法
772
查看次数

在Clojure中遍历,迭代,访问树木

假设我有一个如下定义的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表示布尔运算符,树的叶子是方法调用.不评估树,仅遍历以生成在运行时执行实际评估的代码.我应该如何遍历树,访问不同类型的节点,询问节点的父亲,孩子,兄弟姐妹等?是否有任何指针或库可供查看?

树不能太嵌套,因此尾递归不是问题.随意提出一些可能更适合遍历的其他数据结构.

我对深度优先遍历特别感兴趣,因为这是必须生成代码以确保在使用之前定义函数的顺序.此外,树被给予并且不会改变,因此我对添加或删除子项等内容不感兴趣

clojure

9
推荐指数
1
解决办法
5505
查看次数

为什么这个编译没有任何未经检查的类型警告?

为什么以下代码干净地编译而没有任何警告,即使是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值的类型?

java generics

9
推荐指数
1
解决办法
146
查看次数

标签 统计

java ×3

clojure ×2

bash ×1

datasource ×1

emacs ×1

emacs23 ×1

flowtype ×1

generics ×1

jdbc ×1

jtds ×1

ocaml ×1

postgresql ×1

tomcat8 ×1