小编Tom*_*son的帖子

如何在Hibernate 4中配置日志记录以使用SLF4J

Hibernate 3.x使用进行日志记录.Hibernate 4.x使用.我正在编写一个独立的应用程序,它使用Hibernate 4和SLF4J进行日志记录.

如何配置Hibernate以登录SLF4J?

如果那不可能,我怎么能配置Hibernate的日志记录呢?

关于日志记录的Hibernate 4.1手册部分首先警告它是......

完全过时了.Hibernate从4.0开始使用JBoss Logging.当我们将此内容迁移到开发人员指南时,这将记录在案.

......继续谈论SLF4J,所以没用.入门指南开发人员指南都没有谈论记录.迁移指南也没有.

我已经查找了有关jboss-logging本身的文档,但我根本找不到任何文档.在GitHub的页面是沉默的,和JBoss的社区项目页面甚至没有列出的jboss-记录.我想知道项目的bug跟踪器是否可能有任何与提供文档相关的问题,但事实并非如此.

好消息是,在应用程序服务器(如JBoss AS7)中使用Hibernate 4时,很大程度上会记录日志记录.但是我如何在独立应用程序中配置它?

logging hibernate slf4j hibernate-4.x jboss-logging

111
推荐指数
5
解决办法
5万
查看次数

何时使用JCR(内容存储库)而不是其他选项?

我正在尝试评估像JackrabbitModeShape这样的内容存储库(JSR283),但我必须承认,我不知道什么问题首先解决,即使它是项目的一个好选择.您认为哪种情况适用最佳解决方案?除了大小之外,与关系数据库不是一回事吗?为什么?指向现实世界的例子的额外点.

提前致谢.

java database content-management jcr

74
推荐指数
1
解决办法
2万
查看次数

Java中的虚拟表和摘要

在一次采访中,我得到了以下代码:

public abstract class Base {
    public int x = 1;
    public Base() {
        foo();
    }
    public abstract void foo();
}

public class Derived extends Base {
    int x = 2;
    @Override
    public void foo() {
        System.out.println("Derived: "+x);
    }
}

class Main {
    public static void main(String... args) {
        Base base = new Derived();
        base.foo();
    }
}
Run Code Online (Sandbox Code Playgroud)

他们问过:

什么会打印?

如果我们使用C++,我认为代码应该给出编译错误,因为Derived首先调用构造函数时,Base会调用类的构造函数.此时该foo方法不存在.

另外我知道在创建所有变量之前,首先调用继承的类构造函数.

但是在Java中我们得到:

Derived: 0
Derived: 2

为什么?

我知道像在C++中一样,Java继承始终基于虚拟表,并且在Base类的构造函数之前调用类的构造函数Derived.

java inheritance

25
推荐指数
2
解决办法
5400
查看次数

Junit在应用程序服务器外部测试JNDI InitialContext

Context context = new InitialContext();
dataSource = (DataSource) context.lookup("java:comp/env/jdbc/multiDS");
connection = dataSource.getConnection();
Run Code Online (Sandbox Code Playgroud)

请帮我模仿上面的代码.

嗨汤姆安德森

我尝试了下面的代码

 @BeforeClass
 public static void setUpClass() throws Exception {
        // rcarver - setup the jndi context and the datasource
        try {
            // Create initial context
            System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
                "org.apache.naming.java.javaURLContextFactory");
            System.setProperty(Context.URL_PKG_PREFIXES, 
                "org.apache.naming");            
            Context ic = new InitialContext();

            ic.createSubcontext("java:");
            ic.createSubcontext("java:comp");
            ic.createSubcontext("java:comp/env");
            ic.createSubcontext("java:comp/env/jdbc");
            ic.createSubcontext("java:comp/env/jdbc/multiDS");
            // Construct DataSource
            OracleConnectionPoolDataSource ds = new OracleConnectionPoolDataSource();
            ds.setURL("jdbc:oracle:thin:@g9u0696.houston.hp.com:1525:CRNAD");
            ds.setUser("uname");
            ds.setPassword("pwd");
        } catch (NamingException ex) {
            ex.printStackTrace();
        }
 }
Run Code Online (Sandbox Code Playgroud)

但它给出的错误是:

com.hp.corona.common.exception.CacheException: org.apache.naming.NamingContext cannot be cast to javax.sql.DataSource …
Run Code Online (Sandbox Code Playgroud)

