原始问题的概要:使用带有AOP代理的标准Spring事务,不可能从同一类中的非@Transactional-marked方法调用@ Transactional-marked方法并且在事务内(特别是由于前面提到的)代理).据说在AspectJ模式下使用Spring Transactions可以实现这一点,但它是如何完成的?
编辑:使用加载时编织的AspectJ模式中Spring事务的完整纲要:
将以下内容添加到META-INF/spring/applicationContext.xml:
<tx:annotation-driven mode="aspectj" />
<context:load-time-weaver />
Run Code Online (Sandbox Code Playgroud)
(我假设您已经在应用程序上下文中设置了一个AnnotationSessionFactoryBean和一个HibernateTransactionManager设置.您可以将标签添加transaction-manager="transactionManager"为属性<tx:annotation-driven />,但如果事务管理器bean的id属性值实际上是" transactionManager",则它是多余的,因为" transactionManager"是该属性的默认值.)
添加META-INF/aop.xml.内容如下:
<aspectj>
<aspects>
<aspect name="org.springframework.transaction.aspectj.AnnotationTransactionAspect" />
</aspects>
<weaver>
<include within="my.package..*" /><!--Whatever your package space is.-->
</weaver>
</aspectj>
Run Code Online (Sandbox Code Playgroud)
添加aspectjweaver-1.7.0.jar和spring-aspects-3.1.2.RELEASE.jar你的classpath.我使用Maven作为我的构建工具,所以这里是<dependency />项目POM.xml文件的声明:
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
spring-instrument-3.1.2.RELEASE.jar不需要作为<dependency />你的classpath,但你仍然需要它在 …
我需要检查方法第一个参数的类型是否List<Class<? extends Exception>>.任何人都可以提出比将其与String相比更好的解决方案吗?
Method m = Foo.class.getMethod("m1", List.class);
if (m.getGenericParameterTypes()[0].toString().equals("java.util.List<java.lang.Class<? extends java.lang.Exception>>")) {
...
}
Run Code Online (Sandbox Code Playgroud)
我的意思是这样的:
List.class.isAssignableFrom((Class<?>)((ParameterizedType)m.getGenericParameterTypes()[0]).getRawType()));
Run Code Online (Sandbox Code Playgroud)
这检查它是否是一个列表.但我如何检查Class<? extends Exception>该类型的部分?
我在文件中有一些CSV /表格数据,如下所示:
1,7,3,2
8,3,8,0
4,9,5,3
8,5,7,3
5,6,1,9
Run Code Online (Sandbox Code Playgroud)
(它们并不总是数字,只是随机逗号分隔的值.但是,例如,单位数字更容易.)
我想随机抽取40%的任何一列.举个例子,说第3个.所以也许3和1相互交换.现在第三列是:
1 << Came from the last position
8
5
7
3 << Came from the first position
Run Code Online (Sandbox Code Playgroud)
我正在尝试在bash我正在处理的脚本中的文件中执行此操作,并且我没有太多运气.我一直在徘徊一些非常疯狂和没有结果的grep兔子洞让我觉得我走错路(不断失败就是让我失望).
我用一连串的东西标记了这个问题,因为我不完全确定我应该使用哪种工具.
编辑:我可能最终会接受鲁本斯的答案,不过它很古怪,因为它直接包含交换概念(我想我原本可以在原问题中强调过),它允许我指定一个百分比用于交换的列.它也恰好工作,这总是一个加号.
对于那些不需要这个,只想要一个基本的洗牌的人,Jim Garrison的答案也有效(我测试了它).
但是,关于鲁本斯解决方案的警告.我拿了这个:
for (i = 1; i <= NF; ++i) {
delim = (i != NF) ? "," : "";
...
}
printf "\n";
Run Code Online (Sandbox Code Playgroud)
删除printf "\n";并移动换行符如下:
for (i = 1; i <= NF; ++i) {
delim = (i != NF) ? "," : …Run Code Online (Sandbox Code Playgroud) 我实现了一个Hibernate事件监听器,如下所示:
public class AuditListener implements PostInsertEventListener {
private static final long serialVersionUID = -966368101369878522L;
@Override
public void onPostInsert(PostInsertEvent event) {
if (event.getEntity() instanceof Auditable) {
StatelessSession session = null;
try {
session = event.getPersister().getFactory().openStatelessSession();
Auditable auditableEntity = (Auditable)event.getEntity();
session.beginTransaction();
session.insert(new AuditTrail(auditableEntity.getClass().getSimpleName(),
auditableEntity.getId(), auditableEntity.getStatus(),
auditableEntity.getLastModified()));
session.getTransaction().commit();
} catch (HibernateException he) {
System.out.println("Horrible error: " + he.getMessage());
session.getTransaction().rollback();
} finally {
if (session != null) {
session.close();
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
它只是AuditTrail在插入任何Auditable对象后立即将对象插入数据库.
我遇到的问题是在事务期间存在任何异常情况时持续存在Auditable对象:事务被回滚,但我仍然会AuditTrail插入一条记录. …
我有一个Java应用程序,它以SchedulerFactoryBean为幌子使用Quartz Scheduler。该main()方法获取应用程序上下文,检索根bean,并开始调度作业。
问题是调度程序在其自己的线程中运行,因此当主线程完成提交作业后,它将返回并且调度程序在没有它的情况下继续运行。当调度程序最终完成时(或即使您明确调用shutdown()它),该应用程序将永久挂在那里。
我有两种解决方案:
triggerFinalized(),并成立了while环带Thread.sleep()里面不停地检查,看是否计数已达到0。当它,它会返回最多的main()方法和应用程序将正常退出。jobAdded()都会减少triggerFinalized()。当计数达到0时,请调用shutdown()Scheduler(或者,实际上没有关系),然后调用System.exit(0)。我已经依次分别实现了这两个功能,所以我知道它们都可以正常运行。问题在于它们都很糟糕。while轮询值的无限循环?System.exit(0)?布莱尔
有人有更好的方法吗?还是这些是我这里唯一的选择?
编辑:在回家的路上考虑这一点时,我得出的结论是,这可能是由于我正在使用SchedulerFactoryBean。当Spring初始化应用程序上下文时,它将自动启动-似乎将其置于主线程范围之外。如果我使用了手动初始化并start()在代码中调用过的稍有不同的Scheduler,是否可以在主线程中运行Scheduler,从而阻塞它,直到Scheduler完成运行所有作业?还是我还有这个问题?
编辑:儿子... http://quartz-scheduler.org/documentation/quartz-2.x/examples/Example1
为了使程序有机会运行该作业,我们睡了90秒钟。调度程序在后台运行,并且应该在这90秒钟内启动该作业。
显然,这是行不通的,因为调度程序似乎总是在后台运行。
我需要检查一个参数是否有一个值,如果它有,那么这行,否则做这一行.
我已经有了它的工作,而我没有得到错误,但它没有采取正确的分支
错误的分支在volunteer_role模板中
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="volunteers-by-region" match="volunteer" use="region" />
<xsl:template name="hoo" match="/">
<html>
<head>
<title>Registered Volunteers</title>
<link rel="stylesheet" type="text/css" href="volunteer.css" />
</head>
<body>
<h1>Registered Volunteers</h1>
<h3>Ordered by the username ascending</h3>
<xsl:for-each select="folktask/member[user/account/userlevel='2']">
<xsl:for-each select="volunteer[count(. | key('volunteers-by-region', region)[1]) = 1]">
<xsl:sort select="region" />
<xsl:for-each select="key('volunteers-by-region', region)">
<xsl:sort select="folktask/member/user/personal/name" />
<div class="userdiv">
<xsl:call-template name="volunteer_volid">
<xsl:with-param name="volid" select="../volunteer/@id" />
</xsl:call-template>
<xsl:call-template name="volunteer_role">
<xsl:with-param name="volrole" select="../volunteer/roles" />
</xsl:call-template>
<xsl:call-template name="volunteer_region">
<xsl:with-param name="volloc" select="../volunteer/region" />
</xsl:call-template>
</div>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each> …Run Code Online (Sandbox Code Playgroud) 大部分继续从这个问题:XSLT:CSV(或平面文件,或纯文本)到XML
所以,我从这里有一个XSLT:http://andrewjwelch.com/code/xslt/csv/csv-to-xml_v2.html
它将CSV文件转换为XML文档.当在命令行上使用以下命令时,它会执行此操作:
java -jar saxon9he.jar -xsl:csv-to-xml.csv -it:main -o:output.xml
所以现在问题变成了:我如何在Java代码中执行此操作?
现在我的代码看起来像这样:
TransformerFactory transformerFactory = TransformerFactory.newInstance();
StreamSource xsltSource = new StreamSource(new File("location/of/csv-to-xml.xsl"));
Transformer transformer = transformerFactory.newTransformer(xsltSource);
StringWriter stringWriter = new StringWriter();
transformer.transform(documentSource, new StreamResult(stringWriter));
String transformedDocument = stringWriter.toString().trim();
Run Code Online (Sandbox Code Playgroud)
(这Transformer是一个实例net.sf.saxon.Controller.)
命令行上的技巧是指定"-it:main"指向XSLT中的命名模板.这意味着您不必为源文件提供"-s"标志.
问题再次出现在Java方面.我在哪里/如何指定"-it:main"?不这样做会打破其他不需要指定的XSLT吗?我是否必须在每个XSLT文件中命名每个模板"main?" 鉴于Transformer.transform()的方法签名,我必须指定源文件,那么这不能打败我在搞清楚这个问题时所取得的所有进展吗?
编辑:我发现s9api隐藏在saxon9he.jar中,如果有人正在寻找它.
我想创建一些简单的标签.
我有3 div秒不同的内容,我通过在后两个divs 上设置减去上边距来将它们放在彼此的顶部.
然后我有3个选项卡,我已经设置了我的代码,以便在您单击时#tab1 .fadein content1.
例:
$(document).ready(function() {
$(".content-kidsclub").hide();
$("#tab1").click(function() {
$(".content-kidsclub").fadeTo("slow", 1.0);
});
});
$(document).ready(function() {
$(".content-computersuite").hide();
$("#tab2").click(function() {
$(".content-computersuite").fadeTo("slow", 1.0);
});
});
$(document).ready(function() {
$(".content-education-assistance").hide();
$("#tab3").click(function() {
$(".content-education-assistance").fadeTo("slow", 1.0);
});
});
Run Code Online (Sandbox Code Playgroud)
我第一次点击每一个它运作良好.但之后就停止了.而且:如果你先点击tab2,它会因为减去边距而在上面.不知道为什么.
到目前为止我感觉如此接近.我怀疑它与回调有关.
我对jQuery很新,所以这似乎有点愚蠢我想做什么.
总的来说,有没有人知道更好的方法来将divs置于彼此之上然后让标签工作.这与使用display:block和所有类似的东西有关.
我目前有一个imageView,我可以使用panGestureRecognizer和以下方法在屏幕上拖动:
- (void)panDetected:(UIPanGestureRecognizer *)panRecognizer {
CGPoint translation = [panRecognizer translationInView:self.view];
CGPoint imageViewPosition = self.imageView.center;
imageViewPosition.x += translation.x;
imageViewPosition.y += translation.y;
self.imageView.center = imageViewPosition;
[panRecognizer setTranslation:CGPointZero inView:self.view];
}
Run Code Online (Sandbox Code Playgroud)
目前可以将图像拖离屏幕,使其仅部分可见,我想知道是否有办法在屏幕边缘停止图像?我知道它应该是可能的,我只是在挣扎于逻辑.