jboss-user
[Arriba] [Todas las Listas]

[jboss-Usuario] [EJB3] - Re: Fallado para adquirir el semáforo de pisci

To: User development <jboss-user@xxxxxxxxxxxxxxx>
Subject: [jboss-Usuario] [EJB3] - Re: Fallado para adquirir el semáforo de piscina en piscina vacía
From: Garry Dias <do-not-reply@xxxxxxxxx>
Date: Mon, 12 Sep 2011 12:00:54 -0400
Auto-submitted: yes
Delivery-date: Mon, 12 Sep 2011 12:02:32 -0400
Envelope-to: traductor@xxxxxxxxxxx
In-reply-to: <2-625367-3-90607-1315426634955-2-625933-3-2104-1315749777362.jivesbs.jivemailuser@http://community.jboss.org>
List-archive: <http://lists.jboss.org/pipermail/jboss-user>
List-help: <mailto:jboss-user-request@lists.jboss.org?subject=help>
List-id: The JBoss User main mailing list <jboss-user.lists.jboss.org>
List-post: <mailto:jboss-user@lists.jboss.org>
List-subscribe: <https://lists.jboss.org/mailman/listinfo/jboss-user>, <mailto:jboss-user-request@lists.jboss.org?subject=subscribe>
List-unsubscribe: <https://lists.jboss.org/mailman/listinfo/jboss-user>, <mailto:jboss-user-request@lists.jboss.org?subject=unsubscribe>
References: <2-625367-3-90607-1315426634955.jivesbs.jivemailuser@http://community.jboss.org> <2-625367-3-90607-1315426634955-2-625768-3-90607-1315579094065.jivesbs.jivemailuser@http://community.jboss.org> <2-625367-3-90607-1315426634955-2-625933-3-2104-1315749777362.jivesbs.jivemailuser@http://community.jboss.org>
Reply-to: The JBoss User main mailing list <jboss-user@xxxxxxxxxxxxxxx>
Sender: jboss-user-bounces@xxxxxxxxxxxxxxx
*Garry *Dias [*http://Comunidad.*jboss.*org/Personas/*garrydias] creó la discusión

"*Re: Fallado para adquirir el semáforo de piscina en piscina vacía"

para ver la discusión, visita: *http://comunidad.*jboss.*org/Mensaje/626083#626083

--------------------------------------------------------------
*Hi *Pai... *thnx Para vuestra respuesta

todo empieza en mi *webservice clase *MyWorkerWS:

interfaz pública *MyWorkerInterface
    #adj *WorkResponse ejecutar(*WorkRequest petición);
}





@*javax.*jws.*WebService(*portName = "*MyWorkerWSPort", nombre = "*MyWorker", *serviceName = "*MyWorker")
clase pública *MyWorkerWS extiende *SpringSupport implementa *MyWorkerInterface

    @#unknown{^*javax.*jws.*WebMethod(*operationName = "Ejecuta")
    @*javax.*jws.Jabón.*SOAPBinding(*parameterStyle = *ParameterStyle.*BARE)
    @*javax.*jws.*WebResult(Nombre = "*workResponse", *partName = "*workResponse", *targetNamespace = "*http://*ws.Laborable.Mi.*com/&*quot;)
    Público *WorkResponse ejecutar(
        @*javax.*jws.*WebParam(Modo = de modo.DENTRO, trabajo = "de nombre", *partName = "trabajo") 
        *WorkRequest petición)

        #nom *int *startingDepth = NDC.*getDepth();
        *WorkResponse Respuesta = *null;
        prueba
            //#adv yo´*m mirando arriba de mi alubia *via Primavera
            *MyWorkerInterface trabajador = (*MyWorkerInterface) *super.*getBeanFactory().*getBean("*myWorkerBean");
            
            //A veces actúa alrededor de 300*ms y a veces más que 20000*ms
            trabajador = de respuesta.Ejecuta(petición);            
        } coge (*org.*springframework.Alubias.*BeansException *beansException)
            #unknown{^*LoggerHelper.Error("error de Aplicación", *beansException);
        } coge (*EJBException *ejbException)

            #adj_nom #final *errorMessage = 
                *org.*apache.*commons.*lang.*StringUtils.*defaultString(*ejbException.*getMessage());
                
            Si (*errorMessage.*startsWith("Fallado para adquirir el semáforo de piscina"))
                // #unknown{^*MyWorkerInterface.Ejecuta(*WorkRequest) el método es retrasado para más que 20000*ms.
                // Cuándo el ejecutar espaldas de método a su ejecución normal cronometran este *EJBException todavía está pasando
                // pero la piscina parece para ser vacío
                *LoggerHelper.Error("la Piscina es llena porque *MyWorkerInterface.Ejecuta(*WorkRequest) está" tomando más tiempo que normal de actuar.", *ejbException);
            } 
            más
                #unknown{^*LoggerHelper.Error("*ejb error", *ejbException);
            }
        }
        respuesta de regreso;
    }
}


