小编Dep*_*sio的帖子

使用dropwizard-migrations:找不到liquibase.logging.Logger的实现

我有一个非常奇怪的例外,我无法弄清楚原因.当我跑步时db status,我得到:

Caused by: liquibase.exception.ServiceNotFoundException: liquibase.exception.ServiceNotFoundException: liquibase.exception.ServiceNotFoundException: Could not find implementation of liquibase.logging.Logger
        at liquibase.logging.LogFactory.getLogger(LogFactory.java:19)
        at liquibase.logging.LogFactory.getLogger(LogFactory.java:30)
        at liquibase.database.DatabaseFactory.findCorrectDatabaseImplementation(DatabaseFactory.java:67)
        at liquibase.Liquibase.<init>(Liquibase.java:52)
        at com.yammer.dropwizard.migrations.ManagedLiquibase.<init>(ManagedLiquibase.java:47)
        at com.yammer.dropwizard.migrations.AbstractLiquibaseCommand.run(AbstractLiquibaseCommand.java:39)
        at com.yammer.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:58)
        at com.yammer.dropwizard.cli.Cli.run(Cli.java:53)
        at com.yammer.dropwizard.Service.run(Service.java:61)
        at com.derp.SomeService.main(SomeService.java:27)
        ... 6 more
Caused by: liquibase.exception.ServiceNotFoundException: liquibase.exception.ServiceNotFoundException: Could not find implementation of liquibase.logging.Logger
        at liquibase.servicelocator.ServiceLocator.newInstance(ServiceLocator.java:179)
        at liquibase.logging.LogFactory.getLogger(LogFactory.java:17)
        ... 15 more
Caused by: liquibase.exception.ServiceNotFoundException: Could not find implementation of liquibase.logging.Logger
        at liquibase.servicelocator.ServiceLocator.findClass(ServiceLocator.java:145)
        at liquibase.servicelocator.ServiceLocator.newInstance(ServiceLocator.java:177)
        ... 16 more
Run Code Online (Sandbox Code Playgroud)

我不知道如何解决它.谷歌搜索,它似乎是一个有点间歇性的问题,在过去,在Liquibase中产生了错误修正.我没想到这会在这样的集成功能中发生.我正在使用dropwizard-core/hibernate/migrations 0.6.2.我正在使用com.smokejumperit.gradle.OneJarPlugin gradle插件来打包它,我认为它也负责类加载.

无论如何,我有点失落.有任何想法吗?有人见过这个吗?

liquibase dropwizard

8
推荐指数
0
解决办法
1034
查看次数

ChronicleMap中的多重映射

ChronicleMap的GitHub肯定有关于ChronicleMap中 Multimaps 的免责声明:

纪事地图不是......

......没有二级索引.

多图.使用ChronicleMap<K, Collection<V>>as multimap在技术上是可行的,但往往会导致问题......

不幸的是,这是我的一个用例,并且使用堆外存储(使用ChronicleMap)肯定是最简单的方法.

让我试着用披萨来解释我的问题.我有10万种不同的比萨饼.每个披萨都有一个ID和许多不同的浇头和面包皮.我有三种访问模式:

  • 通过身份证给我披萨.
  • 给我所有有特别馅料的比萨饼.
  • 给我所有有特殊外壳的比萨饼.

我可以用a轻松存放比萨饼ChronicleMap<UUID,Pizza>.但这只是一种访问模式.我不想遍历每一个披萨,找到具有匹配的顶部或外壳的披萨.所以,我想存储的东西像ChronicleMap<Topping,Collection<UUID>>ChronicleMap<Crust,Collection<UUID>>.

然后,如果有人问我所有的意大利辣香肠披萨,我会在顶部的ChronicleMap中查找匹配的比萨饼的UUID,然后在主披萨地图中.

但上面引用的文档让我感到害怕.有谁知道这些事情经常导致的"问题"是什么?我为什么不这样做,即使它似乎对我有用?它是否与ChronicleMap如何存储序列化对象(特别是集合)有关?

针对潜在问题的一些补充说明:

  1. 我们稍后可能会添加比萨饼,这也需要更新收藏品.
  2. 许多进程正在尝试执行这些操作,因此需要通过ChronicleMap而不仅仅是基本的ConcurrentMap来共享地图.

java chronicle chronicle-map

8
推荐指数
1
解决办法
2775
查看次数

FontAwesome不能作为字体系列?

