我正在使用JPA EntityListener来执行一些额外的审计工作,并使用@Configurable将Spring管理的AuditService注入到AuditEntryListener中.AuditService生成AuditEntry对象的集合.AuditService本身就是一个Singleton范围的bean,我想收集一个公共密钥下的所有AuditEntry对象,然后可以由最外层的服务层(调用persist调用,然后触发EntityListener)访问.
我正在考虑使用Spring的TransactionSynchronizationManager在事务开始时设置一个特定的事务名称(使用UID()或其他一些独特的策略),然后使用该名称作为AuditService中的一个键,允许我对所有组进行分组在该事务中创建的AuditEntry对象.
混合声明式和程序式事务管理是否有可能出现问题?(虽然我只是设置事务名称).有没有更好的方法将生成的AuditEntry对象与当前事务相关联?这个解决方案对我有用,但鉴于TransactionSynchronizationManager不是供应用程序使用,我想确保我对它的使用不会导致一些不可预见的问题.
最后,一个相关的,但不是直接相关的问题:我知道JPA EntityListeners的文档警告不要使用当前的EntityManager,但如果我确实想用它来区分对象的持久化自我,我是否可以安全地使用@围绕我的preUpdate()方法的事务性(传播= REQUIRES_NEW)注释?
服务类
@Transactional
public void create(MyEntity e) {
TransactionSynchronizationManager.setCurrentTransactionName(new UID().toString());
this.em.persist(e);
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void afterCommit() {
Set<AuditEntry> entries = auditService.getAuditEntries(TransactionSynchronizationManager.getCurrentTransactionName());
if(entries != null) {
for(AuditEntry entry : entries) {
//do some stuff....
LOG.info(entry.toString());
}
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
JPA EntityListener
@Configurable
public class AuditEntryListener {
@Autowired
private AuditService service;
@PreUpdate
public void preUpdate(Object entity) {
service.auditUpdate(TransactionSynchronizationManager.getCurrentTransactionName(), entity);
}
public void setService(AuditService service) {
this.service = service;
}
public AuditService …Run Code Online (Sandbox Code Playgroud) 在JIRA中设置问题估计时,您可以输入类似的字符串"1d 2h 30m",JIRA会将此(我假设)转换为相应的毫秒数.
是否有可用的Java库?
我正在使用Spring托管bean,它接受一个属性,指示应该清除目录的频率,并且我希望允许配置采用人类可读的字符串而不是明确的毫秒数.
或者,如果有一种我没想到的更好的方法,我很乐意听到它.
我正在开始一个使用JAXB和JPA注释的新项目.我饶有兴趣地阅读了讨论在单个类中混合使用JAXB和JPA注释的优缺点的帖子.
是否有任何准则描述何时使用字段级注释以及何时使用属性级别注释,或者通常选择一种方法而不是另一种方法的任何参数?我发现字段级注释更清晰,更易读; 它们通常位于班级的顶部,可以很容易地弄清楚每个字段在不同的上下文中的表示方式.除了关于可读性的这个论点之外,在决定注释的位置时还有其他需要考虑的事项吗?
我正在尝试将Android /res文件夹解压缩到一个单独的项目中,该项目作为apklib依赖项包含在我的主项目中.问题是虽然/res结果中包含了内容.apklib,但编译后的内容R.class却没有.更令人困惑的是,该mvn clean install命令生成.apklib以及.jar文件,并且jar文件具有R.class,但没有/res文件夹的内容.如何生成包含所有资源以及编译类的单个包(.jar或.apklib)?
的pom.xml
<packaging>apklib</packaging>
...
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<configuration>
<attachSources>true</attachSources>
<sdk>
<platform>12</platform>
</sdk>
</configuration>
<plugin>
Run Code Online (Sandbox Code Playgroud)
这会产生以下结果
.罐
./morseflash-resources.jar
com/.../R.class
Run Code Online (Sandbox Code Playgroud)
.apklib
./morseflash-resorces.apklib
META-INF
AndroidManifest.xml
res/
layout/
values/
Run Code Online (Sandbox Code Playgroud)
我想把所有这些内容放在一个文件中,我希望能够将它列为我主要Android项目中的依赖项.这是可能的,如果是的话,我怎么能实现它?
我最近在自定义 Android 版本中遇到了一个奇怪的问题?我已经有一个可用的 ROM 几个月了,使用这个 ROM 我已经能够将平台签名的 apk 安装到用户空间 (/data/app)。最近,在重建 ROM 后,我一直无法安装那些相同的 apk。任何安装平台签名应用程序的尝试(无论是通过 adb install 还是 pm install)都会产生以下消息:
Failure [INSTALL_FAILED_INVALID_INSTALL_LOCATION]
Run Code Online (Sandbox Code Playgroud)
通过Android源代码挖掘后,我发现了以下相关代码块:
if ((compareSignatures(pkg.mSignatures, s1) == PackageManager.SIGNATURE_MATCH)) {
Slog.w(TAG, "Cannot install platform packages to user storage");
mLastScanError = PackageManager.INSTALL_FAILED_INVALID_INSTALL_LOCATION;
return null;
}
Run Code Online (Sandbox Code Playgroud)
根据我的阅读,似乎永远不应该允许在用户空间中安装系统应用程序。最初在用户空间安装系统应用程序的情况是否异常?是否可以在用户空间中安装平台签名的应用程序,如果可以,如何安装?
java ×3
android ×2
apk ×2
jpa ×2
spring ×2
annotations ×1
jaxb ×1
maven ×1
string ×1
transactions ×1