clase de apoyo de la Primavera


clase pública *SpringSupport

    #verbcj final *org.*apache.*log4*j.*Logger *logger = 
        *org.*apache.*log4*j.*Logger.*getLogger(Esto.*getClass());

    @*javax.*annotation.El Recurso
    privado *javax.*xml.*ws.*WebServiceContext *webServiceContext;
    
    Privado *org.*springframework.Contexto.*ApplicationContext *cachedApplicationContext;

    Protegido *org.*springframework.Alubias.Fábrica.*BeanFactory *getBeanFactory()
        #Cnj (*cachedApplicationContext != *null)
            #Nom *cachedApplicationContext;
        }
        si (*webServiceContext == *null)
            #nom *null;
        }
        *javax.*xml.*ws.*handler.*MessageContext *messageContext = *webServiceContext.*getMessageContext();
        Si (*messageContext == *null)
            #nom *null;
        }
        *javax.*servlet.*ServletContext *servletContext = 
            (*javax.*servlet.*ServletContext) *messageContext.Consigue(
                    *javax.*xml.*ws.*handler.*MessageContext.*SERVLET_CONTEXTO);

        si (*servletContext == *null)
            #nom *null;
        }
        esto.*cachedApplicationContext = 
            (*org.*springframework.Contexto.*ApplicationContext) *servletContext
            .*getAttribute(
                    *org.*springframework.Web.Contexto.*WebApplicationContext.CONTEXTO_de APLICACIÓN_de WEB_de RAÍZ_ATRIBUTO);
        regreso *cachedApplicationContext;
    }
}


clase de Alubia


@*Clustered
@Local(*MyWorkerInterface.Clase)
@*Stateless(nombre = "*MyWorkerBean")
@*Interceptors(valor #unknown{^*SpringBeanAutowiringInterceptor.Clase, *LoggingInterceptor.Clase })
@*RolesAllowed(cliente = "de valor")
@Piscina(valor = *PoolDefaults.IMPLEMENTACIÓN_de PISCINA_*STRICTMAX, *maxSize = 30)
clase pública *MyWorkerBean implementa *MyWorkerInterface

    @#unknown{^*RolesAllowed("cliente")
    @*TransactionAttribute(*TransactionAttributeType.NO_APOYADO)
    público *WorkResponse ejecutar(final *WorkRequest *workRequest)

        #adj_nom_nom de inicio = largo.*currentTimeMillis();
        
        *WorkExchange Intercambia = nuevo *WorkExchange();
        intercambio.*setWorkRequest(*workRequest);
        
        // Un *JMSProducer es creado para enviar intercambio a un *JMS *queue
        // Un *MDB la clase recupera dato de un tercer partido *webservice utilizando *WorkExchange.*workRequest Campos
        // Un *JMSConsumer es creado para recuperar objeto de intercambio cuándo *MDB fines 
        
        *LoggerUtil.*info("Tiempo de operación: " + (Sistema.*currentTimeMillis() - Inicio));
        
        // *WorkExchange.*workResopnse Ha sido puesto por *MDB
        *WorkResopnse respuesta = *exhange.*getWorkResponse();
        
        Respuesta de regreso;
    }
}


Mirada arriba de *settings en Primavera *xml


     <*jee:local-*slsb *lookup-casa-encima-*startup="falso" *id="*myWorkerBean" empresarial-interfaz="*MyWorkerInterface"
        *jndi-nombre="*MyWorkerBean/local" />
--------------------------------------------------------------