这无疑是我做一些非常愚蠢的事情,但我看不到它.我试图在我的CSS中使用FontAwesome作为字体系列,但它似乎没有用.

使用最少的代码,我有:

<head>
    <link href="assets/css/font-awesome.css" rel="stylesheet">
    <style>
        body {
            font-family: FontAwesome;
        }
    </style>
</head>
<body>
    Test FontAwesome!
</body>
Run Code Online (Sandbox Code Playgroud)

这显示为Times New Roman.

FontAwesome字体本身存储在assets/font /中,font-awesome.css具有以下@font-face定义:

@font-face {
  font-family: 'FontAwesome';
  src: url('../font/fontawesome-webfont.eot?v=3.0.1');
  src: url('../font/fontawesome-webfont.eot?#iefix&v=3.0.1') format('embedded-opentype'),
    url('../font/fontawesome-webfont.woff?v=3.0.1') format('woff'),
    url('../font/fontawesome-webfont.ttf?v=3.0.1') format('truetype');
  font-weight: normal;
  font-style: normal;
}
Run Code Online (Sandbox Code Playgroud)

更改..to assets给出了一个明显的错误,它无法找到字体,所以我很确定相对路径是好的和花花公子.如果我将其更改为font-family: FontAwesome,Arial;,则使用Arial.显然,它找不到FontAwesome,我不知道为什么.

我无法将我的正文字体更改为FontAwesome的任何特殊原因?

css font-face font-awesome

7
推荐指数
4
解决办法
4万
查看次数

使用EntityManager替换实体的最佳方法

我正在使用JPA EntityManager来执行某些操作,并且一个此类操作正在将实体替换为具有相同实体的另一个实体@Id.那么,给定一个oldObject和一个newObject,什么是最好的方法来删除oldObject并替换它newObject

这里有一些不起作用的代码:

try
{
    entityManager.getTransaction().begin();
    entityManager.remove(oldObject);
    entityManager.persist(newObject);
    entityManager.getTransaction().commit();
}
catch (PersistenceException persistExc)
{
    entityManager.getTransaction().rollback();
    // do some stuff
}
Run Code Online (Sandbox Code Playgroud)

此代码获得以下异常:

javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: com.depressio.SomeObject
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1215)
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1148)
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1154)
    at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:678)
Run Code Online (Sandbox Code Playgroud)

现在,它当然可行,如果不是删除实体,我只是更新其已更改的字段.但是,我只是被赋予了新的对象(UI通过REST将它扔给我),所以我真的不知道哪些字段已经改变,所以我必须更新每个字段.如果有大量的田地,那就不理想了.

我觉得我对如何正确删除有点困惑.我认为EntityManager.remove是正确的方式,但我猜不是.

提前致谢!

编辑1:我觉得我应该注意oldObject.id == newObject.id.在id通过产生@SequenceGenerator.如果标识符已经用生成器注释,我是否可以使用标识符来持久保存对象?

编辑2:根据这里最热门的答案,因为@Id已经定义了它并且它是一个自动生成的字段,Hibernate认为它已经分离了.现在我知道为什么我会得到例外,但解决方案仍然不清楚.

hibernate jpa entitymanager

7
推荐指数
1
解决办法
3860
查看次数

当剪切是在超类上时,如何避免两次击中切入点,但是派生类会覆盖?

为此做一个简洁的标题很难.

无论如何,想象一下我有一个父类:

    public class Shape {
        public Dimensions getDimensions() {
            // Does some generic stuff.
        }
    }
Run Code Online (Sandbox Code Playgroud)

