/** * Inject resources in specified instance. */ protected void processAnnotations(Object instance) throws IllegalAccessException, InvocationTargetException, NamingException { if (context == null) { // No resource injection return; } checkAnnotation(instance.getClass(), instance); /* TODO the servlet spec is not clear about searching in superclass?? * May be only check non private fields and methods * for @Resource (JSR 250), if used all superclasses MUST be examined * to discover all uses of this annotation. Class superclass = instance.getClass().getSuperclass(); while (superclass != null && (!superclass.equals(Object.class))) { checkAnnotation(superclass, instance); superclass = superclass.getSuperclass(); } */ }
private void checkAnnotation(Class<?> clazz, Object instance) throws NamingException, IllegalAccessException, InvocationTargetException { // Initialize fields annotations Field[] fields = getDeclaredFieldBeans(clazz); for (int i = 0; i < fields.length; i++) { Field field = fields[i]; checkFieldAnnotation(field, instance); } // Initialize methods annotations Method[] methods = getDeclaredMethods(clazz); for (int i = 0; i < methods.length; i++) { Method method = methods[i]; checkMethodAnnotation(method, instance); } }
protected void checkFieldAnnotation(Field field, Object instance) throws NamingException, IllegalAccessException { if (field.isAnnotationPresent(Resource.class)) { Resource annotation = field.getAnnotation(Resource.class); lookupFieldResource(context, instance, field, annotation.name()); } }
private void checkAnnotation(Class clazz, Object instance) throws NamingException, IllegalAccessException, InvocationTargetException { // Initialize fields annotations Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { checkFieldAnnotation(field, instance); } // Initialize methods annotations Method[] methods = clazz.getDeclaredMethods(); for (Method method : methods) { checkMethodAnnotation(method, instance); } }
protected void checkMethodAnnotation(Method method, Object instance) throws NamingException, IllegalAccessException, InvocationTargetException { if (method.isAnnotationPresent(Resource.class)) { Resource annotation = method.getAnnotation(Resource.class); lookupMethodResource(context, instance, method, annotation.name()); } }
@Override protected void checkFieldAnnotation(Field field, Object instance) throws NamingException, IllegalAccessException { super.checkFieldAnnotation(field, instance); if (field.isAnnotationPresent(EJB.class)) { EJB annotation = field.getAnnotation(EJB.class); lookupFieldResource(context, instance, field, annotation.name()); } /*if (field.isAnnotationPresent(WebServiceRef.class)) { WebServiceRef annotation = (WebServiceRef) field.getAnnotation(WebServiceRef.class); lookupFieldResource(context, instance, field, annotation.name()); }*/ if (field.isAnnotationPresent(PersistenceContext.class)) { PersistenceContext annotation = field.getAnnotation(PersistenceContext.class); lookupFieldResource(context, instance, field, annotation.name()); } if (field.isAnnotationPresent(PersistenceUnit.class)) { PersistenceUnit annotation = field.getAnnotation(PersistenceUnit.class); lookupFieldResource(context, instance, field, annotation.name()); } } }
LIFECYCLE_PROVIDER_INSTANCE = new ResourceAnnotationLifecycleProvider(context);
protected void checkMethodAnnotation(Method method, Object instance) throws NamingException, IllegalAccessException, InvocationTargetException super.checkMethodAnnotation(method, instance); if (method.isAnnotationPresent(Resource.class))
/** * Inject resources in specified method. */ protected static void lookupMethodResource(javax.naming.Context context, Object instance, Method method, String name) throws NamingException, IllegalAccessException, InvocationTargetException { if (!method.getName().startsWith("set") || method.getParameterTypes().length != 1 || !method.getReturnType().getName().equals("void")) { throw new IllegalArgumentException("Invalid method resource injection annotation"); } Object lookedupResource; if ((name != null) && (name.length() > 0)) { // TODO local or global JNDI lookedupResource = context.lookup(JAVA_COMP_ENV + name); } else { // TODO local or global JNDI lookedupResource = context.lookup(JAVA_COMP_ENV + instance.getClass().getName() + "/" + getFieldName(method)); } boolean accessibility = method.isAccessible(); method.setAccessible(true); method.invoke(instance, lookedupResource); method.setAccessible(accessibility); }
private void checkAnnotation(Class<?> clazz, Object instance) throws NamingException, IllegalAccessException, InvocationTargetException { // Initialize fields annotations Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { checkFieldAnnotation(field, instance); } // Initialize methods annotations Method[] methods = clazz.getDeclaredMethods(); for (Method method : methods) { checkMethodAnnotation(method, instance); } }
protected void checkMethodAnnotation(Method method, Object instance) throws NamingException, IllegalAccessException, InvocationTargetException { if (method.isAnnotationPresent(Resource.class)) { Resource annotation = method.getAnnotation(Resource.class); lookupMethodResource(context, instance, method, annotation.name()); } }
protected void checkFieldAnnotation(Field field, Object instance) throws NamingException, IllegalAccessException { super.checkFieldAnnotation(field, instance); if (field.isAnnotationPresent(EJB.class)) { EJB annotation = field.getAnnotation(EJB.class); lookupFieldResource(context, instance, field, annotation.name()); } /*if (field.isAnnotationPresent(WebServiceRef.class)) { WebServiceRef annotation = (WebServiceRef) field.getAnnotation(WebServiceRef.class); lookupFieldResource(context, instance, field, annotation.name()); }*/ if (field.isAnnotationPresent(PersistenceContext.class)) { PersistenceContext annotation = field.getAnnotation(PersistenceContext.class); lookupFieldResource(context, instance, field, annotation.name()); } if (field.isAnnotationPresent(PersistenceUnit.class)) { PersistenceUnit annotation = field.getAnnotation(PersistenceUnit.class); lookupFieldResource(context, instance, field, annotation.name()); } } }
return new ResourceAnnotationLifecycleProvider(context);
throws NamingException, IllegalAccessException, InvocationTargetException super.checkMethodAnnotation(method, instance); if (method.isAnnotationPresent(Resource.class))
/** * Inject resources in specified method. */ protected static void lookupMethodResource(javax.naming.Context context, Object instance, Method method, String name) throws NamingException, IllegalAccessException, InvocationTargetException { if (!method.getName().startsWith("set") || method.getParameterTypes().length != 1 || !method.getReturnType().getName().equals("void")) { throw new IllegalArgumentException("Invalid method resource injection annotation"); } Object lookedupResource; if ((name != null) && (name.length() > 0)) { // TODO local or global JNDI lookedupResource = context.lookup(JAVA_COMP_ENV + name); } else { // TODO local or global JNDI lookedupResource = context.lookup(JAVA_COMP_ENV + instance.getClass().getName() + "/" + getFieldName(method)); } boolean accessibility = method.isAccessible(); method.setAccessible(true); method.invoke(instance, lookedupResource); method.setAccessible(accessibility); }
private void checkAnnotation(Class<?> clazz, Object instance) throws NamingException, IllegalAccessException, InvocationTargetException { // Initialize fields annotations Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { checkFieldAnnotation(field, instance); } // Initialize methods annotations Method[] methods = clazz.getDeclaredMethods(); for (Method method : methods) { checkMethodAnnotation(method, instance); } }
protected void checkMethodAnnotation(Method method, Object instance) throws NamingException, IllegalAccessException, InvocationTargetException { if (method.isAnnotationPresent(Resource.class)) { Resource annotation = method.getAnnotation(Resource.class); lookupMethodResource(context, instance, method, annotation.name()); } }
protected void checkFieldAnnotation(Field field, Object instance) throws NamingException, IllegalAccessException { if (field.isAnnotationPresent(Resource.class)) { Resource annotation = field.getAnnotation(Resource.class); lookupFieldResource(context, instance, field, annotation.name()); } }
/** * Inject resources in specified instance. */ @Override protected void processAnnotations(Object instance) throws IllegalAccessException, InvocationTargetException, NamingException { if (context == null) { // No resource injection return; } checkAnnotation(instance.getClass(), instance); /* * May be only check non private fields and methods * for @Resource (JSR 250), if used all superclasses MUST be examined * to discover all uses of this annotation. */ Class superclass = instance.getClass().getSuperclass(); while (superclass != null && (!superclass.equals(Object.class))) { checkAnnotation(superclass, instance); superclass = superclass.getSuperclass(); } }
@Override protected void checkFieldAnnotation(Field field, Object instance) throws NamingException, IllegalAccessException { super.checkFieldAnnotation(field, instance); if (field.isAnnotationPresent(EJB.class)) { EJB annotation = field.getAnnotation(EJB.class); lookupFieldResource(context, instance, field, annotation.name()); } /*if (field.isAnnotationPresent(WebServiceRef.class)) { WebServiceRef annotation = (WebServiceRef) field.getAnnotation(WebServiceRef.class); lookupFieldResource(context, instance, field, annotation.name()); }*/ if (field.isAnnotationPresent(PersistenceContext.class)) { PersistenceContext annotation = field.getAnnotation(PersistenceContext.class); lookupFieldResource(context, instance, field, annotation.name()); } if (field.isAnnotationPresent(PersistenceUnit.class)) { PersistenceUnit annotation = field.getAnnotation(PersistenceUnit.class); lookupFieldResource(context, instance, field, annotation.name()); } } }