[
http://jira.jboss.com/jira/browse/JBMETA-41?page=comments#action_12412957 ]
Andrew Lee Rubinger commented on JBMETA-41:
-------------------------------------------
The logic currently used in Proxy Generation code from EJB3:
/**
* Obtains the return types declared by the "create" methods for the
specified home interface.
*
* EJB3 Core Specification 3.6.2.1
* JIRA: EJBTHREE-1127
*
* @param homeInterface
* @param isStateless Flag to indicate whether this is for a Stateful or Stateless
container
* @return
*/
protected Set<Class<?>> getReturnTypesFromCreateMethods(Class<?>
homeInterface, boolean isStateless)
{
// Ensure we've been passed a Home or LocalHome interface (Developers only)
assert (EJBHome.class.isAssignableFrom(homeInterface) ||
EJBLocalHome.class.isAssignableFrom(homeInterface));
// Ensure we've been passed a Home or LocalHome interface (End-User)
if (!EJBHome.class.isAssignableFrom(homeInterface) &&
!EJBLocalHome.class.isAssignableFrom(homeInterface))
{
throw new RuntimeException("Declared EJB 2.1 Home Interface " +
homeInterface.getName() + " does not extend "
+ EJBHome.class.getName() + " or " +
EJBLocalHome.class.getName()
+ " as required by EJB 3.0 Core Specification 4.6.8 and
4.6.10");
}
// Initialize
Set<Class<?>> types = new HashSet<Class<?>>();
List<Method> createMethods = null;
// If for a Stateless Container
if (isStateless)
{
// Initialize error message
String specViolationErrorMessage = "EJB 3.0 Specification Violation (4.6.8
Bullet 4, 4.6.10 Bullet 4): \""
+ "A stateless session bean must define exactly one create method with
no arguments." + "\"; found in "
+ homeInterface.getName();
// Get all methods with signature "create"
createMethods = new ArrayList<Method>();
try
{
createMethods.add(homeInterface.getMethod("create", new
Class<?>[]
{}));
}
// EJB 3.0 Specification 4.6.8 Bullet 4 Violation
// EJBTHREE-1156
catch (NoSuchMethodException e)
{
throw new RuntimeException(specViolationErrorMessage);
}
// Ensure only one create method is defined
// EJB 3.0 Specification 4.6.8 Bullet 4 Violation
// EJBTHREE-1156
if (createMethods.size() > 1)
{
throw new RuntimeException(specViolationErrorMessage);
}
}
else
{
// Obtain all "create<METHOD>" methods
createMethods = ClassHelper.getAllMethodsByPrefix(homeInterface,
"create");
}
if (createMethods.size() == 0)
{
throw new RuntimeException("EJB 3.0 Core Specification Violation (4.6.8
Bullet 5): EJB2.1 Home Interface "
+ homeInterface + " does not declare a
\'create<METHOD>\' method");
}
// Add all return types
for (Method method : createMethods)
{
types.add(method.getReturnType());
}
// Return
return types;
}
EJBTHREE-1127 processing
------------------------
Key: JBMETA-41
URL:
http://jira.jboss.com/jira/browse/JBMETA-41
Project: JBoss Metadata
Issue Type: Feature Request
Security Level: Public(Everyone can see)
Affects Versions: 1.0.0.Beta15
Reporter: Scott M Stark
Assigned To: Alexey Loubyansky
Fix For: 1.0.0.CR1
Another annotation processing example is:
@RemoteHome
public interface RemoteHome extends EJBHome
{
public RemoteInterface1 create();
public RemoteInterface2 create2();
}
The above example defines 2 EJB2.x Remote interfaces, even though they're not
explicitly marked as such anywhere.
That's EJBTHREE-1127, defined by, "EJB3 Core Specification 3.6.2.1":
The return type of a create method on the remote home interface is the session bean's
remote interface.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira