Execute queue for EJB
Hi,
We are working with weblogic 8.1. We have configured one Execute Queue for our
EJB, and modified deployment desriptor weblogic-ejb-jar.xml using this queue.
In our application we are using scheduler program(Quartz) to invoke this EJB,
but the calls are not going in to this Execute queue, instead it goes to the default
queue.
But when i call EJB method from other client(different VM), calls goes through
the execute queue.
For your information, we haven't modified <enable-call-by-reference> tag, which
means this option is set to default value false.
Please let me know if i am missing something?
Regards
Naresh
Hi,
To assign an EJB object to a configured execute queue, use the new dispatch-policy element in weblogic-ejb-jar.xml.
Ex : dispatch-policy>queue_name</dispatch-policy>
If no dispatch-policy is specified, or the specified dispatch-policy refers to a nonexistent server execute thread pool, then the server's default execute thread pool is used instead.
Go through the following links and find the information on this issue.
http://e-docs.bea.com/wls/docs81/perform/AppTuning.html#1104273
http://e-docs.bea.com/wls/docs81/ejb/DDreference-ejb-jar.html#dispatch-policy
Regards
Anilkumar kari
Similar Messages
-
Problem in assigning the execute queue to EJB.
I have a enterprise application in that a have many web application.I want to assign
the low priority threads to one web application e.g. "A". The "A" is using one
ejb to execute the some task.
I am making a execute queue with name let "TestQueue"
and assigning it to my servlet thru these entries in
weblogic-ejb-jar :-
<weblogic-enterprise-bean>
<ejb-name>InferenceEngine</ejb-name>
<reference-descriptor>
<resource-description>
<res-ref-name>jdbc/MyDB</res-ref-name>
<jndi-name>jdbc/MyDB</jndi-name>
</resource-description>
</reference-descriptor>
<jndi-name>ejb/InferenceEngine</jndi-name>
<dispatch-policy>TestQueue</dispatch-policy>
</weblogic-enterprise-bean>
Here is my code of config.xml file for execute queue.
<?xml version="1.0" encoding="UTF-8"?>
<Domain ConfigurationVersion="8.1.0.0" Name="ACM_1">
<Server ListenAddress="" ListenPort="8003" Name="ACM"
NativeIOEnabled="true" ReliableDeliveryPolicy="RMDefaultPolicy" ServerVersion="8.1.1.0">
<SSL Enabled="false" HostnameVerificationIgnored="false"
IdentityAndTrustLocations="KeyStores" Name="ACM"/>
<ExecuteQueue Name="TestQueue" ThreadPriority="1"/>
</Server>
I tried the ejbc command line argument -dispatchPolicy TestQueue also. But it
is also not sending request to my TestQueue.One thing to note is the execute queue is chosen when the request enters
the server. So if a webapp is assigned to Queue-1 and an ejb to
Queue-2, and the webapp calls the ejb, the request will remain on queue-1.
-- Rob
Sunil Kumar Mehta wrote:
I have a enterprise application in that a have many web application.I want to assign
the low priority threads to one web application e.g. "A". The "A" is using one
ejb to execute the some task.
I am making a execute queue with name let "TestQueue"
and assigning it to my servlet thru these entries in
weblogic-ejb-jar :-
<weblogic-enterprise-bean>
<ejb-name>InferenceEngine</ejb-name>
<reference-descriptor>
<resource-description>
<res-ref-name>jdbc/MyDB</res-ref-name>
<jndi-name>jdbc/MyDB</jndi-name>
</resource-description>
</reference-descriptor>
<jndi-name>ejb/InferenceEngine</jndi-name>
<dispatch-policy>TestQueue</dispatch-policy>
</weblogic-enterprise-bean>
Here is my code of config.xml file for execute queue.
<?xml version="1.0" encoding="UTF-8"?>
<Domain ConfigurationVersion="8.1.0.0" Name="ACM_1">
<Server ListenAddress="" ListenPort="8003" Name="ACM"
NativeIOEnabled="true" ReliableDeliveryPolicy="RMDefaultPolicy" ServerVersion="8.1.1.0">
<SSL Enabled="false" HostnameVerificationIgnored="false"
IdentityAndTrustLocations="KeyStores" Name="ACM"/>
<ExecuteQueue Name="TestQueue" ThreadPriority="1"/>
</Server>
I tried the ejbc command line argument -dispatchPolicy TestQueue also. But it
is also not sending request to my TestQueue. -
How can I tell how long a request has been sitting on an execute queue?
Is it possible to determine (in WL 8.1 and/or 10.3) how long an HTTP request has been sitting on the execute queue before being assigned to a servlet?
Under heavy load, I'm finding that the caller times out by the time the servlet tries to write the response because the request has been waiting on the execute queue for too long. To prevent doing all the work to process the request, I want to be able to see how long the request has been waiting to determine whether it's worth processing the request.
Currently I use the getExecuteThreadTotalCount() method in ExecuteQueueRuntimeMBean and assume that if the count is high, the request has probably been waiting for a while, but getting the actual time on the queue would be much better.
Thanks.Further investigation and a bunch of speed tests later, I'm even more puzzled. Between 7 pm and 9pm this evening, download speed has been consistently at 112kb, except for the 1 in 10 occasions where it hits 1.5mb, for 30 or 40 seconds, before dropping back to 112kb.
Does anyone have any ideas what is going on?
thanks in advance
Ben -
Problem while assigning Servlet to Execute queue
Hi,
We implement a IMS S-CSCF on BEA container 2.2.
A call for us may be several times reentrant. Meaning that for one call we have to handle at least three different dialogs but in major use cases, it will be 6 or 7 for our next deployment.
We are currently facing to bottlenecks problems and BEA support advised me to try to check if assigning servelt to execute queue could improve the preformances.
I just wanted to make a try with one of our servlet but I have an exception java.lang.NoClassDefFoundError: org/jaxen/JaxenException.
Here is what I did:
In web.xml I have:
<web-app>
<distributable/>
<servlet>
<servlet-name>register</servlet-name>
<servlet-class>com.netcentrex.scscf.registrar.RegistrarServlet</servlet-class>
<init-param>
<param-name>wl-dispatch-policy</param-name>
<param-value>REGISTRARQueue</param-value>
</init-param>
<load-on-startup/>
</servlet>
<listener>
<listener-class>com.bea.wcp.sip.engine.server.ContextEventHook</listener-class>
</listener>
</web-app>
In sip.xml I have:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sip-app
PUBLIC "-//Java Community Process//DTD SIP Application 1.0//EN"
"http://www.jcp.org/dtd/sip-app_1_0.dtd">
<sip-app>
<display-name>SIP Servlet based Registrar</display-name>
<distributable/>
<context-param>
<param-name>usc.configFile</param-name>
<param-value>/etc/neotip/usc.ini</param-value>
</context-param>
<context-param>
<param-name>icscf.configFile</param-name>
<param-value>/etc/neotip/icscf.ini</param-value>
</context-param>
<context-param>
<param-name>usc.dnsSrvFile</param-name>
<param-value>/etc/neotip/uscDnsSrv.cache</param-value>
</context-param>
<listener>
<listener-class>com.netcentrex.scscf.session.SessionServlet</listener-class>
</listener>
<servlet>
<servlet-name>register</servlet-name>
<servlet-class>com.netcentrex.scscf.registrar.RegistrarServlet</servlet-class>
<load-on-startup/>
</servlet>
<servlet>
<servlet-name>session</servlet-name>
<servlet-class>com.netcentrex.scscf.session.SessionServlet</servlet-class>
<load-on-startup/>
</servlet>
<servlet>
<servlet-name>route</servlet-name>
<servlet-class>com.netcentrex.scscf.fork.RouteServlet</servlet-class>
<load-on-startup/>
</servlet>
<servlet>
<servlet-name>icscf</servlet-name>
<servlet-class>com.netcentrex.scscf.embeddedI.IEmbeddedServlet</servlet-class>
<load-on-startup/>
</servlet>
<servlet-mapping>
<servlet-name>register</servlet-name>
<pattern>
<equal>
<var>request.method</var>
<value>REGISTER</value>
</equal>
</pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>session</servlet-name>
<pattern>
<and>
<not>
<equal>
<var>request.method</var>
<value>REGISTER</value>
</equal>
</not>
<not>
<exists>
<var>request.uri.param.uscroute</var>
</exists>
</not>
<not>
<exists>
<var>request.uri.param.icscfroute</var>
</exists>
</not>
</and>
</pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>route</servlet-name>
<pattern>
<and>
<not>
<equal>
<var>request.method</var>
<value>REGISTER</value>
</equal>
</not>
<exists>
<var>request.uri.param.uscroute</var>
</exists>
</and>
</pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>icscf</servlet-name>
<pattern>
<and>
<not>
<equal>
<var>request.method</var>
<value>REGISTER</value>
</equal>
</not>
<exists>
<var>request.uri.param.icscfroute</var>
</exists>
</and>
</pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
</sip-app>
In msi-config.xml, we have:
<Server Cluster="BEA_ENGINE_TIER_CLUST" EnabledForDomainLog="false"
ListenAddress="192.168.150.26" ListenPort="8001" Name="engine1"
NativeIOEnabled="true" NetworkAccessPoints="sipchannel"
ServerVersion="8.1.5.0" StdoutDebugEnabled="true"
StdoutEnabled="true" StdoutSeverityLevel="64">
<NetworkAccessPoint ListenAddress="192.168.150.34"
ListenPort="5060" Name="sipchannel" Protocol="sip"
PublicAddress="192.168.150.34" SourcePorts="41000-42000"/>
<SSL Enabled="false" IdentityAndTrustLocations="KeyStores" Name="engine1"/>
<Log FileCount="10" FileMinSize="60000" Name="engine1" NumberOfFilesLimited="true"/>
<ExecuteQueue Name="sip.transport.Default" QueueLength="2048" ThreadCount="25"/>
<ExecuteQueue Name="REGISTRARQueue" QueueLength="2048" ThreadCount="25"/>
<ExecuteQueue Name="sip.transport.Default" QueueLength="2048" ThreadCount="25"/>
<ExecuteQueue Name="weblogic.kernel.Default"/>
<ExecuteQueue Name="sip.timer.Default" QueueLength="2048" ThreadCount="25"/>
<ExecuteQueue Name="sip.tracing.local" QueueLength="1024"
ThreadCount="1" ThreadsMaximum="1" ThreadsMinimum="1"/>
<ExecuteQueue Name="sip.tracing.domain" QueueLength="1024"
ThreadCount="1" ThreadsMaximum="1" ThreadsMinimum="1"/>
</Server>
Then when I launch a SIP REGISTRATION operation I get the following trace:
2007-05-30 17:37:03,649 ERROR RegistrarServlet [ExecuteThread: '23' for queue: 'sip.transport.Default'] : Error while processing request: REGISTER sip:netcentrexbench.net SIP/2.0
P-Charging-Vector: icid-value=AyretyU0dm+1970294253=0465138796
P-Access-Network-Info: ADSL;dsl-location="netcentrexbench.net;1.2.3.4"
CSeq: 2 REGISTER
Call-ID: [email protected]
Supported: path
Via: SIP/2.0/UDP 192.168.254.56:5063;branch=z9hG4bK-19606-1-2
From: dench0 <sip:[email protected]>;tag=1
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
To: dench0 <sip:[email protected]>
Authorization: Digest username="dench0",realm="netcentrexbench.net",cnonce="6b8b4567",nc=00000001,qop=auth,uri="sip:192.168.150.34:5060",nonce="NQei3RIBAAA=le+kkCcrZcahXxQ7M6r7dw==",response="b824a93822b267ddfaa07f4039d99d95",algorithm=MD5
Content-Length: 0
Contact: sip:[email protected]:5063
User-Agent: LYNX_BENCH
Path: <sip:[email protected]:5063;lr>
Require: path
Expires: 36000
Max-Forwards: 70
java.lang.NoClassDefFoundError: org/jaxen/JaxenException
at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
My first doubt is that I think I should get "ERROR RegistrarServlet [ExecuteThread: '23' for queue: 'REGISTRARQueue'] " instead of "ERROR RegistrarServlet [ExecuteThread: '23' for queue: 'sip.transport.Default'] "
First question: did I miss something or did something wrong in the configuration?
Second question: is it really possible to assign a single servlet (from an application containing many other servlets) to a dediacted execute queue?
Third question: any help is welcome :-)
Thanks in advance,
Lionel,At teh end I found the basic :-) problem on my exception but anyway , the used execute queue for REGISTER is always sip.transport.default
Help on this point is welcome!
Thanks -
Specifying multiple JSP's in Execute Queue
Hi
Bea's documentation says that you can specify the execute queue for a
perticular JSP as follows:
<servlet>
<servlet-name>MainServlet</servlet-name>
<jsp-file>/myapplication/critical.jsp</jsp-file>
<init-param>
<param-name>wl-dispatch-policy</param-name>
<param-value>CriticalAppQueue</param-value>
</init-param>
</servlet>
Am wondering if there is a way to specify the execute queue for a
whole set of JSP's. Was trying wildcards in the jsp-file tag but
havent yet had success. I would like to tell weblogic to use the queue
I specify for all jsp's in a certain directory and I dont want to have
to create <servlet> tags for each one since there are many!.
If anyone has solved this or has any suggestions, please let me know.
ThanksDid you try in SM58( in the menu edit / Execute LUW's ? There send you to screen " Execute Calls Not Yet Executed" where you can select some parameters as excution date, destination user name..... and other options with check boxes.
I have used it and is good -
Creating Execute Queue through WLConfig ANT tasks
We are planning to create a new Execute Queue for a existing server in weblogic 8.1. When we create a new execute queue through the web admin console it add the following line within the Server tag in config.xml.
<?xml version="1.0" encoding="UTF-8"?>
<Domain Name="weblogicdomain">
<Server ListenAddress="" ListenPort="6110" Name="servername">
<ExecuteQueue Name="FileDownloadsExecuteQueue" ThreadCount="1"/>
</Server>
....Other resources....
</Domain>
Now we have to create this execute queue NOT through the web admin console but through wlconfig ANT tasks. How should we create this? There are samples ANT tasks to add a resource (JDBC connection pool etc) directly within the Domain tag of the config.xml but our requirement is to add a new element (ExecuteQueue) within the existing server tag. As the server is already created we cannot create server mbean and nest it with one more create of execute queue. We have to attach the new execute queue to the current existing server.
Can we set a new element (not a attribute) to the server by quering or any other method?
Thanks.I haven't tried this with wlconfig, but I was able to accomplish it by invoking weblogic.Admin from the <java> task:
<!-- Create the ExecuteQueue -->
<java classname="weblogic.Admin" fork="true">
<arg line="-url ${deploy.server.name}:${deploy.server.port}"/>
<arg line="-username ${deploy.username}"/>
<arg line="-password ${deploy.password}"/>
<arg value="CREATE"/>
<arg line="-mbean portal:Type=ExecuteQueue,Name=newRenderQueue,Server=${deploy.target}"/>
<classpath>
<pathelement location="${weblogic.home.dir}/server/lib/weblogic.jar"/>
</classpath>
</java>
<!-- Set the ThreadCount -->
<java classname="weblogic.Admin" fork="true">
<arg line="-url ${deploy.server.name}:${deploy.server.port}"/>
<arg line="-username ${deploy.username}"/>
<arg line="-password ${deploy.password}"/>
<arg value="SET"/>
<arg line="-mbean portal:Type=ExecuteQueue,Name=newRenderQueue,Server=${deploy.target}"/>
<arg line="-property ThreadCount 5"/>
<classpath>
<pathelement location="${weblogic.home.dir}/server/lib/weblogic.jar"/>
</classpath>
</java>
Hope that helps,
George -
6.0 doc in the "Known Issues" has the following:
039575
If your servlet makes an HTTP connection back to the same server there is the
possibility of deadlock under load. To work around the problem, use a separate
execute queue for the servlet that returns the DTD.
My question is: is the process of setting up servlets etc to use separate execute
queues documented somewhere?
TIA
Dimitri
In fact, it is (sort of) documented in 6.0sp1 (for some reason console
didnt use this in 6.0):
Thread dump shows
2 threads for queue: '__weblogic_admin_html_queue'"
and
2 threads for queue: '__weblogic_admin_rmi_queue'"
looking at the console.war/WEB-INF/web.xml shows how console servlets are
configured to use separate execute queue:
<servlet>
<servlet-name>...servlet name...</servlet-name>
<servlet-class>...servlet class...</servlet-class>
<init-param>
<param-name>wl-dispatch-policy</param-name>
<param-value>__weblogic_admin_html_queue</param-value>
</init-param>
</servlet>
For RMI (as rmi_queue name suggests) stuff looking at things generated
by weblogic.ejbc shows that dispatchpolicy is mentioned in the .ser'ialzed
deployment descriptor.
Cameron Purdy <[email protected]> wrote:
> (I thought you asked this before.) I haven't seen it doc'd yet, and they
> said it might not be 'til the next release. I've been checking the "dima"
> web site for doc on it, but haven't found any yet ;-).
> --
> Cameron Purdy
> Tangosol, Inc.
> http://www.tangosol.com
> +1.617.623.5782
> WebLogic Consulting Available
> "Dimitri Rakitine" <[email protected]> wrote in message
> news:[email protected]...
>> 6.0 doc in the "Known Issues" has the following:
>>
>> 039575
>> If your servlet makes an HTTP connection back to the same server there is
> the
>> possibility of deadlock under load. To work around the problem, use a
> separate
>> execute queue for the servlet that returns the DTD.
>>
>> My question is: is the process of setting up servlets etc to use separate
> execute
>> queues documented somewhere?
>>
>> TIA
>> Dimitri
>>
Dimitri
-
Thread pools for execute queues
We've set up thread pools for several execute queues dedicated to high-load servlets
in our application. Once in a while, we get into a condition in which none of
these threads are available and then the threads never become available - we have
to restart the server.
I realize that this is a pretty generic description of the problem :-) but I wonder
if anyone else has encountered this and has an idea what might be causing it ?
Right now I am guessing that something in our code causes a resource contention
that eventually deadlocks all the threads. But that is just a guess.Ethan,
"Ethan Allen" <[email protected]> wrote in message
news:3e0220a1$[email protected]..
Thanks, Dimitri and Slava !
I will do this and learn a little emore ...FYI, there is a web site dedicated to weblogic documentation -
http://e-docs.bea.com/
Pick your server version, go to "Search", type "thread dump".
Regards,
Slava Imeshev
>
ethan
"Slava Imeshev" <[email protected]> wrote:
Hi Ethan,
For windows press <Ctrl>+<Break> in the server shell window,
for *nix send kill -3 {server PID}.
Regards,
Slava Imeshev
"Ethan Allen" <[email protected]> wrote in message
news:3e020fb4$[email protected]..
Thanks for your reply, Dimitri.
We have not looked at thread dumps. How may we do this ?
Ethan
"Dimitri I. Rakitine" <[email protected]> wrote:
Did you try looking at thread dumps when this happens ?
Ethan Allen <[email protected]> wrote:
We've set up thread pools for several execute queues dedicated to
high-load
servlets
in our application. Once in a while, we get into a condition in
which
none of
these threads are available and then the threads never become
available
- we have
to restart the server.
I realize that this is a pretty generic description of the problem:-) but I wonder
if anyone else has encountered this and has an idea what might be
causing
it ?
Right now I am guessing that something in our code causes a
resource
contention
that eventually deadlocks all the threads. But that is just a
guess.
>>>>
Dimitri -
Run my web service in custom Execute Queue
i developed my web service using the WorkShop 8.1 Sp3
I created a custom execute queuem in my weblogic server
Can anyone guide how i can instruct my web serivce to run in my custom execute queue.
Always it's going to the Default execute queue.
Found for servlet and jsp the dispatch policy can be specified in the deployment descriptor.
But how i can specify for the web service ?
thanksHi Senthil
If you are still in Sp3 then the solution will NOT work.
You cannot edit the web.xml and get it working.
Sp4 is better compared to sp3 and you should be able to run your application on sp4 without any changes.
Below is some details on how it works and why you cannot use it on Sp3:
If you can move to Sp4, yes you can follow the docs provided by Raj (http://e-docs.bea.com/workshop/docs81/doc/en/workshop/reference/configfiles/con_web_xml_ConfigurationFile.html)and configure the dispath-policy in web.xml
After the build the information in web.xml will go into the EJB xml descriptor weblogic-ejb-jar.xml of the workshop internal EJB (SyncDispatcherBean)
Your weblogic-ejb-jar.xml for the SyncDispatcherBean will have
<dispatch-policy>
weblogic.jws.sync.dispatch
</dispatch-policy>
However if you remain on sp3, this config put into the web.xml will not work as the functionality was introduced only in sp4.
For Sp3, BEA does not support the manual editing of the weblogic-ejb-jar.xml of the SyncDispatcherBean as these get regenerated everytime on build.
Thanks,
Vimala -
Does mapping to JNDI for ejb-refs have a performance impact?
Does mapping to JNDI names for ejb-refs have a performance impact for
WLS6.1?
In the ejb-jar.xml deployment descriptor, you can define an ejb reference as
follows:
<ejb-ref>
<ejb-ref-name>ejb/AccountHomeRemote</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<home>com.package structure.AccountHomeRemote</home>
<remote>com.package structure.AccountRemote</remote>
<!-- <ejb-link>AccountBean</ejb-link>-->
</ejb-ref>
Now, optionally, you can use the ejb-link element - or - you can, in the
weblogic DD, specify a JNDI name that the ejb-ref maps to.
Using a JNDI name buys you some flexibility. If, for some reason, the jar is
divided, you dont have to convert ejb-link's to JNDI names. The question is:
Is there a performance cost in doing this?
CheersHi Aashish,
Thanks for your quick reply. it was helpful, but i am not using RFC's. Correct me if i am wrong, but i have explained the scenarios in detail below.
Scenario 1. Synchronous
1) PI Picks file from a common folder.
2) PI does a data mapping and sends the data to ECC.
3) ECC contains an inbound interface which receives the data and in which abap proxy code is written.
4) The abap proxy code executes a function module and sends the response as an internal table back to PI.
5) PI receives the response and places it in a text/csv file and places it back to another folder.
I assume that the above would be possible only using BPM. What i understand is that in order for an interface to receive and send data, abstract mappings are to be used, and for this BPM is required. We do not have any conversions etc. its just a simple matter of receiving an internal table from ECC and creating a file to place in the folder.
I also understand that BPM could have bottlenecks due to queue and cache issues, messages might be pending, or lost etc.
Scenario 2. Asynchronous
1) PI Picks file from a common folder.
2) PI does a data mapping and sends the data to ECC.
3) ECC contains an inbound interface which receives the data and in which abap proxy code is written.
4) ABAP Proxy code executes the same function module and calls a seperate outbound interface and passes the values to it. This would be used in sending the response back.
5) PI receives the response from the second interface and places it in a text/csv file and places it back to another folder.
I would like to know which would be the better approach. Documentation/references to support your claims would be much appreciated.
Cheers,
Mz -
Different execute queues with different thread priorities
We are running WebLogic 6.1, SP2 on Solaris 2.8 and I have a question related to the
use of Execute queues
I'm aware that the administration console servlets, and the rest of requests given
to the server run in separate execution queues each with their own pool of threads.
There is an <executequeue> element in the config.xml that allows you to change the
parameters of the default execute queue that most requests are handled in.
My question is is it possible to create new execute queues, each with a given number
of threads running at a different priority. Then one could assign a particular WAR
deployment to a queue and hence control the priority that certain requests run at
governed by the deployment that received the initial request.
Essentially the problem that I'm trying to address is that I have a JAR with MDBs
in it. I also have JARs with Entity and Session EJBs and WARs. They are all using
the same pool of threads to execute. I want to be able to throttle the MDBs as they
receive messages so they don't take over the machine and interfere with interactive
use. Now I can limit the number of MDBs in the MDB pool, but then if the machine
is not being used by users, then the machine resources are wasted only allowing one
MDB to be active at a time when there are a lot of messages in the queue.
What I want to be able to do is to have as many MDBs run as I can, up to a certain
limit, say 15 for example, but not to pull from the same thread pool/execute queue
as the requests for URLs in the WAR. Also I want the MDB threads to run at a much
lower priority and always give preference to interactive requests.
So interactive threads will always win and grab the processors if interactive use
is high, but if it's not, the MDBs can run instead.
Regs,
PaulHi,
I had a chat with BEA support about my issue. You can create multiple ExecuteQueues
and assign them to servlet definitions in WARs in the web.xml, and with an option
to the EJBC compiler, you can assign a particular class of EJB to an ExecuteQeueue.
For details see http://e-docs.bea.com/wls/docs61/perform/AppTuning.html#1106284
Presumably it's the thread of the initial request that counts, i.e. if a WAR calls
an EJB, then it's the thread in the execute queue of the WAR that will be used right
the way through the request, not that of the EJB being called, assuming they are
both deployed in the same WebLogic instance. If they were in different instances,
you would obviously have a thread from the WAR queue on one instance, and a thread
from the EJB queue on another instance.
If a plain Java command-line client connected directly to an EJB, then it would be
the thread from the ExecuteQueue of the EJB that would get used.
I've been told that MDBs always run in the default queue, so it seems that the way
for me to do what I want is just to create an ExecuteQueue, set the priority of the
threads in this queue to be higher than that of the default queue, and assign this
queue to my WARs. I can leave my EJBs running in the default queue.
Regs,
Paul
"Dimitri I. Rakitine" <[email protected]> wrote:
Don't know about 6.1 (One can find out very easily what the possible config
parameters
are by deploting
http://dima.dhs.org/misc/listMBeans.jsp and
http://dima.dhs.org/misc/showMBean.jsp
abd looking at the XXXConfig mbeans), but in 7.0 there are quite a few
things which
can be tuned in the executequeue config (and priority is one of them. also
interesting
is that it is possible to configure it to increase number of execute threads
when queue
length exceeds some specified threshold) :
QueueLength
Returns the maximum length of this queue.
ThreadPriority
Returns the priority of the threads associated with this queue.
ThreadCount
Returns the number of threads assigned to this queue.
QueueLengthThresholdPercent
Returns the threshold percent for length of this queue, set in QueueLength.
ThreadsIncrease
Returns the number of threads to grow when a queue is within QueueLengthThresholdPercent
of the set QueueLength.
ThreadsMaximum
Returns the maximum number of threads in the pool.
ThreadsMinimum
Returns the minimum number of threads in the pool.
Dimitri -
What are the drawbacks of creating execute queues
Hi thread Gurus
What are the drawbacks of using execute queues. I understand that if queues are not used they stay idle but on solaris the SunOS scheduler will only give active
threads CPU time. what ar the other resources being wasted in the process.
I will appreciate if you can farward me to some documentation on this apart from performance docs on BEA site.
Regards
ParminderHi Parminder,
BEA docs cover tweaking exec queues pretty extensively.
Could you provide more details on what kind of information
you are looking for or which concerns do you have?
Regards,
Slava imeshev
"Parminder" <[email protected]> wrote in message
news:3ef86b40$[email protected]..
Hi thread Gurus
What are the drawbacks of using execute queues. I understand that ifqueues are not used they stay idle but on solaris the SunOS scheduler will
only give active
threads CPU time. what ar the other resources being wasted in the process.
I will appreciate if you can farward me to some documentation on thisapart from performance docs on BEA site.
Regards
Parminder -
Messages waiting in the queue for long time.
Hi Experts,
We are having some Production issue - messages were waiting in the queue for long time and we found the errors in defaultTrace.12.trc file -
Please help how to solve this issue its production and we need to move forward and solve this issue asap.
XI AF API call failed. Module exception: (No information available). Cause Ex
ception: 'JDBC Adapter configuration not initialized: null'.
Thrown:
com.sap.aii.af.service.api.AFException: XI AF API call failed. Module exception: (No information available). Cause Exception: 'JDBC Adapter configuration not
initialized: null'.
at com.sap.aii.af.service.api.AdapterAccess.sendMsg(AdapterAccess.java:214)
at com.sap.aii.af.service.api.AdapterAccess.call(AdapterAccess.java:99)
at com.sap.aii.ibrun.server.lookup.AdapterProxyLocal.process(AdapterProxyLocal.java:87)
at com.sap.aii.ibrun.server.lookup.SystemAccessorInternal.call(SystemAccessorInternal.java:47)
at com.sap.aii.mapping.lookup.SystemAccessor.call(SystemAccessor.java:115)
at com.sony.pi.sp.StoredProceduresHandler.runScalarStoredProcedure(StoredProceduresHandler.java:86)
at com.sap.xi.tf._MyPage_Invoice_SAP_to_Loyalty_MM_.invokePROC_CUSTOMER_DEDUP$(_MyPage_Invoice_SAP_to_Loyalty_MM_.java:1272)
at sun.reflect.GeneratedMethodAccessor384.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at com.sap.aii.mappingtool.tf3.rt.C2CFunctionWrapper.cacheContext(C2CFunctionWrapper.java:91)
at com.sap.aii.mappingtool.tf3.rt.C2CFunctionWrapper.gotoNextContext(C2CFunctionWrapper.java:44)
at com.sap.aii.mappingtool.tf3.rt.Q2QFunctionWrapper.cacheQueue(Q2QFunctionWrapper.java:86)
at com.sap.aii.mappingtool.tf3.rt.Q2QFunctionWrapper.gotoNextContext(Q2QFunctionWrapper.java:41)
at com.sap.aii.mappingtool.tf3.rt.Q2QFunctionWrapper.cacheQueue(Q2QFunctionWrapper.java:74)
at com.sap.aii.mappingtool.tf3.rt.Q2QFunctionWrapper.gotoNextContext(Q2QFunctionWrapper.java:41)
at com.sap.aii.mappingtool.flib3.CollapseContexts.gotoNextValue(CollapseContexts.java:52)
at com.sap.aii.mappingtool.flib3.CollapseContexts.gotoNextContext(CollapseContexts.java:37)
at com.sap.aii.mappingtool.tf3.rt.AResIterator.gotoNextContext(AResIterator.java:37)
at com.sap.aii.mappingtool.tf3.rt.FunctionWrapper.gotoNextContext(FunctionWrapper.java:37)
at com.sap.aii.mappingtool.flib3.IfWithoutElse.gotoNextContext(IfWithoutElse.java:58)
at com.sap.aii.mappingtool.tf3.AMappingProgram.processNode(AMappingProgram.java:266)
at com.sap.aii.mappingtool.tf3.AMappingProgram.processNode(AMappingProgram.java:326)
at com.sap.aii.mappingtool.tf3.AMappingProgram.processNode(AMappingProgram.java:326)
at com.sap.aii.mappingtool.tf3.AMappingProgram.start(AMappingProgram.java:415)
at com.sap.aii.mappingtool.tf3.Transformer.start(Transformer.java:142)
at com.sap.aii.mappingtool.tf3.AMappingProgram.execute(AMappingProgram.java:118)
at com.sap.aii.ibrun.server.mapping.JavaMapping.executeStep(JavaMapping.java:64)
at com.sap.aii.ibrun.server.mapping.Mapping.execute(Mapping.java:92)
at com.sap.aii.ibrun.server.mapping.MappingHandler.run(MappingHandler.java:90)
at com.sap.aii.ibrun.sbeans.mapping.MappingRequestHandler.handleMappingRequest(MappingRequestHandler.java:95)
at com.sap.aii.ibrun.sbeans.mapping.MappingRequestHandler.handleRequest(MappingRequestHandler.java:68)Hi All,
CPACache refresh worked for one day and the same problem repeated again next day, but need to have parmanent fix and should know the root cause of the problem so that the problem can not be repeated again.
Is there any solution other than CPACache refresh and JDBC adapter stop and start to fix the issue.
And also found some entries in SM12 lock entry list during the same schedule time when the messages was triggered and remains for long time. Let me know whether we can delete those locks ?
user PIAFUSER
Lock mode E
and table SXMSPMAST
with lock argument ......
Any suggestions and tips help us alot in fixing this issue.
Thanks in advance
Gary. -
Identifying Execute Queue Threads as Socket Readers
Hi All,
Preface: I am trying to identify at any given instance the percentage of
socket reader threads that are in use - this will help me to identify when
all threads are in use and unable to service user requests. Thus my goal is
to identify threads that are socket readers and whether they are active or
idle.
Through JMX I can obtain an instance of each
weblogic.management.runtime.ExecuteThread, which lists the same information
that you see in the console if you drill down to the thread level, for
example:
mydomain> Servers> myserver> Active Execute Queues> default> Execute Threads
That information includes:
- thread number
- total requests
- last request
- current request
- transaction
- user
- is the thread idle?
Now my question is from this information can you identify which of these
threads are being used as socket readers?
Here are some excerpts from my JMX calls:
Name: ExecuteThread: '0' for queue: 'default'
Execute Queue Runtime Name: default
Current Request: null
Last Request: Http Request: /bookstore/en/authors/showauthors.jsp
User: null
Is Idle?: true
Name: ExecuteThread: '15' for queue: 'default'
Execute Queue Runtime Name:default
Current Request: null
Last Request: Scheduled Trigger
User: null
Is Idle?: true
Name: ExecuteThread: '26' for queue: 'default'
Execute Queue Runtime Name:default
Current Request: null
Last Request: ListenRequest for a new connection on: 'Socket
addr=127.0.0.1,port=2061,localport=7001]'
User: null
Is Idle?: true
Name: ExecuteThread: '59' for queue: 'default'
Execute Queue Runtime Name:default
Current Request: Socket Reader Request
Last Request:
weblogic.transaction.internal.ServerCoordinatorDescriptor$2@138786
User: null
Is Idle?: false
It would appear that the "ListenRequest" last request would identify a
socket reader, only I have 60 threads in my default execute queue with 70%
dedicated to socket readers and the number of threads that say their last
request was "ListenRequest ..." is only 5.. Furthermore there is only one
"Socket Reader Request" identified thread.
Are threads identified as socket readers permanently or constantly reused
for whatever purpose is required (with a cap of use based off of the socket
reader perspective)?
Thanks in advance for your help!
SteveHi Achhi,
Socket Reader Threads are the Threads which are responsible for reading the incoming request data. We can divide the Socket reader threads in two categories:
Pure Java Socket Reqders: The pure-Java socket reader implementation, where the socket reader threads continually poll all opened sockets to determine whether they contain data to be read, even if the sockets have no data to read. (From Performance Point This is Not Good that the Sockets will be in Opened Mode even if there is no Data to read)
Native Socket Readers: (These are the Dafault Socket Readers) The native IP socket reader provided by the host machine's operating system, where the socket reader threads target only active sockets that contain data to be read. Native socket readers never poll sockets because they are immediately notified when a socket needs to be serviced. For Better Performance You should always prefer using Native Socket Readers.
To Enable Native Socket Readers You can Login to AdminConsole--->Servers ---><SERVER_NAME>--->configuration (Tab)--->Tuning (SubTab)---> "Enable Native IO" (This checkbox must be checked)
Still If you want to use the Java Socket Readers .... still you can improve the performance of socket communication by configuring the proper number of socket reader threads for each server instance. For best performance, the number of socket reader threads in WebLogic Server should equal the potential maximum number of opened sockets.
Thanks
Jay SenSharma
http://weblogic-wonders.com/weblogic (WebLogic Wonders Are here) -
Execute queue thread count set back?
I have a script which automatically sets up execute queues (and their thread counts) for either an admin server or two managed servers in a cluster (depending on whether it's a standalone deployment). Upon building a domain, the script connects to a temporary server and sets everything up, at this point it appears all the queues and thread counts are set correctly. However once the build has completed and the generated config.xml is checked, three queues don't have any thread counts associated with them at all; these queues are:
ThreadQueue (Count)
wli.internal.ProcessInstanceInfo (15)
wli.internal.ProcessTracking (15)
wli.process.event.thread.pool (15)
The other queues have all their thread counts set correctly. Does anybody know how these queues are used and if this will have an impact on the above problem?No worries about this post, the reason has been solved.
Reason
The default thread count for execute queues in development mode is 15 threads, therefore if a queue is specified with this value it won't be set in the config.xml (when an execute queue doesn't have a ThreadCount attribute, the default is used instead). The trouble is that when the server is started we enter production mode where the default thread count is 25 threads instead.
Maybe you are looking for
-
HT3924 using 2008 imac 24" as display for 2011 macbook pro
can i use my 2008 iMac 24" as the display for my 2011 Mac book pro
-
Is it possible to change an attribute of image using VB?
hello everyone!, I just want to ask if it's possible to add an attribute to a image using Visual basic. and the image will save as jpeg file together with the add attribute to the properties? by the way, I am john. freshman college student from phil.
-
My ipod is stuck on turning on :( help?
someone jailbroke my ipod touch 4th gen and got a layout on dreamboard and it started to respring and now all it does is just the spinning circle thing like its going to turn off and then it stops and goes again forever if anybody knows the solution
-
Just curious as to why on my recent purchase on the receipt it does not list "Lightroom 5" only "photoshop photography program"
-
Hi People, Scenario : 1. I am using Simple Credit Check with Delivery Block(Credit Check Limit - C). 2. Delivery is being blocked for the credit limit. 3. After releasing the Credit Block for the Sales Order using T. Code VKM3, when i do the delivery