OrientDB“无法找到命令执行程序的命令请求”错误

问题描述:

我最初发布这是一个臭虫在OrientDB issue tracker。然而,我并不确定它是一个bug ...OrientDB“无法找到命令执行程序的命令请求”错误

基本上,当我从IDE运行项目时,一切都很好,所有查询都顺利执行。但是,当我使用maven-shade-plugin打包该项目时,我开始获取这些Cannot find a command executor for the command request:错误,但仅针对一部分查询。在我pom.xml我声明如下:

<!-- As defined: http://orientdb.com/docs/last/Graph-Database-Tinkerpop.html --> 
<dependency> 
    <groupId>com.orientechnologies</groupId> 
    <artifactId>orientdb-core</artifactId> 
    <version>${orientdb-version}</version> 
</dependency> 
<dependency> 
    <groupId>com.orientechnologies</groupId> 
    <artifactId>orientdb-graphdb</artifactId> 
    <version>${orientdb-version}</version> 
</dependency> 
<dependency> 
    <groupId>com.tinkerpop.blueprints</groupId> 
    <artifactId>blueprints-core</artifactId> 
    <version>2.5.0</version> 
</dependency> 
<dependency> 
    <groupId>net.java.dev.jna</groupId> 
    <artifactId>jna-platform</artifactId> 
    <version>4.0.0</version> 
</dependency> 
<dependency> 
    <groupId>net.java.dev.jna</groupId> 
    <artifactId>jna</artifactId> 
    <version>4.2.0</version> 
</dependency> 
<dependency> 
    <groupId>com.googlecode.concurrentlinkedhashmap</groupId> 
    <artifactId>concurrentlinkedhashmap-lru</artifactId> 
    <version>1.4.2</version> 
</dependency> 
<!-- Include to enable embedded db if user selects single mode --> 
<dependency> 
    <groupId>com.orientechnologies</groupId> 
    <artifactId>orientdb-server</artifactId> 
    <version>${orientdb-version}</version> 
</dependency> 
<!-- Include to enable remote db if user selects distributed mode --> 
<dependency> 
    <groupId>com.orientechnologies</groupId> 
    <artifactId>orientdb-client</artifactId> 
    <version>${orientdb-version}</version> 
</dependency> 
... 
<orientdb-version>2.1.3</orientdb-version> 

我添加以下过滤器树荫插件尝试,并确保没有得到剥离出来,但它不会出现已经解决了这一问题:

<filters> 
    <filter> 
     <artifact>*:*</artifact> 
     <includes> 
      <include>**</include> 
     </includes> 
    </filter> 
</filters> 

堆栈跟踪:

Caused by: com.orientechnologies.orient.core.command.OCommandExecutorNotFoundException: Cannot find a command executor for the command request: sql.CREATE EDGE hasRole FROM (SELECT FROM Person WHERE @rid=#15:0) TO (SELECT FROM Role WHERE @rid=#16:1) 
    at com.orientechnologies.orient.core.sql.OCommandExecutorSQLDelegate.parse(OCommandExecutorSQLDelegate.java:72) ~[halo-1.0.0.jar:1.0.0] 
    at com.orientechnologies.orient.core.sql.OCommandExecutorSQLDelegate.parse(OCommandExecutorSQLDelegate.java:42) ~[halo-1.0.0.jar:1.0.0] 
    at com.orientechnologies.orient.core.storage.impl.local.OAbstractPaginatedStorage.command(OAbstractPaginatedStorage.java:1431) ~[halo-1.0.0.jar:1.0.0] 
    at com.orientechnologies.orient.core.command.OCommandRequestTextAbstract.execute(OCommandRequestTextAbstract.java:63) ~[halo-1.0.0.jar:1.0.0] 
    at com.tinkerpop.blueprints.impls.orient.OrientGraphCommand.execute(OrientGraphCommand.java:49) ~[halo-1.0.0.jar:1.0.0] 
    at co.ff36.halo.core.persistence.Dao.exec(Dao.java:94) ~[halo-1.0.0.jar:1.0.0] 
    at co.ff36.halo.core.resource.server.UserRoleServerResource.store(UserRoleServerResource.java:63) ~[halo-1.0.0.jar:1.0.0] 
    ... 57 common frames omitted 
+0

你有堆栈跟踪? – wolf4ood

+0

@ wolf4ood是的,补充了相关的痕迹。也不是它应该是相关的,但为了完整性,错误来自“OCommandSQL”。 'graph.command(新的OCommandSQL(“...”))。execute();' – tarka

+0

添加了答案。有了这个,你应该解决它 – wolf4ood

问题是行家遮阳帘插件是没有能够默认合并服务文件。 OrientDB使用Java服务以相同的接口注入命令。我认为,如果你在构建时看到一些日志,你会看到阴影插件跳过某个文件,因为它们已经存在。 我想你可以解决它增加了一些合并策略

https://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#ServicesResourceTransformer