java junit jndi

20
推荐指数
2
解决办法
3万
查看次数

为什么runnable run()不能抛出已检查的异常?

根据JCIP第6.3.2 :

Runnable是一个相当有限的抽象; run无法返回值或抛出已检查的异常.

run() 不能返回一个值,因为它的返回类型是void,但为什么不能抛出一个已检查的异常?

java java.util.concurrent

17
推荐指数
3
解决办法
2万
查看次数


git-subtree没有保留历史记录所以我无法推送子树更改,我怎样才能解决这个问题/将来避免这个问题?

我一直在使用git-subtree扩展(https://github.com/apenwarr/git-subtree)来管理我们主项目中的子项目.当我尝试从主项目中拆分对子项目所做的更改时,它正在完成我想要的事情.

比如早些时候我做过

git subtree add -P Some/Sub/Dir --squash git@gitserver:lib.git master
Run Code Online (Sandbox Code Playgroud)

将库代码引入我们主项目中的Some/Sub/Dir.这里的一切都很棒,所以我把我的更改推到了我们的中央主要项目裸git repo.然后我决定在Some/Sub/Dir中更改我的本地版本的lib,提交它,然后将其拆分以将其推回到lib.git repo

git subtree split -P Some/Sub/Dir -b some_branch
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作.不再需要repo的本地副本我删除了它.

从我们的中央仓库克隆了一个新的repo副本后,我对Some/Sub/Dir中的lib进行了一些更改,并决定将这些更改拆分出来并将它们推回到lib.git存储库.我尝试使用与以前相同的子树分割命令,但这次我最终得到以下输出:

1/      3 (0)
2/      3 (1)
3/      3 (1)
fatal: bad object d76a03f0ec7e20724bcfa253e6a03683211a7bb1
Run Code Online (Sandbox Code Playgroud)

d76a03f0ec7e20724bcfa253e6a03683211a7bb1来自我添加子树时:

commit 43b3eb7d69d5eb64241eddb12e5bd74fd0215083
Author: Ian Bond <ibond@onezero.com>
Date:   Fri Apr 22 15:06:50 2011 -0400

    Squashed 'Subtree/librepoLib/' content from commit d76a03f

    git-subtree-dir: Subtree/librepoLib
    git-subtree-split: d76a03f0ec7e20724bcfa253e6a03683211a7bb1
Run Code Online (Sandbox Code Playgroud)

实际上是指lib.git repo中的提交.


我能够拼凑起来(我是一个git noob所以我可能错了,忽略了一些东西,或者在这里使用了不正确的术语),'git subtree add --squash'将带来整个历史远程lib.git repo进入当前仓库,将其压缩到单独的提交中,然后将该提交添加到工作分支中.lib.git提交历史记录保留在当前的repo中,但是它们是悬空提交,因为除了通过压缩提交的文本之外它们实际上没有被引用.只要那些悬空提交仍然存在,git-subtree就可以使用它们来执行拆分,但是由于推或拉不包含悬空对象(或者如果我运行gc并完全修剪悬空对象),那些悬空提交将丢失并且git-subtree不再具有执行拆分所需的信息.

我添加了一个脚本,可以完全重现我一直存在的问题.


我的问题是:

1)我可以做些什么来处理我现在有子树的现有情况,我想要合并回原始仓库,但不再有任何将它们链接在一起的历史记录.我目前的想法是做一些像:

git subtree split -P Some/Sub/Dir …
Run Code Online (Sandbox Code Playgroud)

git git-subtree

16
推荐指数
1
解决办法
6320
查看次数

我怎样才能始终了解Mercurial中的所有标签?

我不使用Mercurial,但我想开始,所以我正在阅读它.我广泛使用的唯一SCM系统是CVS.我读过的关于Mercurial的大部分内容都很有意义,听起来也不错.但是,我对这种标签的方式感到震惊和困惑.

标签只是变更集的昵称(而'变更集'我们实际上是指变更集产生的状态).凉.从标签到变更集ID的映射存储在.hgtags文件中.也很酷.该.hgtags文件已版本化.

什么?

这有很多违反直觉的后果.例如,如果我提交一个我想要标记的变更集(例如,将形成版本1.0的代码),我必须在标记后再次提交,以将更新的标记文件放入存储库.如果我稍后更新到该标记的变更集,则工作副本将不包含该标记的任何知识.如果我做了一些工作,从而建立了一个新的分支(例如,对于错误修正,朝向1.1),该分支将不知道它所生长的标记.除非我手动复制它,即.

