public WSEJBEndpointManager createWebServiceEndpointManager(J2EEName j2eeName,
                                                                Class<?> provider, // d492780, F87951
                                                                Method[] methods) throws EJBException, EJBConfigurationException {
        final boolean isTraceOn = TraceComponent.isAnyTracingEnabled(); // d532639.2

        if (isTraceOn && tc.isEntryEnabled())
            Tr.entry(tc, "createWebServiceEndpointManager : " + j2eeName,
                     new Object[] { provider, methods });

        EJSHome home = (EJSHome) homeOfHomes.getHome(j2eeName);

        // If a WebService request comes in after a home has been uninstalled,
        // then it won't be found.                                         d547849
        if (home == null) {
            if (isTraceOn && tc.isEntryEnabled())
                Tr.exit(tc, "createWebServiceEndpointManager could not find home for : " +
                            j2eeName);
            throw ExceptionUtil.EJBException("Unable to find EJB component: " + j2eeName, null);
        }

        BeanMetaData bmd = home.beanMetaData;
        Method[] endpointMethods = methods;

        // -----------------------------------------------------------------------
        // If this is the first time the endpoint has been accessed,
        // then resolve the methods to insure this is a valid configuration
        // and JITDeploy the WSEJBProxy class if there are around invoke
        // interceptors.                                                   d497921
        // -----------------------------------------------------------------------
        synchronized (bmd) {
            if (!bmd.ivWebServiceEndpointCreated) {
                if (provider != null) {
                    // The Web Service Endpoint Interface from ejb-jar.xml is for
                    // JAX-RPC, and cannot be used with a JAX-WS Provider.
                    if (bmd.webserviceEndpointInterfaceClass != null) {
                        // Log the error and throw meaningful exception.
                        Tr.error(tc, "WS_ENDPOINT_PROVIDER_CONFLICT_CNTR0176E",
                                 new Object[] { bmd.webserviceEndpointInterfaceClass.getName(),
                                                bmd.j2eeName.getComponent(),
                                                bmd.j2eeName.getModule(),
                                                bmd.j2eeName.getApplication() });
                        throw new EJBConfigurationException("Web Service Provider interface conflicts with the " +
                                                            "configured Web Service Endpoint interface " +
                                                            bmd.webserviceEndpointInterfaceClass.getName() +
                                                            " for the " + bmd.j2eeName.getComponent() +
                                                            " bean in the " + bmd.j2eeName.getModule() +
                                                            " module of the " + bmd.j2eeName.getApplication() +
                                                            " application.");
                    }

                    endpointMethods = provider.getMethods();

                    if (isTraceOn && tc.isDebugEnabled())
                        Tr.debug(tc, "provider methods : ", (Object[]) endpointMethods);
                }

                // Resolve the Web Service Endpoint methods.  This will make sure that
                // the bean actually implements the methods, but will also remove any
                // excess methodInfos for the webservice endpoint interface in BMD.
                // Until now, EJBContainer is not aware of what the endpoint methods
                // are, so assumes all methods on the bean may be endpoint methods.
                boolean hasAroundInvoke = WSEJBWrapper.resolveWebServiceEndpointMethods(bmd, endpointMethods);

                // Finally, if any of the methods have around invoke interceptors,
                // then a WSEJBProxy must be created by JITDeploy.  An instance of
                // the proxy will be returned to WebServices component to invoke
                // the bean method, instead of an actual bean instance.
                if (hasAroundInvoke) {
                    try {
                        bmd.ivWebServiceEndpointProxyClass = JITDeploy.generateWSEJBProxy(bmd.classLoader,
                                                                                          bmd.ivWebServiceEndpointProxyName,
                                                                                          provider,
                                                                                          endpointMethods,
                                                                                          bmd.wsEndpointMethodInfos,
                                                                                          bmd.enterpriseBeanClassName,
                                                                                          bmd.j2eeName.toString(),
                                                                                          getEJBRuntime().getClassDefiner()); // F70650
                    } catch (ClassNotFoundException ex) {
                        // Log the error and throw meaningful exception.
                        Tr.error(tc, "WS_EJBPROXY_FAILURE_CNTR0177E",
                                 new Object[] { bmd.j2eeName.getComponent(),
                                                bmd.j2eeName.getModule(),
                                                bmd.j2eeName.getApplication(),
                                                ex });
                        throw ExceptionUtil.EJBException("Failure occurred attempting to create a Web service " +
                                                         "endpoint proxy for the " + bmd.j2eeName.getComponent() +
                                                         " bean in the " + bmd.j2eeName.getModule() +
                                                         " module of the " + bmd.j2eeName.getApplication() +
                                                         " application.", ex);
                    }
                }

                bmd.ivWebServiceEndpointCreated = true;

                // Dump the BeanMetaData now that the endpoint methodinfos are set.
                bmd.dump();
            }
        } // end synchronization                                        d521886

        // -----------------------------------------------------------------------
        // Create a new instance of the generic Web Services Endpoint EJB Wrapper,
        // and initialize it specific to the requested bean type.
        // -----------------------------------------------------------------------

        WSEJBWrapper wrapper = new WSEJBWrapper();

        wrapper.container = this;
        wrapper.wrapperManager = wrapperManager;
        wrapper.ivCommon = null; // Not cached
        wrapper.isManagedWrapper = false; // Not managed
        wrapper.ivInterface = WrapperInterface.SERVICE_ENDPOINT;

        // Now, fill in the home specific information.
        wrapper.beanId = home.ivStatelessId;
        wrapper.bmd = bmd;
        wrapper.methodInfos = bmd.wsEndpointMethodInfos;
        wrapper.methodNames = bmd.wsEndpointMethodNames;
        wrapper.isolationAttrs = null; // not used for EJB 2.x
        wrapper.ivPmiBean = home.pmiBean;

        if (isTraceOn && tc.isEntryEnabled())
            Tr.exit(tc, "createWebServiceEndpointManager : " + wrapper);

        return wrapper;
    }
