private void resolve ( ) { if ( ! resolved ) { synchronized ( this ) { if ( ! resolved ) { final Set < ViewDescription > views = getViews ( ) ; final Set < EJBViewDescription > ejbsForViewName = new HashSet < EJBViewDescription > ( ) ; for ( final ViewDescription view : views ) { if ( view instanceof EJBViewDescription ) { final MethodIntf viewType = ( ( EJBViewDescription ) view ) . getMethodIntf ( ) ; // @EJB injection *shouldn't* consider the @WebService endpoint view or MDBs if ( viewType == MethodIntf . SERVICE_ENDPOINT || viewType == MethodIntf . MESSAGE_ENDPOINT ) { continue ; } ejbsForViewName . add ( ( EJBViewDescription ) view ) ; } } if ( ejbsForViewName . isEmpty ( ) ) { if ( beanName == null ) { error = EjbLogger . ROOT_LOGGER . ejbNotFound ( typeName , bindingName ) ; } else { error = EjbLogger . ROOT_LOGGER . ejbNotFound ( typeName , beanName , bindingName ) ; } } else if ( ejbsForViewName . size ( ) > 1 ) { if ( beanName == null ) { error = EjbLogger . ROOT_LOGGER . moreThanOneEjbFound ( typeName , bindingName , ejbsForViewName ) ; } else { error = EjbLogger . ROOT_LOGGER . moreThanOneEjbFound ( typeName , beanName , bindingName , ejbsForViewName ) ; } } else { final EJBViewDescription description = ejbsForViewName . iterator ( ) . next ( ) ; final EJBViewDescription ejbViewDescription = ( EJBViewDescription ) description ; //for remote interfaces we do not want to use a normal binding //we need to bind the remote proxy factory into JNDI instead to get the correct behaviour if ( ejbViewDescription . getMethodIntf ( ) == MethodIntf . REMOTE || ejbViewDescription . getMethodIntf ( ) == MethodIntf . HOME ) { final EJBComponentDescription componentDescription = ( EJBComponentDescription ) description . getComponentDescription ( ) ; final EEModuleDescription moduleDescription = componentDescription . getModuleDescription ( ) ; final String earApplicationName = moduleDescription . getEarApplicationName ( ) ; final Value < ClassLoader > viewClassLoader = new Value < ClassLoader > ( ) { @ Override public ClassLoader getValue ( ) throws IllegalStateException , IllegalArgumentException { final Module module = deploymentUnit . getAttachment ( Attachments . MODULE ) ; return module != null ? module . getClassLoader ( ) : null ; } } ; remoteFactory = new RemoteViewManagedReferenceFactory ( earApplicationName , moduleDescription . getModuleName ( ) , moduleDescription . getDistinctName ( ) , componentDescription . getComponentName ( ) , description . getViewClassName ( ) , componentDescription . isStateful ( ) , viewClassLoader , appclient ) ; } final ServiceName serviceName = description . getServiceName ( ) ; resolvedViewName = serviceName ; } resolved = true ; } } } }
Checks if this ejb injection has been resolved yet and if not resolves it .