@PostConstruct public void postConstruct(InvocationContext ctx) throws Exception { log.debug("postConstruct " + ctx); Class<?> businessInterfaces[]; InterceptorContainer container = (InterceptorContainer) ctx.getTarget(); Local local = container.getAnnotation(Local.class); if (local != null) businessInterfaces = local.value(); else if (container.getBeanClass().getInterfaces().length == 1) businessInterfaces = new Class<?>[] {container.getBeanClass().getInterfaces()[0]}; else throw new IllegalArgumentException("TODO"); // TODO: determine JNDI name String jndiName = container.getBeanClass().getSimpleName() + "/local"; log.debug("jndiName = " + jndiName); Object proxy = Proxy.newProxyInstance( Thread.currentThread().getContextClassLoader(), businessInterfaces, new LocalProxy(container)); Util.createSubcontext(new InitialContext(), container.getBeanClass().getSimpleName()); NonSerializableFactory.rebind(new InitialContext(), jndiName, proxy); ctx.proceed(); }
private MockEjbDescriptor(final Class<T> type) { this.beanClass = type; this.ejbName = type.getSimpleName(); this.localInterfaces = new ArrayList<BusinessInterfaceDescriptor<?>>(); Local localAnnotation = type.getAnnotation(Local.class); if (localAnnotation != null) { for (final Class<?> clazz : localAnnotation.value()) { localInterfaces.add(createBusinessInterfaceDescriptor(clazz)); } } for (final Class<?> clazz : type.getInterfaces()) { if (clazz.isAnnotationPresent(Local.class)) { localInterfaces.add(createBusinessInterfaceDescriptor(clazz)); } } this.remoteInterfaces = new ArrayList<BusinessInterfaceDescriptor<?>>(); Remote remoteAnnotation = type.getAnnotation(Remote.class); if (remoteAnnotation != null) { for (final Class<?> clazz : remoteAnnotation.value()) { remoteInterfaces.add(createBusinessInterfaceDescriptor(clazz)); } } for (final Class<?> clazz : type.getInterfaces()) { if (clazz.isAnnotationPresent(Remote.class)) { remoteInterfaces.add(createBusinessInterfaceDescriptor(clazz)); } } // cope with EJB 3.1 style no-interface views if (localInterfaces.size() == 0) { localInterfaces.add(createBusinessInterfaceDescriptor(type)); } this.removeMethods = new HashSet<Method>(); for (final Method method : type.getMethods()) { if (method.isAnnotationPresent(Remove.class)) { removeMethods.add(method); } } }