public WSEJBEndpointManager createWebServiceEndpointManager ( J2EEName j2eeName , Class < ? > provider , Method [ ] methods ) throws EJBException , EJBConfigurationException { final boolean isTraceOn = TraceComponent . isAnyTracingEnabled ( ) ; if ( isTraceOn && tc . isEntryEnabled ( ) ) Tr . entry ( tc , "createWebServiceEndpointManager : " + j2eeName , new Object [ ] { provider , methods } ) ; EJSHome home = ( EJSHome ) homeOfHomes . getHome ( j2eeName ) ; if ( home == null ) { if ( isTraceOn && tc . isEntryEnabled ( ) ) Tr . exit ( tc , "createWebServiceEndpointManager could not find home for : " + j2eeName ) ; throw ExceptionUtil . EJBException ( "Unable to find EJB component: " + j2eeName , null ) ; } BeanMetaData bmd = home . beanMetaData ; Method [ ] endpointMethods = methods ; synchronized ( bmd ) { if ( ! bmd . ivWebServiceEndpointCreated ) { if ( provider != null ) { if ( bmd . webserviceEndpointInterfaceClass != null ) { Tr . error ( tc , "WS_ENDPOINT_PROVIDER_CONFLICT_CNTR0176E" , new Object [ ] { bmd . webserviceEndpointInterfaceClass . getName ( ) , bmd . j2eeName . getComponent ( ) , bmd . j2eeName . getModule ( ) , bmd . j2eeName . getApplication ( ) } ) ; throw new EJBConfigurationException ( "Web Service Provider interface conflicts with the " + "configured Web Service Endpoint interface " + bmd . webserviceEndpointInterfaceClass . getName ( ) + " for the " + bmd . j2eeName . getComponent ( ) + " bean in the " + bmd . j2eeName . getModule ( ) + " module of the " + bmd . j2eeName . getApplication ( ) + " application." ) ; } endpointMethods = provider . getMethods ( ) ; if ( isTraceOn && tc . isDebugEnabled ( ) ) Tr . debug ( tc , "provider methods : " , ( Object [ ] ) endpointMethods ) ; } boolean hasAroundInvoke = WSEJBWrapper . resolveWebServiceEndpointMethods ( bmd , endpointMethods ) ; if ( hasAroundInvoke ) { try { bmd . ivWebServiceEndpointProxyClass = JITDeploy . generateWSEJBProxy ( bmd . classLoader , bmd . ivWebServiceEndpointProxyName , provider , endpointMethods , bmd . wsEndpointMethodInfos , bmd . enterpriseBeanClassName , bmd . j2eeName . toString ( ) , getEJBRuntime ( ) . getClassDefiner ( ) ) ; } catch ( ClassNotFoundException ex ) { Tr . error ( tc , "WS_EJBPROXY_FAILURE_CNTR0177E" , new Object [ ] { bmd . j2eeName . getComponent ( ) , bmd . j2eeName . getModule ( ) , bmd . j2eeName . getApplication ( ) , ex } ) ; throw ExceptionUtil . EJBException ( "Failure occurred attempting to create a Web service " + "endpoint proxy for the " + bmd . j2eeName . getComponent ( ) + " bean in the " + bmd . j2eeName . getModule ( ) + " module of the " + bmd . j2eeName . getApplication ( ) + " application." , ex ) ; } } bmd . ivWebServiceEndpointCreated = true ; bmd . dump ( ) ; } } WSEJBWrapper wrapper = new WSEJBWrapper ( ) ; wrapper . container = this ; wrapper . wrapperManager = wrapperManager ; wrapper . ivCommon = null ; wrapper . isManagedWrapper = false ; wrapper . ivInterface = WrapperInterface . SERVICE_ENDPOINT ; wrapper . beanId = home . ivStatelessId ; wrapper . bmd = bmd ; wrapper . methodInfos = bmd . wsEndpointMethodInfos ; wrapper . methodNames = bmd . wsEndpointMethodNames ; wrapper . isolationAttrs = null ; wrapper . ivPmiBean = home . pmiBean ; if ( isTraceOn && tc . isEntryEnabled ( ) ) Tr . exit ( tc , "createWebServiceEndpointManager : " + wrapper ) ; return wrapper ; }
LI3294-35 d496060