From b3253ca5e21aafd75ba2ce28741757886065544b Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 19 Jul 2016 18:56:06 +0200 Subject: [PATCH] Drop mock.staticmock package from spring-aspects Issue: SPR-14485 --- .../AbstractMethodMockingControl.aj | 254 --------------- ...otationDrivenStaticEntityMockingControl.aj | 122 ------- .../staticmock/MockStaticEntityMethods.java | 37 --- ...DrivenStaticEntityMockingControlTests.java | 300 ------------------ .../mock/staticmock/Person.java | 24 -- .../mock/staticmock/Person_Roo_Entity.aj | 100 ------ 6 files changed, 837 deletions(-) delete mode 100644 spring-aspects/src/main/java/org/springframework/mock/staticmock/AbstractMethodMockingControl.aj delete mode 100644 spring-aspects/src/main/java/org/springframework/mock/staticmock/AnnotationDrivenStaticEntityMockingControl.aj delete mode 100644 spring-aspects/src/main/java/org/springframework/mock/staticmock/MockStaticEntityMethods.java delete mode 100644 spring-aspects/src/test/java/org/springframework/mock/staticmock/AnnotationDrivenStaticEntityMockingControlTests.java delete mode 100644 spring-aspects/src/test/java/org/springframework/mock/staticmock/Person.java delete mode 100644 spring-aspects/src/test/java/org/springframework/mock/staticmock/Person_Roo_Entity.aj diff --git a/spring-aspects/src/main/java/org/springframework/mock/staticmock/AbstractMethodMockingControl.aj b/spring-aspects/src/main/java/org/springframework/mock/staticmock/AbstractMethodMockingControl.aj deleted file mode 100644 index fe378642a7..0000000000 --- a/spring-aspects/src/main/java/org/springframework/mock/staticmock/AbstractMethodMockingControl.aj +++ /dev/null @@ -1,254 +0,0 @@ -/* - * Copyright 2002-2014 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.mock.staticmock; - -import java.util.Arrays; -import java.util.LinkedList; - -import org.aspectj.lang.annotation.SuppressAjWarnings; - -import org.springframework.util.ObjectUtils; - -/** - * Abstract aspect to enable mocking of methods picked out by a pointcut. - * - *

Sub-aspects must define: - *

- * - * @author Rod Johnson - * @author Ramnivas Laddad - * @author Sam Brannen - */ -public abstract aspect AbstractMethodMockingControl percflow(mockStaticsTestMethod()) { - - private final Expectations expectations = new Expectations(); - - private boolean recording = true; - - - protected void expectReturnInternal(Object retVal) { - if (!recording) { - throw new IllegalStateException("Not recording: Cannot set return value"); - } - expectations.expectReturn(retVal); - } - - protected void expectThrowInternal(Throwable throwable) { - if (!recording) { - throw new IllegalStateException("Not recording: Cannot set throwable value"); - } - expectations.expectThrow(throwable); - } - - protected void playbackInternal() { - recording = false; - } - - protected void verifyInternal() { - expectations.verify(); - } - - protected void resetInternal() { - expectations.reset(); - recording = true; - } - - - private static enum CallResponse { - undefined, return_, throw_ - }; - - /** - * Represents a list of expected calls to methods. - */ - // Public to allow inserted code to access: is this normal?? - public class Expectations { - - /** - * Represents an expected call to a method. - */ - private class Call { - - private final String signature; - private final Object[] args; - - private CallResponse responseType = CallResponse.undefined; - private Object responseObject; // return value or throwable - - - Call(String signature, Object[] args) { - this.signature = signature; - this.args = args; - } - - boolean responseTypeAlreadySet() { - return responseType != CallResponse.undefined; - } - - void setReturnValue(Object retVal) { - this.responseObject = retVal; - responseType = CallResponse.return_; - } - - void setThrowable(Throwable throwable) { - this.responseObject = throwable; - responseType = CallResponse.throw_; - } - - Object returnValue(String lastSig, Object[] args) { - checkSignature(lastSig, args); - return responseObject; - } - - Object throwException(String lastSig, Object[] args) { - checkSignature(lastSig, args); - throw (RuntimeException) responseObject; - } - - private void checkSignature(String lastSig, Object[] args) { - if (!signature.equals(lastSig)) { - throw new IllegalArgumentException("Signatures do not match"); - } - if (!Arrays.equals(this.args, args)) { - throw new IllegalArgumentException("Arguments do not match"); - } - } - - @Override - public String toString() { - return String.format("Call with signature [%s] and arguments %s", this.signature, - ObjectUtils.nullSafeToString(args)); - } - } - - - /** - * The list of recorded calls. - */ - private final LinkedList calls = new LinkedList(); - - /** - * The number of calls already verified. - */ - private int verified; - - - public void verify() { - if (verified != calls.size()) { - throw new IllegalStateException("Expected " + calls.size() + " calls, but received " + verified); - } - } - - /** - * Validate the call and provide the expected return value. - */ - public Object respond(String lastSig, Object[] args) { - Call c = nextCall(); - - switch (c.responseType) { - case return_: { - return c.returnValue(lastSig, args); - } - case throw_: { - return c.throwException(lastSig, args); - } - default: { - throw new IllegalStateException("Behavior of " + c + " not specified"); - } - } - } - - private Call nextCall() { - verified++; - if (verified > calls.size()) { - throw new IllegalStateException("Expected " + calls.size() + " calls, but received " + verified); - } - // The 'verified' count is 1-based; whereas, 'calls' is 0-based. - return calls.get(verified - 1); - } - - public void expectCall(String lastSig, Object[] lastArgs) { - calls.add(new Call(lastSig, lastArgs)); - } - - public boolean hasCalls() { - return !calls.isEmpty(); - } - - public void expectReturn(Object retVal) { - Call c = calls.getLast(); - if (c.responseTypeAlreadySet()) { - throw new IllegalStateException("No method invoked before setting return value"); - } - c.setReturnValue(retVal); - } - - public void expectThrow(Throwable throwable) { - Call c = calls.getLast(); - if (c.responseTypeAlreadySet()) { - throw new IllegalStateException("No method invoked before setting throwable"); - } - c.setThrowable(throwable); - } - - /** - * Reset the internal state of this {@code Expectations} instance. - */ - public void reset() { - this.calls.clear(); - this.verified = 0; - } - } - - - /** - * Pointcut that identifies call stacks when mocking should be triggered. - */ - protected abstract pointcut mockStaticsTestMethod(); - - /** - * Pointcut that identifies which method invocations to mock. - */ - protected abstract pointcut methodToMock(); - - @SuppressAjWarnings("adviceDidNotMatch") - after() returning : mockStaticsTestMethod() { - if (recording && (expectations.hasCalls())) { - throw new IllegalStateException( - "Calls have been recorded, but playback state was never reached. Set expectations and then call " - + this.getClass().getSimpleName() + ".playback();"); - } - verifyInternal(); - } - - @SuppressAjWarnings("adviceDidNotMatch") - Object around() : methodToMock() && cflowbelow(mockStaticsTestMethod()) { - if (recording) { - expectations.expectCall(thisJoinPointStaticPart.toLongString(), thisJoinPoint.getArgs()); - // Return value doesn't matter - return null; - } - else { - return expectations.respond(thisJoinPointStaticPart.toLongString(), thisJoinPoint.getArgs()); - } - } - -} diff --git a/spring-aspects/src/main/java/org/springframework/mock/staticmock/AnnotationDrivenStaticEntityMockingControl.aj b/spring-aspects/src/main/java/org/springframework/mock/staticmock/AnnotationDrivenStaticEntityMockingControl.aj deleted file mode 100644 index b2979303bb..0000000000 --- a/spring-aspects/src/main/java/org/springframework/mock/staticmock/AnnotationDrivenStaticEntityMockingControl.aj +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright 2002-2014 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.mock.staticmock; - -import org.aspectj.lang.annotation.RequiredTypes; -import org.aspectj.lang.annotation.SuppressAjWarnings; - -/** - * Annotation-based aspect to use in test builds to enable mocking of static methods - * on JPA-annotated {@code @Entity} classes, as used by Spring Roo for so-called - * finder methods. - * - *

Mocking will occur within the call stack of any {@code public} method in a - * class (typically a test class) that is annotated with {@code @MockStaticEntityMethods}. - * Thus mocking is not limited to {@code @Test} methods. Furthermore, new mock - * state will be created for the invocation of each such public method, even when - * the method is invoked from another such public method. - * - *

This aspect also provides static methods to simplify the programming model for - * setting expectations and entering playback mode. - * - *

Usage

- *
    - *
  1. Annotate a test class with {@code @MockStaticEntityMethods}. - *
  2. In each test method, the {@code AnnotationDrivenStaticEntityMockingControl} - * will begin in recording mode. - *
  3. Invoke static methods on JPA-annotated {@code @Entity} classes, with each - * recording-mode invocation being followed by an invocation of either - * {@link #expectReturn(Object)} or {@link #expectThrow(Throwable)} on the - * {@code AnnotationDrivenStaticEntityMockingControl}. - *
  4. Invoke the {@link #playback()} method. - *
  5. Call the code you wish to test that uses the static methods on the - * JPA-annotated {@code @Entity} classes. - *
  6. Verification will occur automatically after the test method has executed - * and returned. However, mock verification will not occur if the test method - * throws an exception. - *
- * - *

Programmatic Control of the Mock

- *

For scenarios where it would be convenient to programmatically verify - * the recorded expectations or reset the state of the mock, consider - * using combinations of {@link #verify()} and {@link #reset()}. - * - * @author Rod Johnson - * @author Ramnivas Laddad - * @author Sam Brannen - * @see MockStaticEntityMethods - */ -@RequiredTypes("javax.persistence.Entity") -public aspect AnnotationDrivenStaticEntityMockingControl extends AbstractMethodMockingControl { - - /** - * Expect the supplied {@link Object} to be returned by the previous static - * method invocation. - * @see #playback() - */ - public static void expectReturn(Object retVal) { - AnnotationDrivenStaticEntityMockingControl.aspectOf().expectReturnInternal(retVal); - } - - /** - * Expect the supplied {@link Throwable} to be thrown by the previous static - * method invocation. - * @see #playback() - */ - public static void expectThrow(Throwable throwable) { - AnnotationDrivenStaticEntityMockingControl.aspectOf().expectThrowInternal(throwable); - } - - /** - * Stop recording mock expectations and enter playback mode. - * @see #expectReturn(Object) - * @see #expectThrow(Throwable) - */ - public static void playback() { - AnnotationDrivenStaticEntityMockingControl.aspectOf().playbackInternal(); - } - - /** - * Verify that all expectations have been fulfilled. - * @since 4.0.2 - * @see #reset() - */ - public static void verify() { - AnnotationDrivenStaticEntityMockingControl.aspectOf().verifyInternal(); - } - - /** - * Reset the state of the mock and enter recording mode. - * @since 4.0.2 - * @see #verify() - */ - public static void reset() { - AnnotationDrivenStaticEntityMockingControl.aspectOf().resetInternal(); - } - - // Apparently, the following pointcut was originally defined to only match - // methods directly annotated with @Test (in order to allow methods in - // @MockStaticEntityMethods classes to invoke each other without creating a - // new mocking environment); however, this is no longer the case. The current - // pointcut applies to all public methods in @MockStaticEntityMethods classes. - @SuppressAjWarnings("adviceDidNotMatch") - protected pointcut mockStaticsTestMethod() : execution(public * (@MockStaticEntityMethods *).*(..)); - - @SuppressAjWarnings("adviceDidNotMatch") - protected pointcut methodToMock() : execution(public static * (@javax.persistence.Entity *).*(..)); - -} diff --git a/spring-aspects/src/main/java/org/springframework/mock/staticmock/MockStaticEntityMethods.java b/spring-aspects/src/main/java/org/springframework/mock/staticmock/MockStaticEntityMethods.java deleted file mode 100644 index f68b80640b..0000000000 --- a/spring-aspects/src/main/java/org/springframework/mock/staticmock/MockStaticEntityMethods.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2002-2014 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.mock.staticmock; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Annotation to indicate a test class for whose {@code @Test} methods - * static methods on JPA-annotated {@code @Entity} classes should be mocked. - * - *

See {@link AnnotationDrivenStaticEntityMockingControl} for details. - * - * @author Rod Johnson - * @author Sam Brannen - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface MockStaticEntityMethods { - -} diff --git a/spring-aspects/src/test/java/org/springframework/mock/staticmock/AnnotationDrivenStaticEntityMockingControlTests.java b/spring-aspects/src/test/java/org/springframework/mock/staticmock/AnnotationDrivenStaticEntityMockingControlTests.java deleted file mode 100644 index 1dcf2e442b..0000000000 --- a/spring-aspects/src/test/java/org/springframework/mock/staticmock/AnnotationDrivenStaticEntityMockingControlTests.java +++ /dev/null @@ -1,300 +0,0 @@ -/* - * Copyright 2002-2014 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.mock.staticmock; - -import javax.persistence.PersistenceException; - -import org.junit.Test; - -import static org.junit.Assert.*; -import static org.springframework.mock.staticmock.AnnotationDrivenStaticEntityMockingControl.*; - -/** - * Tests for Spring's static entity mocking framework (i.e., @{@link MockStaticEntityMethods} - * and {@link AnnotationDrivenStaticEntityMockingControl}). - * - * @author Rod Johnson - * @author Ramnivas Laddad - * @author Sam Brannen - */ -@MockStaticEntityMethods -public class AnnotationDrivenStaticEntityMockingControlTests { - - @Test - public void noArgumentMethodInvocationReturnsInt() { - int expectedCount = 13; - Person.countPeople(); - expectReturn(expectedCount); - playback(); - assertEquals(expectedCount, Person.countPeople()); - } - - @Test(expected = PersistenceException.class) - public void noArgumentMethodInvocationThrowsException() { - Person.countPeople(); - expectThrow(new PersistenceException()); - playback(); - Person.countPeople(); - } - - @Test - public void methodArgumentsMatch() { - long id = 13; - Person found = new Person(); - Person.findPerson(id); - expectReturn(found); - playback(); - assertEquals(found, Person.findPerson(id)); - } - - @Test - public void longSeriesOfCalls() { - long id1 = 13; - long id2 = 24; - Person found1 = new Person(); - Person.findPerson(id1); - expectReturn(found1); - Person found2 = new Person(); - Person.findPerson(id2); - expectReturn(found2); - Person.findPerson(id1); - expectReturn(found1); - Person.countPeople(); - expectReturn(0); - playback(); - - assertEquals(found1, Person.findPerson(id1)); - assertEquals(found2, Person.findPerson(id2)); - assertEquals(found1, Person.findPerson(id1)); - assertEquals(0, Person.countPeople()); - } - - @Test(expected = IllegalArgumentException.class) - public void methodArgumentsDoNotMatchAndReturnsObject() { - long id = 13; - Person found = new Person(); - Person.findPerson(id); - expectReturn(found); - playback(); - assertEquals(found, Person.findPerson(id + 1)); - } - - @Test(expected = IllegalArgumentException.class) - public void methodArgumentsDoNotMatchAndThrowsException() { - long id = 13; - Person found = new Person(); - Person.findPerson(id); - expectThrow(new PersistenceException()); - playback(); - assertEquals(found, Person.findPerson(id + 1)); - } - - @Test - public void reentrantCallToPrivateMethod() { - long id = 13; - Person found = new Person(); - Person.findPerson(id); - expectReturn(found); - playback(); - privateMethod(found, id); - } - - private void privateMethod(Person found, long id) { - assertEquals(found, Person.findPerson(id)); - } - - @Test - public void reentrantCallToPublicMethod() { - final Long ID = 13L; - Person.findPerson(ID); - expectReturn(new Person()); - playback(); - try { - publicMethod(); - fail("Should have thrown an IllegalStateException"); - } - catch (IllegalStateException e) { - String snippet = "Calls have been recorded, but playback state was never reached."; - assertTrue("Exception message should contain [" + snippet + "]", e.getMessage().contains(snippet)); - } - - // Now to keep the mock for "this" method happy: - Person.findPerson(ID); - } - - public void publicMethod() { - // At this point, since publicMethod() is a public method in a class - // annotated with @MockStaticEntityMethods, the current mock state is - // fresh. In other words, we are again in recording mode. As such, any - // call to a mocked method will return null. See the implementation of - // the around - // advice in AbstractMethodMockingControl for details. - assertNull(Person.findPerson(99L)); - } - - @Test(expected = IllegalStateException.class) - public void unexpectedCall() { - playback(); - Person.countPeople(); - } - - @Test(expected = IllegalStateException.class) - public void tooFewCalls() { - long id = 13; - Person found = new Person(); - Person.findPerson(id); - expectReturn(found); - Person.countPeople(); - expectReturn(25); - playback(); - assertEquals(found, Person.findPerson(id)); - } - - @Test - public void noExpectationsAndNoPlayback() { - // Ensure that mock verification doesn't blow up if playback() was not invoked and - // no expectations were set. - } - - @Test - public void noExpectationsButWithPlayback() { - // Ensure that mock verification doesn't blow up if playback() was invoked but no - // expectations were set. - playback(); - } - - @Test(expected = IllegalStateException.class) - public void doesNotEnterPlaybackMode() { - Person.countPeople(); - } - - @Test(expected = IllegalStateException.class) - public void doesNotSetExpectedReturnValue() { - Person.countPeople(); - playback(); - } - - /** - * Currently, the method mocking aspect will not verify the state of the - * expectations within the mock if a test method throws an exception. - * - *

The reason is that the {@code mockStaticsTestMethod()} advice in - * {@link AbstractMethodMockingControl} is declared as - * {@code after() returning} instead of simply {@code after()}. - * - *

If the aforementioned advice is changed to a generic "after" advice, - * this test method will fail with an {@link IllegalStateException} (thrown - * by the mock aspect) instead of the {@link UnsupportedOperationException} - * thrown by the test method itself. - */ - @Test(expected = UnsupportedOperationException.class) - public void mockVerificationDoesNotOccurIfTestFailsWithAnExpectedException() { - Person.countPeople(); - playback(); - // We intentionally do not execute any of the recorded method invocations in order - // to demonstrate that mock verification does not occur if an - // exception is thrown. - throw new UnsupportedOperationException(); - } - - @Test - public void resetMockWithoutVerficationAndStartOverWithoutRedeclaringExpectations() { - final Long ID = 13L; - Person.findPerson(ID); - expectReturn(new Person()); - - reset(); - - Person.findPerson(ID); - // Omit expectation. - playback(); - - try { - Person.findPerson(ID); - fail("Should have thrown an IllegalStateException"); - } - catch (IllegalStateException e) { - String snippet = "Behavior of Call with signature"; - assertTrue("Exception message should contain [" + snippet + "]", e.getMessage().contains(snippet)); - } - } - - @Test - public void resetMockWithoutVerificationAndStartOver() { - final Long ID = 13L; - Person found = new Person(); - Person.findPerson(ID); - expectReturn(found); - - reset(); - - // Intentionally use a different ID: - final long ID_2 = ID + 1; - Person.findPerson(ID_2); - expectReturn(found); - playback(); - - assertEquals(found, Person.findPerson(ID_2)); - } - - @Test - public void verifyResetAndStartOver() { - final Long ID_1 = 13L; - Person found1 = new Person(); - Person.findPerson(ID_1); - expectReturn(found1); - playback(); - - assertEquals(found1, Person.findPerson(ID_1)); - verify(); - reset(); - - // Intentionally use a different ID: - final long ID_2 = ID_1 + 1; - Person found2 = new Person(); - Person.findPerson(ID_2); - expectReturn(found2); - playback(); - - assertEquals(found2, Person.findPerson(ID_2)); - } - - @Test - public void verifyWithTooFewCalls() { - final Long ID = 13L; - Person found = new Person(); - Person.findPerson(ID); - expectReturn(found); - Person.findPerson(ID); - expectReturn(found); - playback(); - - assertEquals(found, Person.findPerson(ID)); - - try { - verify(); - fail("Should have thrown an IllegalStateException"); - } - catch (IllegalStateException e) { - assertEquals("Expected 2 calls, but received 1", e.getMessage()); - // Since verify() failed, we need to manually reset so that the test method - // does not fail. - reset(); - } - } - -} diff --git a/spring-aspects/src/test/java/org/springframework/mock/staticmock/Person.java b/spring-aspects/src/test/java/org/springframework/mock/staticmock/Person.java deleted file mode 100644 index ca98b77f92..0000000000 --- a/spring-aspects/src/test/java/org/springframework/mock/staticmock/Person.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.mock.staticmock; - -import javax.persistence.Entity; - -@Entity -public class Person { -} - diff --git a/spring-aspects/src/test/java/org/springframework/mock/staticmock/Person_Roo_Entity.aj b/spring-aspects/src/test/java/org/springframework/mock/staticmock/Person_Roo_Entity.aj deleted file mode 100644 index a6a62cdbb6..0000000000 --- a/spring-aspects/src/test/java/org/springframework/mock/staticmock/Person_Roo_Entity.aj +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright 2002-2012 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.mock.staticmock; - -privileged aspect Person_Roo_Entity { - - @javax.persistence.PersistenceContext - transient javax.persistence.EntityManager Person.entityManager; - - @javax.persistence.Id - @javax.persistence.GeneratedValue(strategy = javax.persistence.GenerationType.AUTO) - @javax.persistence.Column(name = "id") - private java.lang.Long Person.id; - - @javax.persistence.Version - @javax.persistence.Column(name = "version") - private java.lang.Integer Person.version; - - public java.lang.Long Person.getId() { - return this.id; - } - - public void Person.setId(java.lang.Long id) { - this.id = id; - } - - public java.lang.Integer Person.getVersion() { - return this.version; - } - - public void Person.setVersion(java.lang.Integer version) { - this.version = version; - } - - @org.springframework.transaction.annotation.Transactional - public void Person.persist() { - if (this.entityManager == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)"); - this.entityManager.persist(this); - } - - @org.springframework.transaction.annotation.Transactional - public void Person.remove() { - if (this.entityManager == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)"); - this.entityManager.remove(this); - } - - @org.springframework.transaction.annotation.Transactional - public void Person.flush() { - if (this.entityManager == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)"); - this.entityManager.flush(); - } - - @org.springframework.transaction.annotation.Transactional - public void Person.merge() { - if (this.entityManager == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)"); - Person merged = this.entityManager.merge(this); - this.entityManager.flush(); - this.id = merged.getId(); - } - - public static long Person.countPeople() { - javax.persistence.EntityManager em = new Person().entityManager; - if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)"); - return (Long) em.createQuery("select count(o) from Person o").getSingleResult(); - } - - public static java.util.List Person.findAllPeople() { - javax.persistence.EntityManager em = new Person().entityManager; - if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)"); - return em.createQuery("select o from Person o").getResultList(); - } - - public static Person Person.findPerson(java.lang.Long id) { - if (id == null) throw new IllegalArgumentException("An identifier is required to retrieve an instance of Person"); - javax.persistence.EntityManager em = new Person().entityManager; - if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)"); - return em.find(Person.class, id); - } - - public static java.util.List Person.findPersonEntries(int firstResult, int maxResults) { - javax.persistence.EntityManager em = new Person().entityManager; - if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)"); - return em.createQuery("select o from Person o").setFirstResult(firstResult).setMaxResults(maxResults).getResultList(); - } - -}