我有一个抽象基类,我用它作为单元测试的基础(TestNG 5.10).在这个类中,我初始化我的测试的整个环境,设置数据库映射等.这个抽象类有一个带有@BeforeClass
注释的方法来进行初始化.
接下来,我使用特定的类扩展该类,其中我有@Test
方法和@BeforeClass
方法.这些方法对类环境进行特定于类的初始化(例如,将一些记录放入数据库中).
我如何强制执行@BeforeClass
注释方法的特定顺序?我需要抽象基类中的那些在扩展类之前执行.
例:
abstract class A {
@BeforeClass
doInitialization() {...}
}
class B extends A {
@BeforeClass
doSpecificInitialization() {...}
@Test
doTests() {...}
}
Run Code Online (Sandbox Code Playgroud)
预期订单:
A.doInitialization
B.doSpecificInitialization
B.doTests
Run Code Online (Sandbox Code Playgroud)
实际订单:
B.doSpecificInitialization // <- crashes, as the base init is missing
(A.doInitialization // <---not executed
B.doTests) // <-/
Run Code Online (Sandbox Code Playgroud) 对于PMD,我想有一个规则,警告我那些从我的开始的丑陋变量.这意味着我必须接受所有不以我的方式开头的变量.
所以,我需要一个RegEx(re),其行为如下:
re.match('myVar') == false
re.match('manager') == true
re.match('thisIsMyVar') == true
re.match('myOtherVar') == false
re.match('stuff') == true
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的(稍后会在这里列出,抱歉,现在无法访问它们),但尚未使用它.
我们尝试使用全新的KIE工作台(以前称为Guvnor)和新的基于maven的工件切换到Drools 6.
现在我想在第二张图片("部署")中使用本博文中描述的系统:通过HTTP从工作台存储库加载规则(虚线箭头,从左边的HTTP直接进入应用程序) .
问题是,我不知道如何将工件加载到我的KieServices/KieModule对象中.我基本上不想使用maven,我也无法提供maven settings.xml
作为Java参数的全局路径,所以这个选项已经出来了.
我认为,类似的问题是这一个.正如那里提到的,我也试图加载一个URL资源,但问题似乎是系统无法确定ResourceType
给定的URL(http://localhost:8080/kie-drools/maven2/.../-1.0.0.jar
)是什么类型.是的,我可以直接从浏览器访问存储库中的.jar,无需身份验证.
任何想法或教程如何做到这一点?
我的测试代码:
public static void main(String[] args) {
KieServices ks = KieServices.Factory.get();
KieRepository repo = ks.getRepository();
String url = "http://localhost:8080/kie-drools/maven2/de/test/test/1.0.0/test-1.0.0.jar";
Resource urlResource = ks.getResources().newUrlResource(url);
KieModule kModule = repo.addKieModule(urlResource); // this already fails
}
Run Code Online (Sandbox Code Playgroud)
错误:
Exception in thread "main" java.lang.RuntimeException: Unable to fetch module from resource :[UrlResource path='http://localhost:8080/kie-drools/maven2/de/itm/Herma400/1.0.1/Herma400-1.0.1.jar']
at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.getKieModule(KieRepositoryImpl.java:205)
at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.addKieModule(KieRepositoryImpl.java:161)
at kieTest.MainKieTest.main(MainKieTest.java:24)
Caused by: java.lang.NullPointerException
at org.drools.compiler.kie.builder.impl.ClasspathKieProject.getPomProperties(ClasspathKieProject.java:197)
at org.drools.compiler.kie.builder.impl.ClasspathKieProject.fetchKModule(ClasspathKieProject.java:148)
at org.drools.compiler.kie.builder.impl.ClasspathKieProject.fetchKModule(ClasspathKieProject.java:109)
at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.getKieModule(KieRepositoryImpl.java:190) …
Run Code Online (Sandbox Code Playgroud) 我正在使用Hibernate Envers来审核我的实体和属性(org.hibernate.envers.global_with_modified_flag=true
).这似乎有效,但现在我想得到一个特定实体的所有属性,与前一个相比,它在给定的修订版本中发生了变化.作为奖励,将变更集从一个修订版转换到另一个修订版会很好.到目前为止,我只获得修改过的实体:
List<Object> modifiedClassesAtRevision = getAuditReader().getCrossTypeRevisionChangesReader().findEntities(revision, RevisionType.MOD)
Object modifiedObject = modifiedClassesAtRevision.get(0);
Run Code Online (Sandbox Code Playgroud)
现在,因为我不想为Java中的所有实体创建比较方法,有没有办法获得此修订版的修改属性?有点像
List<String> modifiedProperties = getAuditReader().getModifiedProperties(modifiedObject, revision);
Run Code Online (Sandbox Code Playgroud)
会很高兴 - 但也许我太愚蠢而无法找到那种功能.
我使用KIE Workbench(6.1.0.Beta3)来编辑我的规则.由于Workbench还没有支持某些功能(例如将规则移到其他包中),我想在KIE-WB之外做这些事情.
为此,我克隆了我的存储库
git clone git://localhost:9418/my-kie-repository
Run Code Online (Sandbox Code Playgroud)
哪个工作正常.我编辑一些文件,在本地提交,然后尝试git push
.但是我得到了错误
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.
Run Code Online (Sandbox Code Playgroud)
因为我几乎可以肯定它是第一个问题,关于凭证,我在.git/config
文件中添加了行
[credential "git://localhost:9418"]
username = admin
password = admin
Run Code Online (Sandbox Code Playgroud)
不过,我得到了前面提到的错误.是的,KIE Workbench仍在运行,我也可以从那里获取/拉取没有问题.
有没有办法如何推回到KIE Workbench存储库?根据这条消息,一个"可能需要重新配置原点",但我不确定如何更改它.
有人知道如何正确设置吗?
我确实有一个带有NUMBER(实际上是BigDecimal,不要问为什么)列的静态元模型.现在我想对该数字列进行LIKE查询:
CriteriaBuilder cb;
cb.like(entity.get(Entity_.numbercol), "123%");
Run Code Online (Sandbox Code Playgroud)
哪里entity.get(Entity_.numbercol)
返回一个Path<BigDecimal>
.当然,我得到一个编译错误:...like(Expression<String>, ...) ... not applicable for the arguments (Path<BigDecimal>, ...)
.as(String.class)
由于JPA中存在一些错误而导致列失败,但我现在手头没有错误编号.但是,在最新版本的JPA/Hibernate中并没有修复它.无论如何,它会导致生成一些无效SQL语句的运行时异常.
现在我只需要一种方法来获得与SQL相当的标准API
... WHERE numbercol LIKE '123%';
Run Code Online (Sandbox Code Playgroud)
搜索主题已经提出了以下响应,这没有帮助,因为我有一个静态元模型: NHibernate - 使用Criteria API对整数列进行LIKE搜索的最简单方法?和JPA/Criteria API - 喜欢和平等的问题
有任何想法吗?
在此先感谢Dominik
我试图在Wildfly 8.0.0.Final上使用KIE-CI(用于动态Maven打包规则)部署Drools.
我的简约测试项目的POM是:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.testing</groupId>
<artifactId>testprojekt</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<drools-version>6.0.1.Final</drools-version>
</properties>
<dependencies>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>${drools-version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>${drools-version}</version>
</dependency>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-ci</artifactId>
<version>${drools-version}</version>
</dependency>
</dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)
部署失败,并出现以下错误:
11:58:35,430 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC000001: Failed to start service jboss.deployment.unit."testprojekt-1.0-SNAPSHOT.war".WeldStartService: org.jboss.msc.service.StartException in service jboss.deployment.unit."testprojekt-1.0-SNAPSHOT.war".WeldStartService: Failed to start service
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) [jboss-msc-1.2.0.Final.jar:1.2.0.Final]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_51]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_51]
at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_51]
Caused by: org.jboss.weld.exceptions.DeploymentException: Exception List with 2 exceptions:
Exception …
Run Code Online (Sandbox Code Playgroud) 我有 vertx 版本 3.3.2 和 JUnit 版本 4.12 的 vertx 单元测试。以下单元测试永远不会完成:
@RunWith(VertxUnitRunner.class)
public class SomeVerticleTest {
private Vertx vertx;
@Before
public void before(TestContext context) {
vertx = Vertx.vertx();
vertx.deployVerticle(SomeVerticle.class.getName(), r -> context.asyncAssertSuccess()); // problem is in this line, see answer for solution!
}
@Test
public void doStuff(TestContext context) {
String encodedMessage = Json.encode("myMessage");
Async async = context.async();
vertx.eventBus().send("someVerticle", encodedMessage, asyncResult -> {
// some context.asserts on the message reply
async.complete(); // this line is executed, I can see it in …
Run Code Online (Sandbox Code Playgroud) 我想从gRPC StreamObserver创建Reactor Flux。只要 StreamObserver 没有本地实现相应的接口(参见例如这个问题),就需要这样做。
我想出的内容大致如下:
final StreamObserver<ProtoResponse>[] streamObserverArray = new StreamObserver[1];
Flux<Response> myFlux Flux.create(sink -> streamObserverArray[0] = new StreamObserver<ProtoResponse>() {
@Override
public void onNext(ProtoResponse value) {
final Response response = convertFromProto(value);
sink.next(response);
}
@Override
public void onError(Throwable throwable) {
sink.error(throwable);
}
@Override
public void onCompleted() {
sink.complete();
}
});
myFlux
.doOnError(throwable -> {/* actual logic in here */}) //
.doOnComplete(() -> {/* actual logic in here */}) //
.doOnCancel(() -> {/* actual logic …
Run Code Online (Sandbox Code Playgroud) 我正在使用Protobuf3,需要创建地图列表。我以为我可以使用,repeated map<string, string>
但似乎不能。
我应该怎么用呢?
谢谢
鉴于以下情况:
CriteriaQuery<SomeDTO> cQuery;
CriteriaBuilder cb;
Root<SomeClass> r;
...
cQuery.select(cb.construct(SomeDTO.class,
"FIXED VALUE",
r.get(SomeClass_.someValue)
));
Run Code Online (Sandbox Code Playgroud)
有没有办法使用 JPA 标准 api 和静态元模型来创建一个选择,它为一列返回一个固定值?相应的 SQL 应该类似于
SELECT 'FIXED VALUE', someValue FROM someClassTable WHERE ...;
Run Code Online (Sandbox Code Playgroud)
提前致谢!