问题描述
我一直在我的dropwizard项目中启用工作单元概念(如Spring Boot中的@Transaction)。我正在使用 dropwizard-guice (用于扩展程序和自定义安装程序的自动配置), guicey-jdbi (用于资源和方法级别的事务处理以及jdbi存储库的自动安装)。 guicey-jdbi 提供 @InTransaction 批注,用于在资源级别实现交易。
这些更改之后,我已经测试了我的API,并且@InTransaction运行正常。在为数据库池监视引入了 HikarCP 之后,用@InTransaction注释的资源在API调用上引发了错误(还附加了堆栈跟踪)。在我的本地系统(Macbook Pro)上不会发生此问题,但在Azure扩展坞中会发生此问题。我多次重启了微服务,然后问题自行解决(即使在重新启动几次后,API也失败了,在3-4次重启后,API自行解决了)。 我现在将分支推到master分支,而master分支也遇到了同样的问题。在解决问题时需要一些帮助。
堆栈跟踪:
java.lang.IllegalArgumentException: object is not an instance of declaring class
sun.reflect.NativeMethodAccessorImpl in invoke0
sun.reflect.NativeMethodAccessorImpl in invoke at line 62
sun.reflect.DelegatingMethodAccessorImpl in invoke at line 43
java.lang.reflect.Method in invoke at line 498
ru.vyarus.guicey.jdbi.installer.repository.RepositoryInstaller in lambda$bind$0 at line 59
ru.vyarus.guicey.jdbi.tx.aop.TransactionalInterceptor in lambda$invoke$0 at line 26
ru.vyarus.guicey.jdbi.tx.TransactionTemplate in inTransaction at line 52
ru.vyarus.guicey.jdbi.tx.aop.TransactionalInterceptor in invoke at line 24
com.playment.heimdall.managers.DBManager in signup at line 90
ru.vyarus.guicey.jdbi.tx.aop.TransactionalInterceptor in lambda$invoke$0 at line 26
ru.vyarus.guicey.jdbi.tx.TransactionTemplate in inTransaction at line 52
ru.vyarus.guicey.jdbi.tx.aop.TransactionalInterceptor in invoke at line 24
com.playment.heimdall.services.AccountService in createuser at line 149
com.playment.heimdall.resources.AccountResource in createuser at line 147
ru.vyarus.guicey.jdbi.tx.aop.TransactionalInterceptor in lambda$invoke$0 at line 26
ru.vyarus.guicey.jdbi.tx.TransactionTemplate in lambda$inTransaction$0 at line 61
org.skife.jdbi.v2.tweak.transactions.LocalTransactionHandler in inTransaction at line 183
org.skife.jdbi.v2.BasicHandle in inTransaction at line 338
ru.vyarus.guicey.jdbi.tx.TransactionTemplate in inTransaction at line 61
ru.vyarus.guicey.jdbi.tx.aop.TransactionalInterceptor in invoke at line 24
sun.reflect.NativeMethodAccessorImpl in invoke0
sun.reflect.NativeMethodAccessorImpl in invoke at line 62
sun.reflect.DelegatingMethodAccessorImpl in invoke at line 43
java.lang.reflect.Method in invoke at line 498
org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory in lambda$static$0 at line 52
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethoddispatcher$1 in run at line 124
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethoddispatcher in invoke at line 167
org.glassfish.jersey.server.model.internal.JavaResourceMethoddispatcherProvider$ResponSEOutInvoker in dodispatch at line 176
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethoddispatcher in dispatch at line 79
org.glassfish.jersey.server.model.ResourceMethodInvoker in invoke at line 469
org.glassfish.jersey.server.model.ResourceMethodInvoker in apply at line 391
org.glassfish.jersey.server.model.ResourceMethodInvoker in apply at line 80
org.glassfish.jersey.server.ServerRuntime$1 in run at line 253
org.glassfish.jersey.internal.Errors$1 in call at line 248
org.glassfish.jersey.internal.Errors$1 in call at line 244
org.glassfish.jersey.internal.Errors in process at line 292
org.glassfish.jersey.internal.Errors in process at line 274
org.glassfish.jersey.internal.Errors in process at line 244
org.glassfish.jersey.process.internal.RequestScope in runInScope at line 265
org.glassfish.jersey.server.ServerRuntime in process at line 232
org.glassfish.jersey.server.ApplicationHandler in handle at line 680
org.glassfish.jersey.servlet.WebComponent in serviceImpl at line 394
org.glassfish.jersey.servlet.WebComponent in service at line 346
org.glassfish.jersey.servlet.ServletContainer in service at line 366
org.glassfish.jersey.servlet.ServletContainer in service at line 319
org.glassfish.jersey.servlet.ServletContainer in service at line 205
io.dropwizard.jetty.NonblockingServletHolder in handle at line 50
org.eclipse.jetty.servlet.ServletHandler$CachedChain in doFilter at line 1651
io.dropwizard.servlets.ThreadNameFilter in doFilter at line 35
org.eclipse.jetty.servlet.ServletHandler$CachedChain in doFilter at line 1638
io.dropwizard.jersey.filter.AllowedMethodsFilter in handle at line 47
io.dropwizard.jersey.filter.AllowedMethodsFilter in doFilter at line 41
org.eclipse.jetty.servlet.ServletHandler$CachedChain in doFilter at line 1638
com.google.inject.servlet.FilterChainInvocation in doFilter at line 89
com.google.inject.servlet.ManagedFilterPipeline in dispatch at line 121
com.google.inject.servlet.GuiceFilter in doFilter at line 133
org.eclipse.jetty.servlet.ServletHandler$CachedChain in doFilter at line 1638
org.eclipse.jetty.servlet.ServletHandler in doHandle at line 567
org.eclipse.jetty.server.handler.ScopedHandler in nextHandle at line 233
org.eclipse.jetty.server.handler.ContextHandler in doHandle at line 1377
org.eclipse.jetty.server.handler.ScopedHandler in nextScope at line 188
org.eclipse.jetty.servlet.ServletHandler in doScope at line 507
org.eclipse.jetty.server.handler.ScopedHandler in nextScope at line 186
org.eclipse.jetty.server.handler.ContextHandler in doScope at line 1292
org.eclipse.jetty.server.handler.ScopedHandler in handle at line 141
org.eclipse.jetty.server.handler.HandlerWrapper in handle at line 127
com.codahale.metrics.jetty9.InstrumentedHandler in handle at line 249
io.dropwizard.jetty.RoutingHandler in handle at line 52
org.eclipse.jetty.server.handler.gzip.GzipHandler in handle at line 717
org.eclipse.jetty.server.handler.RequestLogHandler in handle at line 54
org.eclipse.jetty.server.handler.StatisticsHandler in handle at line 173
org.eclipse.jetty.server.handler.HandlerWrapper in handle at line 127
org.eclipse.jetty.server.Server in handle at line 501
org.eclipse.jetty.server.HttpChannel in lambda$handle$1 at line 383
org.eclipse.jetty.server.HttpChannel in dispatch at line 556
org.eclipse.jetty.server.HttpChannel in handle at line 375
org.eclipse.jetty.server.httpconnection in onFillable at line 273
org.eclipse.jetty.io.AbstractConnection$ReadCallback in succeeded at line 311
org.eclipse.jetty.io.FillInterest in fillable at line 105
org.eclipse.jetty.io.ChannelEndPoint$1 in run at line 104
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill in runTask at line 336
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill in doProduce at line 313
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill in tryProduce at line 171
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill in run at line 129
org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread in run at line 375
org.eclipse.jetty.util.thread.QueuedThreadPool in runJob at line 806
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner in run at line 938
java.lang.Thread in run at line 748
相关代码
java.lang.IllegalArgumentException: object is not an instance of declaring class
sun.reflect.NativeMethodAccessorImpl in invoke0
sun.reflect.NativeMethodAccessorImpl in invoke at line 62
sun.reflect.DelegatingMethodAccessorImpl in invoke at line 43
java.lang.reflect.Method in invoke at line 498
ru.vyarus.guicey.jdbi.installer.repository.RepositoryInstaller in lambda$bind$0 at line 59
ru.vyarus.guicey.jdbi.tx.aop.TransactionalInterceptor in lambda$invoke$0 at line 26
ru.vyarus.guicey.jdbi.tx.TransactionTemplate in inTransaction at line 52
ru.vyarus.guicey.jdbi.tx.aop.TransactionalInterceptor in invoke at line 24
com.playment.heimdall.managers.DBManager in signup at line 90
ru.vyarus.guicey.jdbi.tx.aop.TransactionalInterceptor in lambda$invoke$0 at line 26
ru.vyarus.guicey.jdbi.tx.TransactionTemplate in inTransaction at line 52
ru.vyarus.guicey.jdbi.tx.aop.TransactionalInterceptor in invoke at line 24
com.playment.heimdall.services.AccountService in createuser at line 149
com.playment.heimdall.resources.AccountResource in createuser at line 147
ru.vyarus.guicey.jdbi.tx.aop.TransactionalInterceptor in lambda$invoke$0 at line 26
ru.vyarus.guicey.jdbi.tx.TransactionTemplate in lambda$inTransaction$0 at line 61
org.skife.jdbi.v2.tweak.transactions.LocalTransactionHandler in inTransaction at line 183
org.skife.jdbi.v2.BasicHandle in inTransaction at line 338
ru.vyarus.guicey.jdbi.tx.TransactionTemplate in inTransaction at line 61
ru.vyarus.guicey.jdbi.tx.aop.TransactionalInterceptor in invoke at line 24
sun.reflect.NativeMethodAccessorImpl in invoke0
sun.reflect.NativeMethodAccessorImpl in invoke at line 62
sun.reflect.DelegatingMethodAccessorImpl in invoke at line 43
java.lang.reflect.Method in invoke at line 498
org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory in lambda$static$0 at line 52
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethoddispatcher$1 in run at line 124
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethoddispatcher in invoke at line 167
org.glassfish.jersey.server.model.internal.JavaResourceMethoddispatcherProvider$ResponSEOutInvoker in dodispatch at line 176
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethoddispatcher in dispatch at line 79
org.glassfish.jersey.server.model.ResourceMethodInvoker in invoke at line 469
org.glassfish.jersey.server.model.ResourceMethodInvoker in apply at line 391
org.glassfish.jersey.server.model.ResourceMethodInvoker in apply at line 80
org.glassfish.jersey.server.ServerRuntime$1 in run at line 253
org.glassfish.jersey.internal.Errors$1 in call at line 248
org.glassfish.jersey.internal.Errors$1 in call at line 244
org.glassfish.jersey.internal.Errors in process at line 292
org.glassfish.jersey.internal.Errors in process at line 274
org.glassfish.jersey.internal.Errors in process at line 244
org.glassfish.jersey.process.internal.RequestScope in runInScope at line 265
org.glassfish.jersey.server.ServerRuntime in process at line 232
org.glassfish.jersey.server.ApplicationHandler in handle at line 680
org.glassfish.jersey.servlet.WebComponent in serviceImpl at line 394
org.glassfish.jersey.servlet.WebComponent in service at line 346
org.glassfish.jersey.servlet.ServletContainer in service at line 366
org.glassfish.jersey.servlet.ServletContainer in service at line 319
org.glassfish.jersey.servlet.ServletContainer in service at line 205
io.dropwizard.jetty.NonblockingServletHolder in handle at line 50
org.eclipse.jetty.servlet.ServletHandler$CachedChain in doFilter at line 1651
io.dropwizard.servlets.ThreadNameFilter in doFilter at line 35
org.eclipse.jetty.servlet.ServletHandler$CachedChain in doFilter at line 1638
io.dropwizard.jersey.filter.AllowedMethodsFilter in handle at line 47
io.dropwizard.jersey.filter.AllowedMethodsFilter in doFilter at line 41
org.eclipse.jetty.servlet.ServletHandler$CachedChain in doFilter at line 1638
com.google.inject.servlet.FilterChainInvocation in doFilter at line 89
com.google.inject.servlet.ManagedFilterPipeline in dispatch at line 121
com.google.inject.servlet.GuiceFilter in doFilter at line 133
org.eclipse.jetty.servlet.ServletHandler$CachedChain in doFilter at line 1638
org.eclipse.jetty.servlet.ServletHandler in doHandle at line 567
org.eclipse.jetty.server.handler.ScopedHandler in nextHandle at line 233
org.eclipse.jetty.server.handler.ContextHandler in doHandle at line 1377
org.eclipse.jetty.server.handler.ScopedHandler in nextScope at line 188
org.eclipse.jetty.servlet.ServletHandler in doScope at line 507
org.eclipse.jetty.server.handler.ScopedHandler in nextScope at line 186
org.eclipse.jetty.server.handler.ContextHandler in doScope at line 1292
org.eclipse.jetty.server.handler.ScopedHandler in handle at line 141
org.eclipse.jetty.server.handler.HandlerWrapper in handle at line 127
com.codahale.metrics.jetty9.InstrumentedHandler in handle at line 249
io.dropwizard.jetty.RoutingHandler in handle at line 52
org.eclipse.jetty.server.handler.gzip.GzipHandler in handle at line 717
org.eclipse.jetty.server.handler.RequestLogHandler in handle at line 54
org.eclipse.jetty.server.handler.StatisticsHandler in handle at line 173
org.eclipse.jetty.server.handler.HandlerWrapper in handle at line 127
org.eclipse.jetty.server.Server in handle at line 501
org.eclipse.jetty.server.HttpChannel in lambda$handle$1 at line 383
org.eclipse.jetty.server.HttpChannel in dispatch at line 556
org.eclipse.jetty.server.HttpChannel in handle at line 375
org.eclipse.jetty.server.httpconnection in onFillable at line 273
org.eclipse.jetty.io.AbstractConnection$ReadCallback in succeeded at line 311
org.eclipse.jetty.io.FillInterest in fillable at line 105
org.eclipse.jetty.io.ChannelEndPoint$1 in run at line 104
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill in runTask at line 336
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill in doProduce at line 313
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill in tryProduce at line 171
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill in run at line 129
org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread in run at line 375
org.eclipse.jetty.util.thread.QueuedThreadPool in runJob at line 806
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner in run at line 938
java.lang.Thread in run at line 748
public class AccountResource {
@Inject
private AccountService accountService;
@POST
@Timed
@Path("/createuser/v1")
@ApiOperation(value = "Test API")
@InTransaction
public Response createuser(@ApiParam createuserRequest request) {
request.validateRequest();
SigninResponse signinResponse = accountService.createuser(request);
BaseResponse baseResponse = ResponseProcessor.processSuccessfulRequest(signinResponse);
return Response.status(Response.Status.OK).entity(baseResponse).build();
}
}
public class AccountResource {
@Inject
private AccountService accountService;
@POST
@Timed
@Path("/createuser/v1")
@ApiOperation(value = "Test API")
@InTransaction
public Response createuser(@ApiParam createuserRequest request) {
request.validateRequest();
SigninResponse signinResponse = accountService.createuser(request);
BaseResponse baseResponse = ResponseProcessor.processSuccessfulRequest(signinResponse);
return Response.status(Response.Status.OK).entity(baseResponse).build();
}
}
public class AccountService {
@Inject
private DBManager dbManager;
@Inject
private DBObjectFactory dbObjectFactory;
public SigninResponse createuser(createuserRequest createuserRequest) {
User user = dbManager.fetchUser(createuserRequest.getEmail());
UsersDo userDo = dbObjectFactory.createuser(createuserRequest);
List<UserRoleAssociatorsDo> rolesDo = dbObjectFactory.createuserRoleAssociatorsDo(userDo.getId(),createuserRequest.getRoles());
EmailsDo emailsDo = dbObjectFactory.createEmailsDo(userDo.getId(),createuserRequest);
dbManager.signup(userDo,rolesDo,emailsDo);
return SigninResponse.builder().userId(userDo.getId()).roles(createuserRequest.getRoles()).state(userDo.getState()).build();
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)