@Override public T build() { return builder == null ? delegate : builder.build(); }
@Override public void adviseAllMethods(org.apache.tapestry5.plastic.MethodAdvice advice) { getBuilder().adviseAllMethods(advice); }
@Override public void adviseMethod(Method method, org.apache.tapestry5.plastic.MethodAdvice advice) { getBuilder().adviseMethod(method, advice); }
@Decorate(serviceInterface = AnnotatedServiceInterface.class) public static AnnotatedServiceInterface decorateAnnotated(AnnotatedServiceInterface delegate, AspectDecorator aspectDecorator) { final AspectInterceptorBuilder<AnnotatedServiceInterface> builder = aspectDecorator .createBuilder(AnnotatedServiceInterface.class, delegate, "!"); builder.adviseAllMethods(new TestAdvice()); return builder.build(); }
@Decorate(serviceInterface = NonAnnotatedServiceInterface.class) public static NonAnnotatedServiceInterface decorateNonAnnotated( NonAnnotatedServiceInterface delegate, AspectDecorator aspectDecorator) { final AspectInterceptorBuilder<NonAnnotatedServiceInterface> builder = aspectDecorator .createBuilder(NonAnnotatedServiceInterface.class, delegate, "!"); builder.adviseAllMethods(new TestAdvice()); return builder.build(); }
@Override public T build() { return builder == null ? delegate : builder.build(); }
private static <T> T doDecorate(final String decoratorId, ServiceResources resources, T delegate, AspectDecorator aspectDecorator) { Class<T> serviceInterface = resources.getServiceInterface(); AspectInterceptorBuilder<T> builder = aspectDecorator.createBuilder(serviceInterface, delegate, String.format( "<Interceptor for %s(%s)>", resources.getServiceId(), serviceInterface.getName())); builder.adviseAllMethods(new MethodAdvice() { @Override public void advise(MethodInvocation invocation) { invocation.proceed(); Object result = invocation.getReturnValue(); invocation.setReturnValue(String.format("Decorated by %s[%s]", decoratorId, result)); } }); return builder.build(); }
@Override public void adviseAllMethods(org.apache.tapestry5.plastic.MethodAdvice advice) { getBuilder().adviseAllMethods(advice); }
@Override public void adviseMethod(Method method, org.apache.tapestry5.plastic.MethodAdvice advice) { getBuilder().adviseMethod(method, advice); }
@Override public <T> T build(Class<T> serviceInterface, T delegate, String serviceId, final Logger logger) { AspectInterceptorBuilder<T> builder = aspectDecorator.createBuilder(serviceInterface, delegate, String.format( "<Logging interceptor for %s(%s)>", serviceId, serviceInterface.getName())); advisor.addLoggingAdvice(logger, builder); return builder.build(); }
private static <T> T doDecorate(final String decoratorId, ServiceResources resources, T delegate, AspectDecorator aspectDecorator) { Class<T> serviceInterface = resources.getServiceInterface(); AspectInterceptorBuilder<T> builder = aspectDecorator.createBuilder(serviceInterface, delegate, String.format( "<Interceptor for %s(%s)>", resources.getServiceId(), serviceInterface.getName())); builder.adviseAllMethods(new MethodAdvice() { @Override public void advise(MethodInvocation invocation) { invocation.proceed(); Object result = invocation.getReturnValue(); invocation.setReturnValue(String.format("Decorated by %s[%s]", decoratorId, result)); } }); return builder.build(); }
@Override public <T> T build(Class<T> serviceInterface, T delegate, String serviceId, final Logger logger) { AspectInterceptorBuilder<T> builder = aspectDecorator.createBuilder(serviceInterface, delegate, String.format( "<Logging interceptor for %s(%s)>", serviceId, serviceInterface.getName())); advisor.addLoggingAdvice(logger, builder); return builder.build(); }
@Override public <T> T build(Class<T> serviceInterface, T delegate, String serviceId) { assert serviceInterface != null; assert delegate != null; assert InternalUtils.isNonBlank(serviceId); String description = String.format("<Hibernate Transaction interceptor for %s(%s)>", serviceId, serviceInterface.getName()); AspectInterceptorBuilder<T> builder = aspectDecorator.createBuilder(serviceInterface, delegate, description); advisor.addTransactionCommitAdvice(builder); return builder.build(); } }
@Override public <T> T build(Class<T> serviceInterface, T delegate, String serviceId) { assert serviceInterface != null; assert delegate != null; assert InternalUtils.isNonBlank(serviceId); String description = String.format("<Hibernate Transaction interceptor for %s(%s)>", serviceId, serviceInterface.getName()); AspectInterceptorBuilder<T> builder = aspectDecorator.createBuilder(serviceInterface, delegate, description); advisor.addTransactionCommitAdvice(builder); return builder.build(); } }
@Override public Object createObject() { Object service = delegate.createObject(); List<ServiceAdvisor> advisors = registry.findAdvisorsForService(serviceDef); if (advisors.isEmpty()) return service; final AspectInterceptorBuilder builder = aspectDecorator.createBuilder(serviceDef.getServiceInterface(), service, serviceDef, String.format("<AspectProxy for %s(%s)>", serviceDef.getServiceId(), serviceDef .getServiceInterface().getName())); for (final ServiceAdvisor advisor : advisors) { registry.run("Invoking " + advisor, new Runnable() { @Override public void run() { advisor.advise(builder); } }); } return builder.build(); } }
@Override public Object createObject() { Object service = delegate.createObject(); List<ServiceAdvisor> advisors = registry.findAdvisorsForService(serviceDef); if (advisors.isEmpty()) return service; final AspectInterceptorBuilder builder = aspectDecorator.createBuilder(serviceDef.getServiceInterface(), service, serviceDef, String.format("<AspectProxy for %s(%s)>", serviceDef.getServiceId(), serviceDef .getServiceInterface().getName())); for (final ServiceAdvisor advisor : advisors) { registry.run("Invoking " + advisor, new Runnable() { @Override public void run() { advisor.advise(builder); } }); } return builder.build(); } }
@Test public void persistence_unit_name_missing() { final VoidService delegate = newMock(VoidService.class); final EntityManagerManager manager = newMock(EntityManagerManager.class); final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class); final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager); Map<String, EntityManager> managers = CollectionFactory.newMap(); managers.put("A", newMock(EntityManager.class)); managers.put("B", newMock(EntityManager.class)); final AspectInterceptorBuilder<VoidService> builder = aspectDecorator.createBuilder( VoidService.class, delegate, "foo.Bar"); advisor.addTransactionCommitAdvice(builder); final VoidService interceptor = builder.build(); expect(manager.getEntityManagers()).andReturn(managers); replay(); try { interceptor.persistenceUnitNameMissing(); TestBase.unreachable(); } catch (Exception e) { Assert.assertEquals(e.getMessage(), "Unable to locate a single EntityManager. " + "You must provide the persistence unit name as defined in the persistence.xml using the @PersistenceContext annotation."); } verify(); }
@Test public void undecorated() { final VoidService delegate = newMock(VoidService.class); final EntityManagerManager manager = newMock(EntityManagerManager.class); final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class); final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager); final AspectInterceptorBuilder<VoidService> builder = aspectDecorator.createBuilder( VoidService.class, delegate, "foo.Bar"); advisor.addTransactionCommitAdvice(builder); final VoidService interceptor = builder.build(); delegate.undecorated(); replay(); interceptor.undecorated(); verify(); }
@Test public void persistence_unit_missing() { final VoidService delegate = newMock(VoidService.class); final EntityManagerManager manager = newMock(EntityManagerManager.class); final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class); final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager); Map<String, EntityManager> managers = CollectionFactory.newMap(); managers.put("A", newMock(EntityManager.class)); managers.put("B", newMock(EntityManager.class)); final AspectInterceptorBuilder<VoidService> builder = aspectDecorator.createBuilder( VoidService.class, delegate, "foo.Bar"); advisor.addTransactionCommitAdvice(builder); final VoidService interceptor = builder.build(); expect(manager.getEntityManagers()).andReturn(managers); replay(); try { interceptor.persistenceUnitMissing(); TestBase.unreachable(); } catch (Exception e) { assertMessageContains(e, "Unable to locate a single EntityManager"); } verify(); }
@Test public void return_type_method_with_param() { final ReturnTypeService delegate = newTestService(); final EntityManagerManager manager = newMock(EntityManagerManager.class); final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class); final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager); final EntityManager entityManager = newMock(EntityManager.class); final EntityTransaction transaction = newMock(EntityTransaction.class); final AspectInterceptorBuilder<ReturnTypeService> builder = aspectDecorator.createBuilder( ReturnTypeService.class, delegate, "foo.Bar"); advisor.addTransactionCommitAdvice(builder); final ReturnTypeService interceptor = builder.build(); train_getActiveTransaction(manager, entityManager, transaction); delegate.returnTypeMethodWithParam(5, 3); train_commitActiveTransaction(transaction); replay(); Assert.assertEquals(interceptor.returnTypeMethodWithParam(5, 3), 8); verify(); }