Respuesta a este mensaje por ir a Comunidad
[*http://comunidad.*jboss.*org/Mensaje/626083#626083]

Empieza una discusión nueva en *EJB3 en Comunidad
[*http://comunidad.*jboss.*org/Escoge-contenedor!Entrada.*jspa?*contentType=1&*containerType=14&contenedor=2029]

Garry Dias [http://community.jboss.org/people/garrydias] created the discussion

"Re: Failed to acquire the pool semaphore in empty pool"

To view the discussion, visit: http://community.jboss.org/message/626083#626083

--------------------------------------------------------------
Hi Pai... thnx for your reply

everything starts in my webservice class MyWorkerWS:

public interface MyWorkerInterface
{
    public WorkResponse execute(WorkRequest request);
}





@javax.jws.WebService(portName = "MyWorkerWSPort", name = "MyWorker", serviceName = "MyWorker")
public class MyWorkerWS extends SpringSupport implements MyWorkerInterface {

    @javax.jws.WebMethod(operationName = "execute")
    @javax.jws.soap.SOAPBinding(parameterStyle = ParameterStyle.BARE)
    @javax.jws.WebResult(name = "workResponse", partName = "workResponse", targetNamespace = "http://ws.working.my.com/";)
    public WorkResponse execute(
        @javax.jws.WebParam(mode = Mode.IN, name = "work", partName = "work") 
        WorkRequest request) 
    {

        final int startingDepth = NDC.getDepth();
        WorkResponse response = null;
        try {
            //Here I´m looking up my bean via Spring
            MyWorkerInterface worker = (MyWorkerInterface) super.getBeanFactory().getBean("myWorkerBean");
            
            //Sometimes it performs around 300ms and sometimes more than 20000ms
            response = worker.execute(request);            
        } catch (org.springframework.beans.BeansException beansException) {
            LoggerHelper.error("Application error", beansException);
        } catch (EJBException ejbException) {

            final String errorMessage = 
                org.apache.commons.lang.StringUtils.defaultString(ejbException.getMessage());
                
            if (errorMessage.startsWith("Failed to acquire the pool semaphore")) {
                // MyWorkerInterface.execute(WorkRequest) method is delayed for more than 20000ms.
                // When the execute method backs to its normal execution time this EJBException is still happening
                // but the pool seems to be empty
                LoggerHelper.error("Pool is full because MyWorkerInterface.execute(WorkRequest) is" +
                        "taking more time than normal to perform.", ejbException);
            } 
            else {
                LoggerHelper.error("ejb error", ejbException);
            }
        }
        return response;
    }
}


Spring support class


public class SpringSupport {

    protected final org.apache.log4j.Logger logger = 
        org.apache.log4j.Logger.getLogger(this.getClass());

    @javax.annotation.Resource
    private javax.xml.ws.WebServiceContext webServiceContext;
    
    private org.springframework.context.ApplicationContext cachedApplicationContext;

    protected org.springframework.beans.factory.BeanFactory getBeanFactory() {
        if (cachedApplicationContext != null) {
            return cachedApplicationContext;
        }
        if (webServiceContext == null) {
            return null;
        }
        javax.xml.ws.handler.MessageContext messageContext = webServiceContext.getMessageContext();
        if (messageContext == null) {
            return null;
        }
        javax.servlet.ServletContext servletContext = 
            (javax.servlet.ServletContext) messageContext.get(
                    javax.xml.ws.handler.MessageContext.SERVLET_CONTEXT);

        if (servletContext == null) {
            return null;
        }
        this.cachedApplicationContext = 
            (org.springframework.context.ApplicationContext) servletContext
            .getAttribute(
                    org.springframework.web.context.WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
        return cachedApplicationContext;
    }
}


Bean class


@Clustered
@Local(MyWorkerInterface.class)
@Stateless(name = "MyWorkerBean")
@Interceptors(value = { SpringBeanAutowiringInterceptor.class, LoggingInterceptor.class })
@RolesAllowed(value = "client")
@Pool(value = PoolDefaults.POOL_IMPLEMENTATION_STRICTMAX, maxSize = 30)
public class MyWorkerBean implements MyWorkerInterface {

    @RolesAllowed("client")
    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
    public WorkResponse execute(final WorkRequest workRequest) {

        long start = System.currentTimeMillis();
        
        WorkExchange exchange = new WorkExchange();
        exchange.setWorkRequest(workRequest);
        
        // A JMSProducer is created to send exchange to a JMS queue
        // A MDB class retrieve data from a third party webservice using WorkExchange.workRequest fields
        // A JMSConsumer is created to retrieve exchange object when MDB ends 
        
        LoggerUtil.info("Operation time: " + (System.currentTimeMillis() - start));
        
        // WorkExchange.workResopnse have been set by MDB
        WorkResopnse response = exhange.getWorkResponse();
        
        return response;
    }
}


Look up settings in Spring xml


     <jee:local-slsb lookup-home-on-startup="false" id="myWorkerBean" business-interface="MyWorkerInterface"
        jndi-name="MyWorkerBean/local" />
--------------------------------------------------------------

Reply to this message by going to Community
[http://community.jboss.org/message/626083#626083]

Start a new discussion in EJB3 at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2029]

_______________________________________________
*jboss-Usuario *mailing lista
*jboss-user@xxxxxxxxxxxxxxx
*https://listas.*jboss.*org/*mailman/*listinfo/*jboss-Usuario
_______________________________________________
jboss-user mailing list
jboss-user@xxxxxxxxxxxxxxx
https://lists.jboss.org/mailman/listinfo/jboss-user
<Anterior por Tema] Tema Actual [Siguiente por Tema>