随着开发在原始主干和我的新分支上继续进行,创建标签以标记重要的变更集(主干上的2.0版本,分支上的1.1和1.2错误修复版本),两个分支将继续无知其他分支分支的标签.所以,如果我在一个分支上完成工作,并希望切换到另一个分支上的某个特定变更集(比如说,我完成1.2 bugfix发布,但现在必须从2.1 bugfix开始,基于2.0),我现在已经塞满了.我目前的变化集不知道2.0!

我能做什么?

  • 我可以请一位在2.x分支上工作的人读出2.0的实际变更集ID,并明确地使用它,但这是令人震惊的.
  • 我可以命名我的分支,以及使用标签,这样我就可以跳到2.x分支的头部,从而了解新标签,然后跳回到2.0标签.假设分支与标签不同,是普遍可见的 - 就是这种情况吗?即使它是,这似乎很笨重.
  • 我可以hgtags在存储库外维护一个单独的全局文件,并使用一些钩子来获取更新的副本,覆盖本地副本,并复制提交中的任何更改.我不确定这在多用户环境中是如何工作的,开发人员正在将更改推送到共享存储库; 我可能只需要一个单独的存储库用于该hgtags文件.
  • 我可以使用本地标记,它们位于版本控制机制之外,因此避免了整个问题.与共享全局标记一样,我必须建立一种机制来localtags在开发人员之间同步文件.

这些解决方案似乎都不是很好.我该怎么办?

这里的假设是我在单个存储库中使用命名分支来管理分支,而不是每个分支存储库.如果我做后者,情况会好转吗?

tags mercurial dvcs

15
推荐指数
1
解决办法
3732
查看次数

你如何模拟输出流?

'输出蒸汽'是指任何接收字节序列或字符或其他内容的对象.所以,java.io.OutputStream,还有java.io.Writer,javax.xml.stream.XMLStreamWriter的writeCharacters方法等等.

我正在为一个类编写基于模拟的测试,该类的主要功能是将数据流写入其中一个(XMLStreamWriter,就像它一样).

问题是数据流是在对write方法的一系列调用中编写的,但重要的不是调用,而是数据.例如,给定XMLStreamWriter out,这些:

out.writeCharacters("Hello, ");
out.writeCharacters("world!");
Run Code Online (Sandbox Code Playgroud)

相当于:

out.writeCharacters("Hello, world!");
Run Code Online (Sandbox Code Playgroud)

这对我的目的来说无关紧要.将会有一些特定的调用序列,但我不在乎它是什么,因此我不想写出对该特定序列的期望.我只是希望能够以任何方式写入某个特定的数据流.

一种选择是切换到基于状态的测试.我可以在缓冲区中累积数据,并对其进行断言.但是因为我正在编写XML,这意味着要做一些相当复杂和丑陋的断言.模拟似乎是处理编写XML的更大问题的更好方法.

那么我如何用模拟做到这一点?

我正在使用Moxie进行模拟,但我很想知道任何模拟库的方法.

java outputstream mocking stream

15
推荐指数
2
解决办法
2万
查看次数

"噢,啪!" 检查Chrome中的元素时出错

每当我检查导航菜单中的任何元素,或者检查元素然后浏览到导航菜单时,我会在Google Chrome中收到"Aw,Snap"错误.我认为源必须有问题,但在编辑器中查看源代码后,似乎一切都是正确的格式.

可能导致此错误的原因是什么?

你可以点击这里查看网站:)

更新:

此代码中的某些内容导致错误:

<li>
    <a id="nav-corporate" class="accordionButton <?php if (is_page(1635) || is_page(1909)) { echo "curr-page-nav";}?>">Corporate</a>
<div class="sub-list-container">

    <ul>
        <li>
            <a href="<?php echo get_page_link(1635); ?>" id="nav-meeting" class="subitem"><span class="nav-hidden">Meetings</span></a>
        </li>
        <li>
            <a href="<?php echo get_page_link(1909); ?>" id="nav-event" class="subitem"><span class="nav-hidden">Events</span></a>
        </li>
    </ul>
    </div>
    </li>
Run Code Online (Sandbox Code Playgroud)

顺便说一下,我试过三台电脑.

html error-handling google-chrome

12
推荐指数
1
解决办法
8706
查看次数