1

我正在尝试几个 jQAssistant 插件,在本例中是 EJB3 插件。

我想我还没有掌握概念的概念。我期待在扫描包含一些 EJB 的 Maven 模块后出现像“Ejb”、“Local”和“Remote”这样的节点标签。

但是,我没有看到类似的东西。

但是,如果我在手册中运行查询,例如

MATCH (t:Type)-[:ANNOTATED_BY]->()-[:OF_TYPE]->(a:Type)
WHERE a.fqn="javax.ejb.Local"
SET t:Ejb:Local
RETURN t AS LocalBean

然后我看到标签“本地” - 毕竟,查询设置了它:-)

这可能是一个新手问题......但是我应该在扫描后运行查询吗?还是应该由 EJB3 插件设置这些标签?

4

1 回答 1

0

扫描仅将“原始”数据导入图形数据库,对于 Java,它仅表示字节码的结构,其中包含包类、方法、字段、注释或调用等元素。

的目的concepts是使用更高级别的抽象来丰富此信息,例如,表示带有注释的 Java 类的节点@Local被标记为EjbLocal更容易被其他概念或约束使用。然后那些可以仅仅依靠标签Ejb来执行检查,例如在服务层包中的正确位置。根据项目特定的命名规则,它们本身将被一个概念标记:

[[adr:ServiceLayer]]
[source,cypher]
.The package named `service` within the root package represents the `Service` `Layer`.
----
MATCH
  (root:Package)-[:CONTAINS]->(serviceLayer:Package)
WHERE
  root.fqn = "my.project.root"
  and serviceLayer.fqn = "service"
SET
  serviceLayer:Service:Layer
RETURN
  serviceLayer as `Service Layer`

约束现在将取决于这两个概念并使用如下查询:

[[adr:EjbsMustBeLocatedInServiceLayer]]
[source,cypher,role=constraint,requiresConcepts="ejb:*,adr:ServiceLayer"]
.All EJBs must be located in the service layer.
----
MATCH
  (ejb:Ejb)
WHERE NOT
  (:Service:Layer)-[:CONTAINS*]->(ejb)
RETURN
  ejb as `EJB Outside Service Layer`
----

必须显式应用概念,通常将它们定义为依赖项:

于 2021-09-27T16:36:36.570 回答