运行由maven构建的具有以下依赖项的项目时:
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.7.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我在运行时收到以下错误:
java.lang.SecurityException: class "javax.persistence.Cacheable"'s signer information does not match signer information of other classes in the same package
Run Code Online (Sandbox Code Playgroud)
javax.persistence-2.2.0工件已签名并包含javax.persistence.Cacheable.class注释,而eclipselink-2.7.0工件未签名且包含相同的java类注释.
怎么解决这个问题?
编辑
用版本2.1.1替换javax.persistence artifact 2.2.0版修复了问题(这个没有签名),但我不确定这是正常情况.
我正在使用ant版本1.9.6和maven 3.3.9.以下ant任务因maven 3.3.9而失败.它与maven 3.2.5完美配合.
<artifact:mvn pom="modules/pom.xml" mavenHome="${env.MAVEN_HOME}" fork="true" failonerror="true">
<arg value="install" />
</artifact:mvn>
Run Code Online (Sandbox Code Playgroud)
错误消息是: [artifact:mvn] -Dmaven.multiModuleProjectDirectory system property is not set.
我设法找到了解决方法(并希望与您分享):
<artifact:mvn pom="modules/pom.xml" mavenHome="${env.MAVEN_HOME}" fork="true" failonerror="true">
<jvmarg value="-Dmaven.multiModuleProjectDirectory" />
<arg value="install" />
</artifact:mvn>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,添加jvmarg元素来设置maven.multiModuleProjectDirectory系统属性(没有任何指定值)可以解决问题.
问题:这个系统属性是关于什么的?我没有为这个系统属性指定任何值,我应该吗?(为了利用maven 3.3.x中的一些新功能)
我有一些JPA注释字段,如下所示:
@Column(name = "SOME_FIELD", updatable = false, nullable = false)
private final String someField;
Run Code Online (Sandbox Code Playgroud)
当实体插入数据库时,这些字段存储在数据库中.它们无法进一步更新.对于Java编程语言,可以将这些字段视为final.
使用EclipseLink静态编织插件,由于某些字节代码检测,可能会延迟加载实体.
我不知道JPA中是否正式允许这样的构造(最终字段),但我喜欢使用它们,因为它们在编译时强制执行这些字段并不是要更新.
在Java 8中,使用这种结构构建的程序运行良好.但是在Java 9中,当涉及EclipseLink静态编织时,我得到以下运行时异常:
Caused by: java.lang.IllegalAccessError: Update to non-static final field xxx.yyy.SomeEntity.someField attempted from a different method (_persistence_set) than the initializer method <init>
Run Code Online (Sandbox Code Playgroud)
这样的错误似乎是由于以下JVM规范:
否则,如果该字段是final,则必须在当前类中声明,并且该指令必须在当前类的实例初始化方法()中发生.否则,抛出IllegalAccessError.
因此,我觉得一些编织工具需要一些更新才能实现这个JVM规范.EclipseLink静态编织工具似乎就是其中之一.
问题:
编辑:
根据JPA规范,JPA中不允许使用最终字段:
实体类不能是最终的.实体类的方法或持久性实例变量可能不是最终的.
在我的项目中,我有一个可滚动的项目列表,每个项目都有一个菜单,当其激活按钮悬停时会打开该菜单。
默认情况下, v-menu 元素附加到 v-app 元素,作为许多 Vuetify 元素的安装点。当我使用此默认行为时,生成的 HTML 包含许多用于弹出菜单的分离 div 元素,列表中的每个项目一个,在生成的 v-app div 中:
<div class="menu__content" style="min-width: 0px; top: 12px; left: 0px; transform-origin: left top 0px; z-index: 0; display: none;"></div>
Run Code Online (Sandbox Code Playgroud)
这会影响渲染 DOM 的读取,结果有点混乱,尤其是在调试时。
此外,一旦打开菜单并滚动列表,菜单将保持在固定位置,因此在视觉上与其激活器按钮分离。
我怎样才能将菜单附加到列表的每个项目上,以获得更易读的渲染 DOM(见下文)?
<my-list>
<my-item>
<div class="menu__content" style="min-width: 0px; top: 12px; left: 0px; transform-origin: left top 0px; z-index: 0; display: none;"></div>
</my-item>
</my-list>
Run Code Online (Sandbox Code Playgroud)
以及如何在滚动列表时将 v 菜单粘到其激活按钮上?
可能第一个问题应该是:什么可以帮助我决定我的微服务是否应该包含一个可能有多个聚合的整个有界上下文,或者它应该只包含一个聚合?
如果微服务包含多个聚合,那么我脑海中就会出现另一个问题:微服务应该有多个事务边界(每个聚合一个)还是只有一个事务边界(有界上下文)?
也许,这些问题的答案是:视情况而定。但我想有一些理由来做出正确的决定。
我尝试实现一个实验性微服务,该微服务实现了由 3 个聚合和每个聚合一个事务边界组成的有界上下文,但我遇到了一些痛点:
然后我设想了将微服务拆分为多个微服务的可能性,每个微服务一个:
我还没有找到关于这个主题的一些文档来指导我做出决策。
编辑:
考虑到有界上下文可以是一组作为合作伙伴一起工作的微服务,并且每个微服务将使用自己的扩展策略封装一个且仅一个聚合,这是否有意义?
然后,每个微服务都有一个且只有一个改变的理由:聚合。
eclipselink ×2
java ×2
jpa ×2
ant ×1
html ×1
java-9 ×1
jpa-2.2 ×1
maven ×1
vue.js ×1
vuetify.js ×1