所以我正在使用Spring Security处理这个Spring MVC应用程序.在我的控制器花费太长时间响应的某些情况下,我一直遇到性能问题.这是由于一种处理方法,可以根据一些用户输入处理大量数据.
现在我和我的团队一直在调整代码和处理方法,我不认为我们可以在没有切片并异步执行每个切片的情况下获得更好的性能.
问题是当我尝试将它分割并将工作分发给子线程时,使用来自java.util.concurrent的线程池,当执行这些时,我得到有关安全上下文的错误消息.
这是stacktrace的摘录:
Exception in thread "pool-1-thread-3" org.springframework.security.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext
at org.springframework.security.intercept.AbstractSecurityInterceptor.credentialsNotFound(AbstractSecurityInterceptor.java:342)
at org.springframework.security.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:254)
at org.springframework.security.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:63)
Exception in thread "pool-1-thread-4" at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy63.batchSaveCampaignpayment(Unknown Source)
at com.fim.pnp.controller.PaymentForm$1.run(PaymentForm.java:224)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)
org.springframework.security.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext
at org.springframework.security.intercept.AbstractSecurityInterceptor.credentialsNotFound(AbstractSecurityInterceptor.java:342)
at org.springframework.security.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:254)
at org.springframework.security.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:63)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy63.batchSaveCampaignPayment(Unknown Source)
at com.fim.pnp.controller.PaymentForm$1.run(PaymentForm.java:224)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650) …Run Code Online (Sandbox Code Playgroud) 我正试图在JUnit和EasyMock中设置测试,我遇到了一个小问题,我似乎无法解决这个问题.我希望有人可以提供帮助.
这是我正在尝试测试的方法的简化版本:
public void myMethod() {
//(...)
Obj myObj = this.service.getObj(param);
if (myObj.getExtId() != null) {
OtherObj otherObj = new OtherObj();
otherObj.setId(myObj.getExtId());
this.dao.insert(otherObj);
}
//(...)
}
Run Code Online (Sandbox Code Playgroud)
好的,所以使用EasyMock我已经嘲笑了这个service.getObj(myObj)电话,并且工作正常.
我的问题出现在JUnit遇到dao.insert(otherObj)调用时.EasyMock抛出了*Unexpected Method Call*它.
我不介意在我的测试中嘲笑那个dao并使用expectLastCall().once();它,但是假设我在"otherObj"上有一个句柄,它在插入时作为参数传递...当然我没有,因为它是有条件的在被测试方法的上下文中创建.
任何人都曾经不得不处理这个并以某种方式解决了它?
谢谢.
在Java中,我需要确保一个字符串只包含alphanumeric,space和dash字符.
我找到了班级org.apache.commons.lang.StringUtils和几乎足够的方法isAlphanumericSpace(String)......但我还需要包括破折号.
做这个的最好方式是什么?我不想使用正则表达式.
我刚刚做了几年的Java,现在我回到了C#世界.除了一件事,我真的很高兴回到Visual Studio.
Eclipse快捷方式:ALTSHIFTL真的在我身上发展,当光标在方法上时,我无法在Visual Studio中找到等效的提取本地.
有人知道Visual Studio中的等价物吗?
我目前正在尝试在MongoDb中存储会话.
我尝试过express-session-mongo和connect-mongodb,当我尝试加载登录页面时,两者都给了我相同的"500内部服务器错误".这让我想到可能在某处与mongoose-auth发生冲突.
无论如何这里是我的设置:
app.js:
var MongoStore = require('connect-mongodb');
var MongoDb = require('mongodb').Db;
var Server = require('mongodb').Server;
var db = new MongoDb('myDb', new Server('localhost', 27017, {auto_reconnect: true, native_parser: false}));
app.configure(function() {
app.use(express.logger({format: 'dev'}));
app.set('views', __dirname + '/../views');
app.set('view engine', 'jade');
app.set('view options', { layout: false });
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(mongooseAuth.middleware());
app.use(require('./mysite').middleware());
app.use(express.methodOverride());
});
app.configure('production', function(){
var oneWeek = 657450000;
app.use(express.static(__dirname + '/../public', { maxAge: oneWeek }));
app.use(express.session({ store: new MongoStore({db: db}), secret: 'super secret' }));
app.use(express.errorHandler());
});
// Routes
require('./routing.js');
mongooseAuth.helpExpress(app);
app.listen(3000); …Run Code Online (Sandbox Code Playgroud) 我试图做一些显然在JPQL中不起作用的东西:
JPQL:
select c from Car c
left join fetch c.owner
where c.type in (?1)
order by c.model
Run Code Online (Sandbox Code Playgroud)
码:
public List<Car> findCarsFilterByTypes(CarType[] types) {
return (List<Car>) this.entityManager.createNamedQuery("dealership.findCarsFilterByTypes")
.setParameter(1, types).getResultList();
}
Run Code Online (Sandbox Code Playgroud)
我希望使用数组的简单方法可以工作......但显然不是......我得到了一个无用的例外.
任何人都知道我需要如何获得某些汽车类型列表中的所有汽车?
我刚刚跳过其他人写的一个看起来效率不高的功能,但是我对JPA的了解并不是很好找到一个不是Hibernate特定的可移植解决方案.
简而言之,在一个循环内调用的Dao方法插入每个新实体都会执行"entityManager.merge(object);".
是不是在JPA规范中定义了一种方法来将实体列表传递给Dao方法并执行批量/批量插入而不是为每个对象调用merge?
此外,由于Dao方法带有"@Transactional"注释,我想知道每个合并调用是否在自己的事务中发生......这对性能没有帮助.
任何的想法?
我正在尝试按月使用HQL对某些行进行分组,但我对该API并不熟悉,似乎无法使其工作.
这是我的代码:
Criteria query = getHibernateSession().createCriteria(SalesPerformance.class);
// summary report is grouped by date
query.setProjection(Projections.projectionList().add(
Projections.groupProperty("effectiveDate"), "effectiveDate").add(
Projections.groupProperty("primaryKey.seller", "seller").add(
Projections.sum("totalSales"))));
// sub-select based on seller id
query.add(Property.forName("primaryKey.seller.id").eq(sellerId)).setFetchMode(
"primaryKey.seller", FetchMode.SELECT);
query.add(Property.forName("primaryKey.effectiveDate").le(new Date()));
query.add(Property.forName("primaryKey.effectiveDate").ge(DateUtils.truncate(new Date(), Calendar.MONTH)));
query.addOrder(Order.desc("primaryKey.effectiveDate"));
return query.list();
Run Code Online (Sandbox Code Playgroud)
我对这个查询的问题是,由于Projections.groupProperty("effectiveDate"),当我每个月需要一行时,它每天会返回一行.
我想过使用Projections.sqlGroupProjection而不是Projections.groupProperty并抛出一些HQL,但是我发现的文档和几个例子并没有真正帮助我理解如何在该方法中使用正确的postresql语句.
任何了解Postgres和HQL的人都可以在这里给出一些提示吗?
我此时已经阅读了很多帖子和博客,我仍然不确定如何正确地集群我的2个RabbitMQ节点.
我已经阅读了RabbitMQ集群指南:http://www.rabbitmq.com/clustering.html
我在API指南中发现了一个神秘的ClusterId,没有解释如何首先获得该ID:http://www.rabbitmq.com/releases/rabbitmq-dotnet-client/v2.4.1/rabbitmq- DOTNET -客户端2.4.1-API指南.pdf
在StackOverflow帖子中了解到,基本上我需要让我的客户了解集群中的每个节点以及故障转移场景的代码:rabbitmq HA集群
现在......如果可能的话,我希望拥有的行为更加透明.我可能会在客户端上使用"ClusterId"来使消费者群集知晓,然后希望库知道随机连接到任一节点以获取消息.
当然,我知道一条消息一次只能在一台服务器上,所以我希望DotNet客户端库中的一些循环魔法能够处理故障转移情况.
我希望从发布者的角度来看,交换机将循环分发消息到集群中的各个节点.交换还可以识别群集并优雅地处理故障转移情况.
现在根据我的读数,它不是那样的工作......除非我错过了什么.如果我的知识是最新的,我必须编写所有集群感知业务的代码,那么......为什么RabbitMQ首先具有集群功能?怎么用?
有没有办法在没有编码那么多的情况下从RabbitMQ中获得这种行为?
谢谢
我想我已经老了,当我构建一个项目时,我仍然想到编写一个数据库层,包括使用像datareaders和数据集这样的对象...但在我看来,微软必须提出更好的工具,因为我上次在2.0中的项目,可以隐藏所有的工作,并使开发人员专注于编写逻辑,或者至少减少管道代码.
3.5怎么做?
谢谢,Yann
我正在使用BeanUtils.copyProperties将一个对象的整个内容复制到另一个继承自它的对象中.
下面是上下文,从中复制值的域对象包含一组自定义类型为Xref的对象.该自定义类型具有嵌入式类,其具有各种类类型的各种字段.
由于某种原因,封装在嵌入对象中的对象中的一个字段不会被复制.但是我需要的大多数其他东西都被复制了.
举个例子:
class Source {
private Set<Xref> xref;
...
}
class Xref {
...
public static class primaryKey {
...
private MyObj obj;
}
}
class MyObj {
private Integer id;
...
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用BeanUtils.copyProperties将"Source"对象的内容复制到"SourceExtended"对象中,则使用这些名称source.xrefs.get(0).getPrimaryKey().getObj().getId()的值不会被复制.在原始对象中它有一个值,但在目标对象中它是null ...
知道为什么???
谢谢.
我正在尝试构建一个足够聪明的报告,根据某种输入参数略微修改其sql查询.
例如,如果该特殊修改参数值为"1",则会在select中添加一个字段,并将group by子句添加到查询中.
我查看了java表达式,但jrxml的queryString标记似乎不支持它们.还尝试创建一个包含java表达式的变量,并在queryString标记中使用该变量...这也不起作用!
现在我想可能有一个存储过程与所有逻辑,只是让jrxml使用修改输入参数调用该存储过程,但我正在处理的项目似乎没有很多存储proc,所以在我走这条路之前,我想看看是否还有其他解决方案.
谢谢你的帮助.
谢谢你们的帮助,非常感谢你们.然而,我找到了另一种方法,并将其发布以供参考:这里
java ×4
.net ×2
jpa ×2
.net-3.5 ×1
bulk ×1
call ×1
contains ×1
dynamic ×1
easymock ×1
eclipse ×1
everyauth ×1
express ×1
group-by ×1
hibernate ×1
ide ×1
insert ×1
jpql ×1
junit ×1
linq ×1
linq-to-sql ×1
methods ×1
mongodb ×1
node.js ×1
orm ×1
parsing ×1
postgresql ×1
query-string ×1
rabbitmq ×1
report ×1
session ×1
string ×1