我有一个派生类来覆盖getDimensions方法:

    public class Circle extends Shape {
        public Dimensions getDimensions() {
            // Does some stuff.
            super.getDimensions();
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我创建一个带有切入点的方面时Shape.getDimensions,切入点Circle.getDimensions被调用两次:一次用于Circle.getDimensions,然后一次调用super.getDimensions.

切入点看起来像这样: @Pointcut("execution(* Shape.getDimensions(..))")

我在建议中添加了一个黑客来检查声明类型的名称(使用JoinPoint.getSignature().getDeclaringType().getName()),但我发现它相当粗糙,感觉有点像黑客.我认为必须有一个更好的方法来做到这一点.

在那儿?

如果格式不是很好,请道歉.第一次在这里问一个问题(我通常可以找到答案).

java aspectj super pointcut aspect

6
推荐指数
1
解决办法
366
查看次数

Backbone.Marionette.ItemView渲染后元素没有准备好?

即使在Backbone.Marionette.ItemView的onRender方法中,我也无法访问元素.

例如,我有:

模板:

<input type="text" id="searchBox">`
Run Code Online (Sandbox Code Playgroud)

ItemView控件:

View = Backbone.Marionette.ItemView.extend
    template: searchTemplate
    onRender:
        @setTypeahead ['a', 'b', 'c', 'd']
    setTypeahead: (valueArray) ->
        console.log $('#searchBox')
        $('#searchBox').typeahead
            source: valueArray
Run Code Online (Sandbox Code Playgroud)

出乎意料的是,记录到控制台的对象不包含input元素.选择器不起作用.这是为什么?

在木偶的GitHub上的微小的代码块内部的意见在这里提到了"操纵el在这里.它已经被呈现,是一部充满视图的HTML的,蓄势待发." 除非我误解了这一点,否则我认为该模板将被渲染并准备在ItemView的onRender函数内操作.

javascript ajax backbone.js twitter-bootstrap marionette

5
推荐指数
1
解决办法
4039
查看次数

将JSON编码为Backbone.Model.save的URL参数(patch = true)

我在正确形成Backbone.Model.save调用方面遇到了一些麻烦.我正在调用的Web服务使用URL参数,但我在Javascript中拥有的是更改字段的对象.例如,我有对象{foo: 'bar', yar: 'har'},我希望Backbone.Model.save向URL发送补丁请求http://server/path/to/service?foo=bar&yar=har

听起来很简单吧?无论如何,它给了我一堆麻烦.这是我到目前为止所做的事情(这不起作用;我也有成功/错误回调,但我不认为这些对于这个问题很重要):

object = 
    foo: 'bar', 
    yar: 'har'

model.save object,
    patch: true
Run Code Online (Sandbox Code Playgroud)

我也尝试过其他一些选择:

model.save object,
    patch: true
    emulateJSON: true
Run Code Online (Sandbox Code Playgroud)

这将contentType设置为"application/x-www-form-urlencoded",这很好,但是Backbone.sync在ajax请求中发送的数据是:{model:"{"foo":"bar","yar" :"har"}".该服务得到了,并不知道如何处理"模型"属性.

model.save object,
    patch: true
    contentType: "application/x-www-form-urlencoded"
Run Code Online (Sandbox Code Playgroud)

这只是编码object为字符串和东西options.data.同样,该服务不知道如何处理它.

关于如何使其符合我的服务规范的任何其他想法?我可以自己做ajax调用并自己更新模型(以及它所属的集合),但我真的不愿意这样做.对我有用的ajax请求是:

$.ajax
    url: "http://server/path/to/service"
    type: "PATCH"
    data: object
Run Code Online (Sandbox Code Playgroud)

更新:我的两个早期选项不起作用的原因在Backbone.js本身很清楚:

// Ensure that we have the appropriate request data.
if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {
  params.contentType = 'application/json';
  params.data …
Run Code Online (Sandbox Code Playgroud)

javascript ajax backbone.js

5
推荐指数
1
解决办法
2944
查看次数

在Gradle中使用jettyRun将环境变量发送到jetty

我如何使用gradle插件为jetty提供环境变量?它在servlet中运行的一些代码需要设置一个特定的环境变量,但是我无法想出一个好的方法将它发送到jetty进程,就像你可以用JavaExec任务一样(通过environment方法).

也可以接受的是财产.例如,如果我要运行一些java,我会包含一个-Dproperty.name=blah将它发送给它的property.name属性.

我们可以为Test和JavaExec任务执行此操作...我们可以为JettyRun任务执行此操作吗?

jetty gradle

5
推荐指数
1
解决办法
2432
查看次数

在运行Gradle的PMD插件时在jar路径中包含jar

我正在尝试使用自定义规则集文件运行PMD,但该规则集包含一个自定义类的规则.这个类存在于一个jar中,它不是作为依赖项引入的,而是一个zip文件(它是一个依赖项)并被解压缩.想象一下PMD规则类就在build/extralib/blah.jar.

如何仅在运行PMD时将其包含在我的类路径中?我尝试了什么,但没有奏效:

pmd {
    ruleSetFiles = files("build/utils/pmd-rules.xml")
    pmdClasspath = files("build/extralib")
}
Run Code Online (Sandbox Code Playgroud)

要清楚,错误是:java.lang.ClassNotFoundException: com.package.for.pmd.CrazyRule.发生这种情况时运行pmdMain.

次要问题:PmdPmdExtension有什么区别?Pmd有pmdClasspath,但PmdExtension没有.当我加入时pmdClasspath,我得到了:

Creating properties on demand (a.k.a. dynamic properties) has been deprecated and is scheduled to be removed in Gradle 2.0. Please read http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html for information on the replacement for dynamic properties. Deprecated dynamic property: "pmdClasspath" on "org.gradle.api.plugins.quality.PmdExtension_Decorated@70221fc5", value: "file collection".

所以我猜它只坚持PmdExtension?作为Gradle新手,它有点令人困惑......

pmd gradle

4
推荐指数
1
解决办法
1286
查看次数

对两个条件查询使用相同的谓词

我想使用相同的数组运行一对查询Predicate:一个用于计算记录,一个用于获取某一页记录。对我来说,这似乎是一个非常正常的用例,所以一定有一个好的方法来做到这一点,但我还没有找到它。

这是获取实体的部分:

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
EntityType<ENTITY> entityType = entityManager.getMetamodel().entity(FooEntity.class);
CriteriaQuery<FooEntity> entityQuery = criteriaBuilder.createQuery(FooEntity.class);
Root<FooEntity> entityRoot = entityQuery.from(FooEntity.class);

// Use the criteria builder, root, and type to create some predicates.
Predicate[] predicates = createPredicates(criteriaBuilder, entityRoot, entityType );

// Fetch the entities.
entityQuery.select(entityRoot);
entityQuery.where(predicates);
List<FooEntity> entities = entityManager.createQuery(entityQuery)
    .setFirstResult(0) // Just get the first page
    .setMaxResults(50)
    .getResultList();
Run Code Online (Sandbox Code Playgroud)

这有效。我们得到了我们想要的,谓词是正确的等等。

但是,创建另一个查询来使用相同谓词确定计数会失败。我尝试了两种不同的方法:

(1) 重复使用Root

CriteriaQuery<Long> countQuery = criteriaBuilder.createQuery(Long.class);
countQuery.select(criteriaBuilder.count(entityRoot));
countQuery.where(predicates);
long count = entityManager.createQuery(countQuery).getSingleResult();
Run Code Online (Sandbox Code Playgroud)

这不起作用并给了我java.lang.IllegalStateException: No criteria query roots …

java hibernate jpa criteria-api

4
推荐指数
1
解决办法
2516
查看次数

使用Gradle将LESS编译为CSS而不安装插件

这似乎是一个奇怪的问题.我想将LESS编译成CSS而不在我的本地gradle中安装插件.有几个gradle插件可以将LESS编译成CSS,这很棒,但我想在运行时编译和使用插件,而不是先安装它们.

这可能吗?如果有一个像CoffeeScript这样的标准插件,那就没什么大不了的了,但是LESS没有.我对Gradle很新,所以我不确定如何前进.显而易见的解决方案是血腥安装插件,但是给定一个我不能的约束,是否可以在运行时编译/使用它?

less gradle

3
推荐指数
1
解决办法
4737
查看次数

Hibernate(或EntityManager?)添加"where 0 = 1"进行查询

我正在使用JPA EntityManager + Hiberate,并且出现了一个非常重要的where子句.来自Hibernate的调试基本上显示:

select /* bunch of columns */
from some_table
where /* several filters */
  and 0=1
Run Code Online (Sandbox Code Playgroud)

运行时会发生这种情况javax.persistence.Query.getResultList.该Query有数组Predicates的where子句中,但放心,0 = 1是不是其中之一.

我找不到该0=1部分包含在查询中的可能原因.有任何想法吗?我先找一个答案,但搜索引擎会忽略=.

hibernate jpa entitymanager

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

在不同的命名空间中调用相同的函数

我有命名空间foobar. 两者都有功能hello

我正在尝试编写一个基于参数调用foo/hello或 的函数。bar/hello换句话说:

(defn say-hello [target-namespace]
  (if (= target-namespace "foo")
    (foo/hello)
    (bar/hello)
Run Code Online (Sandbox Code Playgroud)

类似的事情,只是假设有 15 个命名空间,所以简单的 if-else 是不够的。最好以某种方式利用target-namespace并找出从中调用的函数。有没有好的方法可以做到这一点?

clojure clojurescript

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