CLD example review
Hi everyone,
I have started preparing for CLD. This is my first try with Car wash example.
Please spare your some time for my example and tell me few tips, corrections.
I know there will be many points, may be bugs in my program. Also let me know how I can avoid using local variables and still update "Wash Options" control.
I have two local variables. How bad effect it will have on scoring ?
Also let me know if you will give me passing score or not out of 40.
I hope there are less bugs.
Gaurav k
CLD Certified !!!!!
Do not forget to Mark solution and to give Kudo if problem is solved.
Attachments:
100929-01.pdf 185 KB
CLD Car wash.zip 110 KB
Gaurav-
You did several things right!
Code looks like it hits all functionality
Good use of comments in code
VI documentation and icons are present
A couple of things you did not do right
Keep Front panels compact and neatly alligned (saving "Maximized" is a pet peeve of mine. You just can't see enough panels to compare sections of code.
missing control and indicator descriptions and tips. (Hint: when creating a control just open the property panel and enter all the data. TIP STRIPS should always be available for every object the user can get at and would contain a lot of the FP comments that clutter the FP with data that can be popped-up when the user hovers over the element)
use captions to show default control values. e.g. on Timer.vi control "Option" is an ok label hide it and show caption "Option (Count)". see how this effects the readability of the help window for Timer.vi?
your AEs hide terminals. Whenever possible (allways) keep terminals outside the loop. see the snippet revision of Read File.vi- has a few advantages over the original doesn't it?
Personally I would have used an event loop to enqueue and pass user generated commands to a state machine (more scalable IMHO) but overall the structure you have is satisfactory.
Nice work.
Jeff
Similar Messages
-
Hello,
I just completed the Car Wash CLD example using a modified producer/consumer with events pattern. I would like any feedback regarding the implementation.
Thanks!
Attachments:
CarWash.zip 163 KBHopefully this is still helpful. I would've reviewed last week but I just finished this example myself.
I think you'd earn solid marks for coding style. Your code is clean, organized, and well-commented/documented.
Unfortunately, I can't seem to get many of the functions to work as expected... the architecture is also pretty complicated. I noticed a few instances of elements being self-enqueued into the same state machine. This is a bit challenging to follow and (possibly?) debug.
http://linkd.in/mikele -
Dear all, We are a bunch of ppl who want to appear for CLD exam shortly. We took the "Sprinkler Controller" example and tried to complete the same in the stipulated time of 4Hrs. PFA the "SprinklerController_For_Forum.zip".
Although some of us fared well in the exam some are still in need to improvise on the coding speed (which seems like impossible now ).
I'm posting the question and the example (LV 8.6) in this forum to get your comments and feedback.
I'm sure a lot active participants like me will definitely share their experience and comment the way we coded.
Thanking you in advance.
Sreedhar.
Attachments:
SprinklerController_For_Forum.zip 171 KB
Sprinkler Controller Example.pdf 177 KBWell, you are not the first person to struggle with event structure usage! Here is a quick demo that you can play with that exposes some of the "features" you wrote into your example.
In the top loop you can see all the code. the lower loop contains a Stop Val change event with a True wired to the lower bool tunnel and the false case of the case structure contains a wait.vi wired from mSec 3 and negates the boolean on the top SR.
First, relying on TMO for acurate timing in your example is bad. If you watch the top loop run you'll see that the loop starts, the Event structue sees that 1000mSec TMO constant and starts waiting for events. 1000mSec later no event is seen so a timeout is generated and the timeout case is executed. then bool 1 flips and mSec time later the event case exits and the loop iterates. with mSec = 1000 bool 1 flips every 2 seconds. Esentially the tmo is reset each time the loop starts so any code outside the event strucure or in other cases creates a timing uncertainty. Your example suffers from this effect and the zones are not correctly timed.
Next, What happens if the stop button is pressed while the lower loop is waiting in the Timeout case? Since the event structure isn't ready to handle the Stop Val change event the loop must first exit the timeout case and the case structure and the loop must iterate with a TRUE in the top Shift register to get back into the True case and start waiting for events. However the event Stop Value change is already on the event queue! the event happened! so the Stop val change case executes. but with up to mSec 3 + mSec 2 delay after the event occured. two issues here a long executing event case blocking the handling of another event and an event structure inside a state machine. both no-nos since the state machine may NEVER re-enter the state that looks at events. (in the demo remove the negate in the false case and you get a infinate loop! ) There is a requirement to handle user input in a timely fashion that you miss in your example because your events are blocked for these reasons.
Third, (but not seen in the example above) your example mixes event queues and the state machine queues (the arrays of strings) the user events and the FP events can only be handled 1 at a time and ONLY after the state machine returns to the event handeling case. with both loops generating events for the other (and FP activity joining the event queue) you can (and have) created a debuging nightmare since the delay between when an event is generated and when it is serviced is totally unkowable and dependant on what else happened.
In conclusion the event structure is very useful for executing code in response to FP activity (and programatic events) and no other structyre easilly allows a break from dataflow to event processing BUT< we should chose the right tool and use it correctly. Use events to monitor programatic states and other asynchronous elements (like Users pressing buttons). DO NOT execute lengthy code inside an event because it blocks other events. DO NOT put event structures inside case structures or state machines (unless all events are dynamically registered and you unregister before you leave the state. there are time this is useful) DO NOT rely on the timeout case for critical timing.
Look into some of the examples that use the PC loop (events) template. and the Help file for more information and you are getting there!
Keep slinging wires!
Jeff
Attachments:
Hiden events.vi 15 KB -
There are links on site that open in new windows and close after you are done. Like A review link/box. The window opens but it's a blank page and the url books just says "search bookmarks and history".
== This happened ==
Every time Firefox opened
== I changed a theme/Just before I upgraded firefoxDo you have that problem when running in the Firefox SafeMode?
[http://support.mozilla.com/en-US/kb/Safe+Mode]
''Don't select anything right now, just use "Continue in SafeMode."''
If not, see this:
[http://support.mozilla.com/en-US/kb/troubleshooting+extensions+and+themes] -
CLD Practice Review - Car Wash
Hey, so I've done all 4 available CLD Prep Exams. I was curious if I could get some feedback on the Car Wash. This, imo, was the easiest of them all and so I was wondering what kind of marks I would end up getting with the attached as the end result. Like, just how many "unnecessary bends" are present in my code? What does it need? The code is in 2011 SP1. Thank you.
Remember, code does exactly what you tell it.
Attachments:
Car Wash.zip 89 KBWell while we wait for the thread to be moved here are some comments:
Your main has uninitialized shift registers for no reason. They should be initialized with constants.
All of your VIs are missing VI Icons
All of your VIs are missing VI Descriptions
Saved controls are also missing icon and description
Your front panel controls don't have tip strips, or descriptions
Wires are routed behind structures in a couple VIs
There are far too few comments. All cases in the state machine needs comments explaining what the state is for.
I also don't remember all the requirements so there is likly funcitonal things I don't remember. Like aren't controls supposed to be disabled when a car is going through the wash?
Unofficial Forum Rules and Guidelines - Hooovahh - LabVIEW Overlord
If 10 out of 10 experts in any field say something is bad, you should probably take their opinion seriously. -
Security system CLD exam review
This is similar to solution online
Please let me know if you have any general comments on the solution or any other comments to my questions below
1. I have created a project. Was it necessary or does it matter.
2. I put data in a Data folder. Does I need to create a separate folder?
3. It asked for test file. I used a .csv file instead of .txt. Is it ok to do that?
4. I used only one case for alarm, bypass and tamper switch instead of using 3 cases for solution online.
Code is in LabVIEW 8.6
Thanks
Attachments:
Security system.zip 67 KBOverall this is a pretty elegent solution. There are a few things that you will want to improve though.
1. This one jumped out at me immediately. Be very aware of extra and unnecessary bends in your wires. Try to line things up better and avoid all the extra bends.
2. I would use better names for your subVIs. Use names that are descriptive yet meaningful. Logic.vi is not very meaningful or descriptive.
3. I would not modify or change the requirements of the test. If they specify a text file then use a text file. Part of the exam is to determine if you can follow requirements. Changing them is not receommended.
4. Avoid objects overlapping each other. For example look at the labels in your Initialize state.
5. Avoid using "Use default if unwired" for your tunnels on structures.
6. Make sure to add descriptions for all of your controls and indicators including the ones in your subVIs.
Mark Yedinak
"Does anyone know where the love of God goes when the waves turn the minutes to hours?"
Wreck of the Edmund Fitzgerald - Gordon Lightfoot -
My stoplight.vi for CLD practice exam
I am preparing for CLD and looking for comments on my implementation of the "stoplight" CLD example question. Any comment would be appreciated. Kudos will be distributed liberally.
The pdf for the example question is in this zip file:
ftp://ftp.ni.com/pub/devzone/epd/2419.zip
Attachments:
CLD_Traffic_Light.zip 42 KB
Sample CLD Exam - Traffic Light.pdf 350 KBIt looks like your code does everything that the clad exam wants. I see that you documented everything but the main vi. You might just want to explain what the purpose of the mian vi is. I think you code is simple and east to read. The state machine is simple and works good and everything seems to flow nicely. You document well what is going on in each loop.
I hope this was userful info.
Tim
Johnson Controls
Holland Michigan -
Security System CLD Exam Problem Solution? Insane?
I just started working on the CLD example problems. I've been using Labview for about 10 years - so everything I do is old-school.
I'm posting this solution for the Security System example. There are arrays of switches to represent the alarm, bypass, and tamper
signals - and then a loop to go through each "zone" to logically determine the state (normal, alarm, bypass or tamper). To make the
"zone status" indicator an easily scalable indicator I have the "zone" loop change the color of a boolean LED indicator. Then I take a
picture of it and display an array of pix.
Question: This works fine, good response - but would it pass? Is there a better way? I attached the diagram...
Solved!
Go to Solution.
Attachments:
security system.png 43 KBI don't like the detour over an array of images and property nodes. Seems indirect and inefficient. Is that a requirement or your idea?
Also I assume that the FOR loop executes quickly, so you should probably do the timestamping once before the loop.
The "wait for FP activity is really "old school" and not very good. You typically get extra triggers, which is expensive since you write to the file every time. I would strongly suggest an event structure instead.
The small FOR loop can be replaced by "search array". Much cleaner!
It might be better and more efficient to open/create the file once before the loop, write using lowlevel functions during the loop, and close after the while loop has finished.
LabVIEW Champion . Do more with less code and in less time . -
Better Certification Board recommendations (Request for comments)
Now for something completely differerent:
Jordan, I appreciate what you tried to do with the Solutions for Review thread but... The latest exchanges (and a few others) on this thread I feel demonstrate why the "Mega-Thread" has already outlived its usefulness. There a a lot of good tidbits and side discussions buried in this thread that would be much more searchable and cohesive if the posters started their own threads.
Perhaps some new board suggestions for effectivness could be floated in place of the "Sample Exam Solutions for Review"?
Tips on CLD Solutions for review:
Start a new thread - indicate there will be a CLD example for review in the subject line.
For follow-up discussions on critique points start a new thread with a link to the example and a subject about the point under discussion.
This should allow the frequent fliers on this board the chance to develop a useful body of theads where specific points related to Cert specific preparation and concepts can be gathered and easily cross linked by the heavy hitters (And who knows, easilly searched by the certification candidates)
As the board grows I would hate to lose some "gems" in the noise. If we get together now, to think about what this boards goals are we can maximize our return on investment in supporting certification.
All comments welcome. Jordan, please consider floating this discussion for maximum visibility.
JeffI think that's a great idea - centralise the submissions and decentralise the critiques.
Another idea to improve the Certification Board might be to introduce subforums for each of the various types of certification (CLAD, CLD, CLA, etc.).
Certified LabVIEW Developer -
Multiple queries in a single report?
I'm having some issues with the ColdFusion Report Builder...
I have a database table called "Items" that includes fields
for Reviewer and Status. I want to create a report that will list a
reviewer, then express the number of items where the Status is
"open" as a total or record count. I want to do the same for total
items, and then express the number of "open" items as a percentage.
For example:
REVIEWER, OPEN ITEMS, TOTAL ITEMS, PERCENT OPEN
John Doe, 10, 20, 50%
Jane Smith, 15, 60, 25%
...and so on.
So far I've only been able to get my report to display the
recordcount of the entire query. In order troubleshoot the problem
I created a regular cfm page to do the same thing. Here's what I
did:
<cfquery name="getreviewers"
datasource="#APPLICATION.datasource#">
SELECT DISTINCT Reviewer
FROM Items
ORDER BY Reviewer
</cfquery>
<cfoutput query="getreviewers">
<cfquery name="getopenitems"
datasource="#APPLICATION.datasource#">
SELECT Status
FROM Items
WHERE Status='open'
AND Reviewer = '#Reviewer#'
</cfquery>
<cfset open = getopenitems.recordcount>
<cfquery name="getallitems"
datasource="#APPLICATION.datasource#">
SELECT Status
FROM Items
WHERE Reviewer = '#Reviewer#'
</cfquery>
<cfset all = getallitems.recordcount>
<cfset percent = (open / all) * 100>
#getreviewers.DR_Item_Reviewer#, #open#, #all#,
#Round(percent)#%
</cfoutput>
That worked great, but as you can see I had to nest a couple
of queries inside a <cfoutput>. I don't know how to
incorporate this into the report builder, as it seems you can only
specify a single query. Another thing that occurs to me is perhaps
I'm going about this the wrong way. Is there perhaps a function
that will display things the way I want them without fussing with
multiple queries? Any help would be greatly appreciated. Thanks in
advance.It seems like you are trying to do a subreport. You can nest
reports within the report feature...just check out the subreport
feature under the help section. If that doesn't help let me
know. -
Painting one root Application Module to rule them all
hi
The description below uses the same MyApplicationModuleListener approach as I describe in the forum thread "painting a picture of Application Module pooling".
Another example review of Application Module pools behaviour is the blog post by Chris Muir, "JDev 11g, Task Flows & ADF BC – one root Application Module to rule them all?".
That post also says "... we'll have trouble discerning what the ADF BC layer is actually doing underneath the task flow transaction options. ...", where the approach below might help alleviate some of that discerning trouble.
And about "... By deduction as there are no other log entries, this second instance of Root1AppModule must be nested under the root Root1AppModule? ..." more information will be logged, so less deduction is required.
The blog post describes an application similar to this one (which is using the HR.EMPLOYEES table) created using JDeveloper 11.1.1.6.0
at http://www.consideringred.com/files/oracle/2012/OneSizeOneRootAMApp-v0.01.zip
It uses somewhat different names than the blog post, and it has two sets of task-flows so that no transaction configuration changes are required to review the behaviour.
When a MyApplicationModuleListener approach is introduced (with minor changes, mostly configuration, using JAR files available in MyApplicationModuleListenerApp-v0.03.zip) it results in the application available
at http://www.consideringred.com/files/oracle/2012/OneSizeOneRootAMApp-v0.02.zip
Using this, the (chained) "No Controller Transaction" scenario's result in similar logging like this:
[C][L][r1001][(ctx31) /faces : /firstIndex] setRequestInfoPrefix() : extra [GET with 3 parameters (partial request false) (initial render true) (postback true)]
[C][L][r1002][(ctx32) /faces : /firstIndex] setRequestInfoPrefix() : extra [GET with 3 parameters (partial request false) (initial render true) (postback true)]
[C][L][r1001][(ctx31) /faces : /firstIndex] onAfterRequest() : no ApplicationPools
[C][L][r1002][(ctx32) /faces : /firstIndex] onAfterRequest() : no ApplicationPools
[C][L][r1003][(ctx31) /faces : /firstIndex] setRequestInfoPrefix() : extra [POST with 5 parameters (partial request false) (initial render false) (postback true)]
[C][L][r1003][(ctx31) /faces : /firstIndex] onNewConstruction() : [(am501) FirstAppModuleImpl_1 (not root) parent = (null)]
[C][L][r1003][(ctx31) /faces : /firstIndex] onActivate() : [(am501) FirstAppModule (is root)](session version 11.1.1.61.92 oracle.jbo.server.SessionImpl@16cbcec)
[C][L][r1003][(ctx31) /faces : /firstIndex] onCreate() : [(am501) FirstAppModule (is root)]
########FirstAppModuleImpl.create() called. AM isRoot() = true
[C][L][r1003][(ctx31) /faces : /firstIndex] onAfterConnect() : [(am501) FirstAppModule (is root)]
[C][L][r1003][(ctx31) /faces : /firstIndex] onPrepareSession() : [(am501) FirstAppModule (is root)]
########FirstAppModuleImpl.prepareSession() called. AM isRoot() = true
[C][L][r1003][(ctx31) /faces : /firstIndex] onAfterDoPoolMessage() : [(am501) FirstAppModule (is root)][(ses101) MESSAGE_TYPE_USING (1) STATUS_SUCCESS (8) (rp 4)]
[C][L][r1003][(ctx31) /faces : /firstIndex] onPassivateState() : 5 : [(am501) FirstAppModule (is root)] pId = -1, pClientData = null, pFlags = PASSIVATE_HINT_FLAG (16)
[C][L][r1003][(ctx31) /faces : /firstIndex] onAfterDoPoolMessage() : [(am501) FirstAppModule (is root)][(ses101) MESSAGE_TYPE_RELEASING (2) STATUS_SUCCESS (8) (rp 3)]
[C][L][r1003][(ctx31) /faces : /firstIndex] onNewShortId() : pNewShortId = ds81, pId = java:comp/env/jdbc/connHRDS - com.bea:ServerRuntime=DefaultServer,Name=OneSizeOneRootAMApp@connHR@connHR,ApplicationRuntime=OneSizeOneRootAMApp,Type=JDBCDataSourceRuntime
[C][L][r1003][(ctx31) /faces : /firstIndex] onAfterRequest() : 1 : ApplicationPool = onesizeonerootamapp.model.FirstAppModuleLocal
(ap21)[cre 1; rem 0; act 0; pas 0; co 1; ci 1; ref reu 0; ref rec 0; unr rec 0; fail 0; tot am 1; max am 1; avg am 1; tot ava 1; avg ava 1; avg una 0; tot ref 1; ses 1; avg ses 1]
(ds81)[cur cap 1; avai 0; unav 1; cp hig 1; ac cur 1; ac avg 0; ac hig 1; co del 168; co tot 1; res req 1; fai res 0; fai rec 0; h avai 1; h unav 1; lea co 0; psc acc 0; psc add 0; psc csi 0; psc del 0; psc hit 0; psc mis 0; wfc cur 0; wfc fai 0; wfc hig 0; wfc tot 0; wse hig 0]
[C][L][r1004][(ctx31) /faces : /firstam-btf/empVoFirstViPage] setRequestInfoPrefix() : extra [GET with 5 parameters (partial request true) (initial render false) (postback true)]
[C][L][r1004][(ctx31) /faces : /firstam-btf/empVoFirstViPage] onAfterDoPoolMessage() : [(am501) FirstAppModule (is root)][(ses101) MESSAGE_TYPE_USING (1) STATUS_SUCCESS (8) (rp 4)]
[C][L][r1004][(ctx31) /faces : /firstam-btf/empVoFirstViPage] onPassivateState() : 5 : [(am501) FirstAppModule (is root)] pId = -1, pClientData = null, pFlags = PASSIVATE_HINT_FLAG (16)
[C][L][r1004][(ctx31) /faces : /firstam-btf/empVoFirstViPage] onAfterDoPoolMessage() : [(am501) FirstAppModule (is root)][(ses101) MESSAGE_TYPE_RELEASING (2) STATUS_SUCCESS (8) (rp 3)]
[C][L][r1004][(ctx31) /faces : /firstam-btf/empVoFirstViPage] onAfterRequest() : 1 : ApplicationPool = onesizeonerootamapp.model.FirstAppModuleLocal
(ap21)[cre 1; rem 0; act 0; pas 0; co 2; ci 2; ref reu 1; ref rec 0; unr rec 0; fail 0; tot am 1; max am 1; avg am 1; tot ava 1; avg ava 1; avg una 0; tot ref 1; ses 1; avg ses 1]
(ds81)[cur cap 1; avai 0; unav 1; cp hig 1; ac cur 1; ac avg 0; ac hig 1; co del 168; co tot 1; res req 1; fai res 0; fai rec 0; h avai 1; h unav 1; lea co 0; psc acc 2; psc add 2; psc csi 2; psc del 0; psc hit 0; psc mis 2; wfc cur 0; wfc fai 0; wfc hig 0; wfc tot 0; wse hig 0]
[C][L][r1005][(ctx31) /faces : /firstam-btf/empVoFirstViPage] setRequestInfoPrefix() : extra [POST with 55 parameters (partial request false) (initial render false) (postback true)]
[C][L][r1005][(ctx31) /faces : /firstam-btf/empVoFirstViPage] onAfterDoPoolMessage() : [(am501) FirstAppModule (is root)][(ses101) MESSAGE_TYPE_USING (1) STATUS_SUCCESS (8) (rp 4)]
[C][L][r1005][(ctx31) /faces : /firstam-btf/empVoFirstViPage] onNewConstruction() : [(am502) SecondAppModuleImpl_154 (not root) parent = (null)]
[C][L][r1005][(ctx31) /faces : /firstam-btf/empVoFirstViPage] onActivate() : [(am502) SecondAppModule (is root)](session version 11.1.1.61.92 oracle.jbo.server.SessionImpl@8add89)
[C][L][r1005][(ctx31) /faces : /firstam-btf/empVoFirstViPage] onCreate() : [(am502) SecondAppModule (is root)]
########SecondAppModuleImpl.create() called. AM isRoot() = true
[C][L][r1005][(ctx31) /faces : /firstam-btf/empVoFirstViPage] onAfterConnect() : [(am502) SecondAppModule (is root)]
[C][L][r1005][(ctx31) /faces : /firstam-btf/empVoFirstViPage] onPrepareSession() : [(am502) SecondAppModule (is root)]
########SecondAppModuleImpl.prepareSession() called. AM isRoot() = true
[C][L][r1005][(ctx31) /faces : /firstam-btf/empVoFirstViPage] onAfterDoPoolMessage() : [(am502) SecondAppModule (is root)][(ses101) MESSAGE_TYPE_USING (1) STATUS_SUCCESS (8) (rp 4)]
[C][L][r1005][(ctx31) /faces : /firstam-btf/empVoFirstViPage] onPassivateState() : 5 : [(am501) FirstAppModule (is root)] pId = -1, pClientData = null, pFlags = PASSIVATE_HINT_FLAG (16)
[C][L][r1005][(ctx31) /faces : /firstam-btf/empVoFirstViPage] onAfterDoPoolMessage() : [(am501) FirstAppModule (is root)][(ses101) MESSAGE_TYPE_RELEASING (2) STATUS_SUCCESS (8) (rp 3)]
[C][L][r1005][(ctx31) /faces : /firstam-btf/empVoFirstViPage] onPassivateState() : 5 : [(am502) SecondAppModule (is root)] pId = -1, pClientData = null, pFlags = PASSIVATE_HINT_FLAG (16)
[C][L][r1005][(ctx31) /faces : /firstam-btf/empVoFirstViPage] onAfterDoPoolMessage() : [(am502) SecondAppModule (is root)][(ses101) MESSAGE_TYPE_RELEASING (2) STATUS_SUCCESS (8) (rp 3)]
[C][L][r1005][(ctx31) /faces : /firstam-btf/empVoFirstViPage] onAfterRequest() : 1 : ApplicationPool = onesizeonerootamapp.model.FirstAppModuleLocal
(ap21)[cre 1; rem 0; act 0; pas 0; co 3; ci 3; ref reu 2; ref rec 0; unr rec 0; fail 0; tot am 1; max am 1; avg am 1; tot ava 1; avg ava 1; avg una 0; tot ref 1; ses 1; avg ses 1]
(ds81)[cur cap 2; avai 0; unav 2; cp hig 2; ac cur 2; ac avg 0; ac hig 2; co del 122; co tot 2; res req 2; fai res 0; fai rec 0; h avai 1; h unav 2; lea co 0; psc acc 2; psc add 2; psc csi 2; psc del 0; psc hit 0; psc mis 2; wfc cur 0; wfc fai 0; wfc hig 0; wfc tot 0; wse hig 0]
[C][L][r1005][(ctx31) /faces : /firstam-btf/empVoFirstViPage] onAfterRequest() : 2 : ApplicationPool = onesizeonerootamapp.model.SecondAppModuleLocal
(ap22)[cre 1; rem 0; act 0; pas 0; co 1; ci 1; ref reu 0; ref rec 0; unr rec 0; fail 0; tot am 1; max am 1; avg am 1; tot ava 1; avg ava 1; avg una 0; tot ref 1; ses 1; avg ses 1]
(ds81)[cur cap 2; avai 0; unav 2; cp hig 2; ac cur 2; ac avg 0; ac hig 2; co del 122; co tot 2; res req 2; fai res 0; fai rec 0; h avai 1; h unav 2; lea co 0; psc acc 2; psc add 2; psc csi 2; psc del 0; psc hit 0; psc mis 2; wfc cur 0; wfc fai 0; wfc hig 0; wfc tot 0; wse hig 0]
[C][L][r1006][(ctx31) /faces : /secondam-btf/empVoSecondViPage] setRequestInfoPrefix() : extra [GET with 5 parameters (partial request true) (initial render false) (postback true)]
[C][L][r1006][(ctx31) /faces : /secondam-btf/empVoSecondViPage] onAfterDoPoolMessage() : [(am502) SecondAppModule (is root)][(ses101) MESSAGE_TYPE_USING (1) STATUS_SUCCESS (8) (rp 4)]
[C][L][r1006][(ctx31) /faces : /secondam-btf/empVoSecondViPage] onPassivateState() : 5 : [(am502) SecondAppModule (is root)] pId = -1, pClientData = null, pFlags = PASSIVATE_HINT_FLAG (16)
[C][L][r1006][(ctx31) /faces : /secondam-btf/empVoSecondViPage] onAfterDoPoolMessage() : [(am502) SecondAppModule (is root)][(ses101) MESSAGE_TYPE_RELEASING (2) STATUS_SUCCESS (8) (rp 3)]
[C][L][r1006][(ctx31) /faces : /secondam-btf/empVoSecondViPage] onAfterRequest() : 1 : ApplicationPool = onesizeonerootamapp.model.FirstAppModuleLocal
(ap21)[cre 1; rem 0; act 0; pas 0; co 3; ci 3; ref reu 2; ref rec 0; unr rec 0; fail 0; tot am 1; max am 1; avg am 1; tot ava 1; avg ava 1; avg una 0; tot ref 1; ses 1; avg ses 1]
(ds81)[cur cap 2; avai 0; unav 2; cp hig 2; ac cur 2; ac avg 0; ac hig 2; co del 122; co tot 2; res req 2; fai res 0; fai rec 0; h avai 1; h unav 2; lea co 0; psc acc 4; psc add 4; psc csi 4; psc del 0; psc hit 0; psc mis 4; wfc cur 0; wfc fai 0; wfc hig 0; wfc tot 0; wse hig 0]
[C][L][r1006][(ctx31) /faces : /secondam-btf/empVoSecondViPage] onAfterRequest() : 2 : ApplicationPool = onesizeonerootamapp.model.SecondAppModuleLocal
(ap22)[cre 1; rem 0; act 0; pas 0; co 2; ci 2; ref reu 1; ref rec 0; unr rec 0; fail 0; tot am 1; max am 1; avg am 1; tot ava 1; avg ava 1; avg una 0; tot ref 1; ses 1; avg ses 1]
(ds81)[cur cap 2; avai 0; unav 2; cp hig 2; ac cur 2; ac avg 0; ac hig 2; co del 122; co tot 2; res req 2; fai res 0; fai rec 0; h avai 1; h unav 2; lea co 0; psc acc 4; psc add 4; psc csi 4; psc del 0; psc hit 0; psc mis 4; wfc cur 0; wfc fai 0; wfc hig 0; wfc tot 0; wse hig 0]The "Always Begin New Transaction and Always Use Existing transaction" scenario results in logging like this:
[C][L][r1001][(ctx31) /faces : /secondIndex] setRequestInfoPrefix() : extra [GET with 3 parameters (partial request false) (initial render true) (postback true)]
[C][L][r1002][(ctx32) /faces : /secondIndex] setRequestInfoPrefix() : extra [GET with 3 parameters (partial request false) (initial render true) (postback true)]
[C][L][r1001][(ctx31) /faces : /secondIndex] onAfterRequest() : no ApplicationPools
[C][L][r1002][(ctx32) /faces : /secondIndex] onAfterRequest() : no ApplicationPools
[C][L][r1003][(ctx32) /faces : /secondIndex] setRequestInfoPrefix() : extra [POST with 5 parameters (partial request false) (initial render false) (postback true)]
[C][L][r1003][(ctx32) /faces : /secondIndex] onNewConstruction() : [(am501) FirstAppModuleImpl_1 (not root) parent = (null)]
[C][L][r1003][(ctx32) /faces : /secondIndex] onActivate() : [(am501) FirstAppModule (is root)](session version 11.1.1.61.92 oracle.jbo.server.SessionImpl@1d90a2c)
[C][L][r1003][(ctx32) /faces : /secondIndex] onCreate() : [(am501) FirstAppModule (is root)]
########FirstAppModuleImpl.create() called. AM isRoot() = true
[C][L][r1003][(ctx32) /faces : /secondIndex] onAfterConnect() : [(am501) FirstAppModule (is root)]
[C][L][r1003][(ctx32) /faces : /secondIndex] onPrepareSession() : [(am501) FirstAppModule (is root)]
########FirstAppModuleImpl.prepareSession() called. AM isRoot() = true
[C][L][r1003][(ctx32) /faces : /secondIndex] onAfterDoPoolMessage() : [(am501) FirstAppModule (is root)][(ses101) MESSAGE_TYPE_USING (1) STATUS_SUCCESS (8) (rp 4)]
[C][L][r1003][(ctx32) /faces : /secondIndex] onNewConstruction() : [(am502) FirstAppModuleImpl_2 (not root) parent = (null)]
[C][L][r1003][(ctx32) /faces : /secondIndex] onSetParent() : 2 : [(am502) onesizeonerootamapp_model_FirstAppModule (not root) parent = (null)] parent = [(am501) FirstAppModule (is root)]
[C][L][r1003][(ctx32) /faces : /secondIndex] onCreate() : [(am502) onesizeonerootamapp_model_FirstAppModule (not root) parent = [(am501) FirstAppModule (is root)]]
########FirstAppModuleImpl.create() called. AM isRoot() = false
[C][L][r1003][(ctx32) /faces : /secondIndex] onPassivateState() : 5 : [(am501) FirstAppModule (is root)] pId = -1, pClientData = null, pFlags = PASSIVATE_HINT_FLAG (16)
[C][L][r1003][(ctx32) /faces : /secondIndex] onAfterDoPoolMessage() : [(am501) FirstAppModule (is root)][(ses101) MESSAGE_TYPE_RELEASING (2) STATUS_SUCCESS (8) (rp 3)]
[C][L][r1003][(ctx32) /faces : /secondIndex] onNewShortId() : pNewShortId = ds81, pId = java:comp/env/jdbc/connHRDS - com.bea:ServerRuntime=DefaultServer,Name=OneSizeOneRootAMApp@connHR@connHR,ApplicationRuntime=OneSizeOneRootAMApp,Type=JDBCDataSourceRuntime
[C][L][r1003][(ctx32) /faces : /secondIndex] onAfterRequest() : 1 : ApplicationPool = onesizeonerootamapp.model.FirstAppModuleLocal
(ap21)[cre 1; rem 0; act 0; pas 0; co 1; ci 1; ref reu 0; ref rec 0; unr rec 0; fail 0; tot am 1; max am 1; avg am 1; tot ava 1; avg ava 1; avg una 0; tot ref 1; ses 1; avg ses 1]
(ds81)[cur cap 1; avai 0; unav 1; cp hig 1; ac cur 1; ac avg 0; ac hig 1; co del 75; co tot 1; res req 1; fai res 0; fai rec 0; h avai 1; h unav 1; lea co 0; psc acc 0; psc add 0; psc csi 0; psc del 0; psc hit 0; psc mis 0; wfc cur 0; wfc fai 0; wfc hig 0; wfc tot 0; wse hig 0]
[L-before][L][(ctx32) /faces : /firstam-tx-btf/empVoFirstViPage] onAfterDoPoolMessage() : [(am501) FirstAppModule (is root)][(ses101) MESSAGE_TYPE_USING (1) STATUS_SUCCESS (8) (rp 4)]
[C][L][r1004][(ctx32) /faces : /firstam-tx-btf/empVoFirstViPage] setRequestInfoPrefix() : extra [GET with 5 parameters (partial request true) (initial render false) (postback true)]
[C][L][r1004][(ctx32) /faces : /firstam-tx-btf/empVoFirstViPage] onPassivateState() : 5 : [(am501) FirstAppModule (is root)] pId = -1, pClientData = null, pFlags = PASSIVATE_HINT_FLAG (16)
[C][L][r1004][(ctx32) /faces : /firstam-tx-btf/empVoFirstViPage] onAfterDoPoolMessage() : [(am501) FirstAppModule (is root)][(ses101) MESSAGE_TYPE_RELEASING (2) STATUS_SUCCESS (8) (rp 3)]
[C][L][r1004][(ctx32) /faces : /firstam-tx-btf/empVoFirstViPage] onAfterRequest() : 1 : ApplicationPool = onesizeonerootamapp.model.FirstAppModuleLocal
(ap21)[cre 1; rem 0; act 0; pas 0; co 2; ci 2; ref reu 1; ref rec 0; unr rec 0; fail 0; tot am 1; max am 1; avg am 1; tot ava 1; avg ava 1; avg una 0; tot ref 1; ses 1; avg ses 1]
(ds81)[cur cap 1; avai 0; unav 1; cp hig 1; ac cur 1; ac avg 0; ac hig 1; co del 75; co tot 1; res req 1; fai res 0; fai rec 0; h avai 1; h unav 1; lea co 0; psc acc 2; psc add 2; psc csi 2; psc del 0; psc hit 0; psc mis 2; wfc cur 0; wfc fai 0; wfc hig 0; wfc tot 0; wse hig 0]
[L-before][L][(ctx31) /faces : /firstam-tx-btf/empVoFirstViPage] onAfterDoPoolMessage() : [(am501) FirstAppModule (is root)][(ses101) MESSAGE_TYPE_USING (1) STATUS_SUCCESS (8) (rp 4)]
[C][L][r1005][(ctx31) /faces : /firstam-tx-btf/empVoFirstViPage] setRequestInfoPrefix() : extra [POST with 55 parameters (partial request false) (initial render false) (postback true)]
[C][L][r1005][(ctx31) /faces : /firstam-tx-btf/empVoFirstViPage] onPassivateStateForUndo() : [(am501) FirstAppModule (is root)] pId = null, pClientData = null, pFlags = unknown passivation flags (0)
[C][L][r1005][(ctx31) /faces : /firstam-tx-btf/empVoFirstViPage] onPassivateState() : 2 : [(am501) FirstAppModule (is root)] pClientData = null, pFlags = PASSIVATE_UNDO_FLAG, PASSIVATE_TO_STACK_FLAG (40)
[C][L][r1005][(ctx31) /faces : /firstam-tx-btf/empVoFirstViPage] onPassivateConnectionState() : [(am502) onesizeonerootamapp_model_FirstAppModule (not root) parent = [(am501) FirstAppModule (is root)]] pDoc = (name = #document, doc elem = null), pParent = (name = CONN)
[C][L][r1005][(ctx31) /faces : /firstam-tx-btf/empVoFirstViPage] onPassivateConnectionState() : [(am501) FirstAppModule (is root)] pDoc = (name = #document, doc elem = null), pParent = (name = CONN)
[C][L][r1005][(ctx31) /faces : /firstam-tx-btf/empVoFirstViPage] onPrepareForPassivation() : [(am501) FirstAppModule (is root)] pOut = (name = #document, doc elem = null) pParent = (name = AM)
[C][L][r1005][(ctx31) /faces : /firstam-tx-btf/empVoFirstViPage] onPrepareForPassivation() : [(am502) onesizeonerootamapp_model_FirstAppModule (not root) parent = [(am501) FirstAppModule (is root)]] pOut = (name = #document, doc elem = null) pParent = (name = AM)
[C][L][r1005][(ctx31) /faces : /firstam-tx-btf/empVoFirstViPage] onPassivateState() : 3 : [(am502) onesizeonerootamapp_model_FirstAppModule (not root) parent = [(am501) FirstAppModule (is root)]] pDoc = (name = #document, doc elem = null), pParent = (name = AM)
[C][L][r1005][(ctx31) /faces : /firstam-tx-btf/empVoFirstViPage] onPassivateState() : 3 : [(am501) FirstAppModule (is root)] pDoc = (name = #document, doc elem = null), pParent = (name = AM)
[C][L][r1005][(ctx31) /faces : /firstam-tx-btf/empVoFirstViPage] onNewConstruction() : [(am503) SecondAppModuleImpl_155 (not root) parent = (null)]
[C][L][r1005][(ctx31) /faces : /firstam-tx-btf/empVoFirstViPage] onSetParent() : 2 : [(am503) onesizeonerootamapp_model_SecondAppModule (not root) parent = (null)] parent = [(am501) FirstAppModule (is root)]
[C][L][r1005][(ctx31) /faces : /firstam-tx-btf/empVoFirstViPage] onCreate() : [(am503) onesizeonerootamapp_model_SecondAppModule (not root) parent = [(am501) FirstAppModule (is root)]]
########SecondAppModuleImpl.create() called. AM isRoot() = false
[C][L][r1005][(ctx31) /faces : /firstam-tx-btf/empVoFirstViPage] onPassivateState() : 5 : [(am501) FirstAppModule (is root)] pId = -1, pClientData = null, pFlags = PASSIVATE_HINT_FLAG (16)
[C][L][r1005][(ctx31) /faces : /firstam-tx-btf/empVoFirstViPage] onAfterDoPoolMessage() : [(am501) FirstAppModule (is root)][(ses101) MESSAGE_TYPE_RELEASING (2) STATUS_SUCCESS (8) (rp 3)]
[C][L][r1005][(ctx31) /faces : /firstam-tx-btf/empVoFirstViPage] onAfterRequest() : 1 : ApplicationPool = onesizeonerootamapp.model.FirstAppModuleLocal
(ap21)[cre 1; rem 0; act 0; pas 0; co 3; ci 3; ref reu 2; ref rec 0; unr rec 0; fail 0; tot am 1; max am 1; avg am 1; tot ava 1; avg ava 1; avg una 0; tot ref 1; ses 1; avg ses 1]
(ds81)[cur cap 2; avai 1; unav 1; cp hig 2; ac cur 1; ac avg 0; ac hig 2; co del 79; co tot 2; res req 2; fai res 0; fai rec 0; h avai 1; h unav 2; lea co 0; psc acc 3; psc add 3; psc csi 3; psc del 0; psc hit 0; psc mis 3; wfc cur 0; wfc fai 0; wfc hig 0; wfc tot 0; wse hig 0]
[L-before][L][(ctx31) /faces : /secondam-tx-btf/empVoSecondViPage] onAfterDoPoolMessage() : [(am501) FirstAppModule (is root)][(ses101) MESSAGE_TYPE_USING (1) STATUS_SUCCESS (8) (rp 4)]
[C][L][r1006][(ctx31) /faces : /secondam-tx-btf/empVoSecondViPage] setRequestInfoPrefix() : extra [GET with 5 parameters (partial request true) (initial render false) (postback true)]
[C][L][r1006][(ctx31) /faces : /secondam-tx-btf/empVoSecondViPage] onPassivateState() : 5 : [(am501) FirstAppModule (is root)] pId = -1, pClientData = null, pFlags = PASSIVATE_HINT_FLAG (16)
[C][L][r1006][(ctx31) /faces : /secondam-tx-btf/empVoSecondViPage] onAfterDoPoolMessage() : [(am501) FirstAppModule (is root)][(ses101) MESSAGE_TYPE_RELEASING (2) STATUS_SUCCESS (8) (rp 3)]
[C][L][r1006][(ctx31) /faces : /secondam-tx-btf/empVoSecondViPage] onAfterRequest() : 1 : ApplicationPool = onesizeonerootamapp.model.FirstAppModuleLocal
(ap21)[cre 1; rem 0; act 0; pas 0; co 4; ci 4; ref reu 3; ref rec 0; unr rec 0; fail 0; tot am 1; max am 1; avg am 1; tot ava 1; avg ava 1; avg una 0; tot ref 1; ses 1; avg ses 1]
(ds81)[cur cap 2; avai 1; unav 1; cp hig 2; ac cur 1; ac avg 0; ac hig 2; co del 79; co tot 2; res req 2; fai res 0; fai rec 0; h avai 1; h unav 2; lea co 0; psc acc 5; psc add 3; psc csi 3; psc del 0; psc hit 1; psc mis 4; wfc cur 0; wfc fai 0; wfc hig 0; wfc tot 0; wse hig 0]This seems to confirm more explicitly some of the observations in the blog post, and at the same time might add some additional insight into what the framework is doing.
Suggestions to improve such MyApplicationModuleListener approach (or an alternative approach) are welcome.
many thanks
Jan Verveckenfyi
Some additional features were added in the JAR files available
in http://www.consideringred.com/files/oracle/2013/MyApplicationModuleListenerApp-v0.05.zip
Like line numbers, or a queryOneRecord() method to support logging the database session SID, or a TaskFlowInfoHelper class to allow logging task-flow transaction options or DataControlFrame information.
If these JAR files are used, it results in the modified example application
at http://www.consideringred.com/files/oracle/2013/OneSizeOneRootAMApp-v0.03.zip
For the same scenarios (using OneSizeOneRootAMApp-v0.03.zip), the resulting logging can be found in these files:
- "maml-log-20130113-jdev111160-nctx.txt" : when using JDeveloper 11.1.1.6.0 and the chained "No Controller Transaction" scenario :
[0002][C][L][r1001][(ctx31) /faces : /firstIndex] logContextInformation() :
[0003]#{a_versionBean.appVersionInfo} = OneSizeOneRootAMApp v0.03 : oracle.jbo.Version = 11.1.1.61.92
[0007][C][L][r1002][(ctx32) /faces : /firstIndex] onAfterPrepareModel() : task-flow = (no current TaskFlowId) (unbounded task-flow pages)
[0008]transaction type = (no current TaskFlowId), DC scope = (no current TaskFlowId), DC frame = e1o4lmuw3_2, open transaction = null, is transaction dirty = false
[0044][C][L][r1005][(ctx32) /faces : /firstam-btf/empVoFirstViPage] onAfterPrepareModel() : task-flow = /WEB-INF/btf/firstam-btf.xml#firstam-btf (no page-fragments)
[0045]transaction type = -No Controller Transaction-, DC scope = shared DataControlScopeType, DC frame = e1o4lmuw3_2, open transaction = null, is transaction dirty = false
[0046][C][L][r1005][(ctx32) /faces : /firstam-btf/empVoFirstViPage] onAfterPrepareModel() : task-flow = /WEB-INF/btf/secondam-btf.xml#secondam-btf (no page-fragments)
[0047]transaction type = -No Controller Transaction-, DC scope = shared DataControlScopeType, DC frame = e1o4lmuw3_2, open transaction = null, is transaction dirty = true
[0057][C][L][r1005][(ctx32) /faces : /firstam-btf/empVoFirstViPage] onAfterDoPoolMessage() : [(am501) FirstAppModule (is root)][(ses101) MESSAGE_TYPE_RELEASING (2) STATUS_SUCCESS (8) (rp 3)]
[0058](am501) SID = 41 for select sys_context('USERENV', 'SID') as sid from dual
[0060][C][L][r1005][(ctx32) /faces : /firstam-btf/empVoFirstViPage] onAfterDoPoolMessage() : [(am502) SecondAppModule (is root)][(ses101) MESSAGE_TYPE_RELEASING (2) STATUS_SUCCESS (8) (rp 3)]
[0061](am502) SID = 27 for select sys_context('USERENV', 'SID') as sid from dual
Notice the transaction type and DataControl scope information per task-flow.
Notice the different database session SID values ("[0058](am501) SID = 41" and "[0061](am502) SID = 27") during the same request [r1005].
- "maml-log-20130113-jdev111230-nctx.txt" : when using JDeveloper 11.1.2.3.0 and the chained "No Controller Transaction" scenario :
[0002][C][L][r1001][(ctx31) /faces : /firstIndex] logContextInformation() :
[0003]#{a_versionBean.appVersionInfo} = OneSizeOneRootAMApp v0.03 : oracle.jbo.Version = 11.1.2.62.76
Notice the logged information seems similar to when, for the same application and scenario, JDeveloper 11.1.1.6.0 is used (above).
- "maml-log-20130113-jdev111160-tx.txt" : when using JDeveloper 11.1.1.6.0 and the "Always Begin New Transaction and Always Use Existing transaction" scenario :
[0002][C][L][r1001][(ctx31) /faces : /secondIndex] logContextInformation() :
[0003]#{a_versionBean.appVersionInfo} = OneSizeOneRootAMApp v0.03 : oracle.jbo.Version = 11.1.1.61.92
[0013][C][L][r1003][(ctx32) /faces : /secondIndex] onAfterPrepareModel() : task-flow = /WEB-INF/btf/firstam-tx-btf.xml#firstam-tx-btf (no page-fragments)
[0014]transaction type = Always Begin New Transaction, DC scope = isolated DataControlScopeType, DC frame = 1220j2l4q9_5, open transaction = 1220j2l4q9_5, is transaction dirty = false
[0017][C][L][r1003][(ctx32) /faces : /secondIndex] onCreate() : [(am501) FirstAppModule (is root)]
[0018](am501) SID = 41 for select sys_context('USERENV', 'SID') as sid from dual
[0025][C][L][r1003][(ctx32) /faces : /secondIndex] onCreate() : [(am502) onesizeonerootamapp_model_FirstAppModule (not root) parent = [(am501) FirstAppModule (is root)]]
[0026](am502) SID = 41 for select sys_context('USERENV', 'SID') as sid from dual
[0056][C][L][r1005][(ctx32) /faces : /firstam-tx-btf/empVoFirstViPage] onAfterPrepareModel() : task-flow = /WEB-INF/btf/secondam-tx-btf.xml#secondam-tx-btf (no page-fragments)
[0057]transaction type = Always Use Existing Transaction, DC scope = shared DataControlScopeType, DC frame = 1220j2l4q9_5, open transaction = 1220j2l4q9_5, is transaction dirty = true
[0060][C][L][r1005][(ctx32) /faces : /firstam-tx-btf/empVoFirstViPage] onCreate() : [(am503) onesizeonerootamapp_model_SecondAppModule (not root) parent = [(am501) FirstAppModule (is root)]]
[0061](am503) SID = 41 for select sys_context('USERENV', 'SID') as sid from dual
[0063][C][L][r1005][(ctx32) /faces : /firstam-tx-btf/empVoFirstViPage] onAfterDoPoolMessage() : [(am501) FirstAppModule (is root)][(ses101) MESSAGE_TYPE_RELEASING (2) STATUS_SUCCESS (8) (rp 3)]
[0064](am501) SID = 41 for select sys_context('USERENV', 'SID') as sid from dual
Notice that nested Application Module instances are created, resulting in one database session SID value per request.
- "maml-log-20130113-jdev111230-tx.txt" : when using JDeveloper 11.1.2.3.0 and the "Always Begin New Transaction and Always Use Existing transaction" scenario :
[0002][C][L][r1001][(ctx31) /faces : /secondIndex] logContextInformation() :
[0003]#{a_versionBean.appVersionInfo} = OneSizeOneRootAMApp v0.03 : oracle.jbo.Version = 11.1.2.62.76
[0052][C][L][r1005][(ctx32) /faces : /firstam-tx-btf/empVoFirstViPage] onAfterPrepareModel() : task-flow = /WEB-INF/btf/firstam-tx-btf.xml#firstam-tx-btf (no page-fragments)
[0053]transaction type = Always Begin New Transaction, DC scope = isolated DataControlScopeType, DC frame = dw58co387_4, open transaction = dw58co387_4, is transaction dirty = false
[0059][C][L][r1005][(ctx32) /faces : /firstam-tx-btf/empVoFirstViPage] onAfterPrepareModel() : task-flow = /WEB-INF/btf/secondam-tx-btf.xml#secondam-tx-btf (no page-fragments)
[0060]transaction type = Always Use Existing Transaction, DC scope = shared DataControlScopeType, DC frame = dw58co387_4, open transaction = dw58co387_4, is transaction dirty = true
[0070][C][L][r1005][(ctx32) /faces : /firstam-tx-btf/empVoFirstViPage] onAfterDoPoolMessage() : [(am501) FirstAppModule (is root)][(ses101) MESSAGE_TYPE_RELEASING (2) STATUS_SUCCESS (8) (rp 3)]
[0071](am501) SID = 38 for select sys_context('USERENV', 'SID') as sid from dual
[0073][C][L][r1005][(ctx32) /faces : /firstam-tx-btf/empVoFirstViPage] onAfterDoPoolMessage() : [(am502) SecondAppModule (is root)][(ses101) MESSAGE_TYPE_RELEASING (2) STATUS_SUCCESS (8) (rp 3)]
[0074](am502) SID = 38 for select sys_context('USERENV', 'SID') as sid from dual
Notice that two root Application Module instances are used in the same request (and no nested instances), and both (am501) and (am502) report using the same database session SID value. That seems to be "Bruce" [1] at work.
Remember, it should not be difficult (and not intrusive) to configure similar logging for other ADF applications.
- [1] seeblog post "Task flows: Sayonara auto AM nesting in 11.1.2.0.0. Hello, ah, let's call it Bruce."
at http://one-size-doesnt-fit-all.blogspot.com.au/2011/08/task-flows-sayonara-auto-am-nesting-in.html
regards
Jan Vervecken -
Does the Livecache SID always have to be LCA ?
We have installed APO Livecache with SID other than LCA and I'm being told that it has to be LCA always ?
Is this true ?
If it is, why is the install tool gives the option to pick a SID ?
Or is there a config setting in SAP to change this default setting ?
Thank youHello Ravi,
Please check the SAP Note No. 829963.
Please review the documents at service.sap.com/scm ->mySAP SCM Technology:
"mySAP SCM Technology" & "liveCache overview " .
In case of a new installation of the liveCache/LCA, you have to create the connections LCA/LDA/LEA
as described in the installation documentation for the SAP liveCache technology - using
Transaction LC10. For example, review the document at
service.sap.com/instguides -> mySAP Business Suite Applications->
mySAP SCM -> Using SAP SCM 5.0 Server->
"Installation - SAP liveCache Technology " in the section
"Common Post-Installation Activities" - "Setting Up the Connection to the liveCache Instance".
Please review the information at service.sap.com/liveCache ->Release Information ->
SAP LC/LCAPPS 5.0
You could run /n/sapapo/om13 -> checks & see the status for LCA & LDA & LEA
connections. If the connection is marked by the red semaphore => check errors in /nsm21.
You could run the test connection for LCA & LDA & LEA in db59 transaction and review the results.
Please open the OSS ticket to the component 'BC-DB-LVC' or 'BC-DB-LCA' if you have further
questions on this issue.
Thank you and best regards, Natalia Khlopina -
Can i track source of purchase?
Can i track source of purchase? For example, i want to track how much purchase has been from official web-site and how much purchase has been from web-site of your partners. Can i do this with apple app store?
You not anderstand me. I want to track how much purchase has been by users from official web-site (bunner or url) and how much purchase has been by users from web-site of our partners (for example, review or article about game).
-
Dbm_getf_error (Tcode DB13)
Hello!
I have the following error, entering the tcode DB13
Name und Server : <SAPSID> - server1020
DBMRFC Function : DBM_GETF
Command : DBAHIST DATE=20060907
Error : Systemerror
error message : timeout during allocate / CPIC-CALL: 'ThSAPCMRCV' : cmRc=20
dbm_getf_error
Meldungsnr. SADA001
What can be done in order to solve the problem?
Thank you very much!Dear Mr. Heinemann,
1)"I have patched my kernel and disp+work."
What version of the SAP kernel do you have on your system?
What versions of the tp tool & sapdbmrfc?
What is OS of the application server?
2) What are the versions of the database software packages installed
on the application server ?
Please update with output of the command 'sdbregview -l'
< see SAP note 822239 >.
3) Please run checks in the transaction /nstms-> Import Overview -> go to the 'Import queue'
-> Check -> Transport tool
< For example, review the SAP notes 47392 & 97993 >
tp pf=/usr/sap/trans/bin/TP_DOMAIN_<SID>.PFL getdbinfo <SID>
4) Please repeat the Connection Test in /ndb59 for selected Database Connection & update with 'Connection Test Log'.
Please also check errors in /nst11 in the logs dev_rd, dev_rfc,dev_w
Please check in the Connection Test log - General Connection Data :
Connection Name....:
Database Name......:
Database Server....:
tp Profiles .......: no_longer_used < ?? >
And run in /nsm49, using dbmcli tool :
-d <SID-Database Name> -n <Database Server> -tpi <SID-system> -tpc <SID-connection name> -tpp no_longer_used db_state
or
-d <SID-Database Name> -n <Database Server> -tpi <SID-system> -tpc <SID-connection name> -tpp no_longer_used info state
5) Please also check, if you will get errors in /nsm49, using dbmrfc tool -> Execute
6) You reported the error: dbm_getf_error - Meldungsnr. SADA001 above.
Please run the tests in /nsm49, using dbmgetf tool:
-d <SID-Database Name> -n <Database Server> -tpi <SID-system> -tpc <SID-connection name> -tpp no_longer_used -l
< to review the list of the files ID => see if DBAHIST is listed >
-d <SID-Database Name> -n <Database Server> -tpi <SID-system> -tpc <SID-connection name> -tpp no_longer_used -k DBAHIST DATE=20060907
-d <SID-Database Name> -n <Database Server> -u control,<control> -k DBAHIST DATE=20060907
7) Did you already open the OSS message, where you reported this problem?
Thank you and best regards, Natalia Khlopina -
Disable synchronization in Mail
This request is probably the opposite of what everyone else wants, and that´s why I can´t find the answer anywhere.
I have 2 macs using Mail, and with the 3 same e-mail accounts set up in both. I used to have POP mails, and a few weeks ago I changed to Imap. That´s when my "problems" started.
If I open, read, delete etc. anything in Mail.app on one of the macs, the other one automatically updates what´s been going on. I want this feature disabled. My e-mails are for work, so if I read them at home, I want them to show as unread on the other mac when I go to work, so that I don´t forget which e-mail are new and not.
Please help me out here if anybody knows how and why this suddenly happened!
Thanks
-CathrineWhat you're describing is the nature of IMAP e-mail. All of your messages are stored on the IMAP server, and it is the "master copy." When you read a message with one computer, it gets marked as read on the server. When the other computers contact the IMAP server, they update themselves to reflect the status of the messages stored on the server. Also note that the same holds true for any messages that you delete. Once a message is deleted from the server, it will be deleted from all of your computers.
This is very different from POP e-mail. POP does not provide any mechanisms for changing the status of a message on the POP server.
There is, however, one big advantage to IMAP that you can use here. IMAP supports folders on the server for storing messages (POP does not). The default folder is the Inbox. You could create another folder (for example, "Reviewed"), and move messages to that folder after you read them. That way, anything you leave in the Inbox is still "waiting for me to act on it," while anything you have moved to the Reviewed folder is "already acted on." The messages in each folder will be automatically synchronized on all of your computers.
After you first create the new folder, you might need to choose the "Synchronize All Accounts" option under the "Mail" menu on each computer, to make sure it knows about the new folder. You'll only need to do that once.
Maybe you are looking for
-
Does the third generation iPod Nano have allot of problems with it?
I was wondering if you think that there is an unusual ammount of defective iPod nanos, or iPod nanos with problems. I know that forums are mainly a support page, so I'm only going to see posts about PROBLEMS with the iPod, but i wanted some opinions.
-
Can no longer send mail with Airport Extr
I can no longer send e-mail with Mac Mail.This problem cropped up all of sudden this morning. The problem appears to be with my Airport Extreme. If I bypass the router and go straight to the modem, I am able to send mail. After I connect the Extreme
-
Running my application from command prompt
Hi im a student and kind of a rookie. My program runs fine from eclipse but when i run from command prompt it gives: Exception in thread "main" java.lang.MoClassDefFoundError: Mainclass This is what i am typing: java Mainclass. And i am sure i am in
-
Weblogic server 5.1 restarted automatically
Hi, I am using weblogic 5.1 with SP 13. While accessing the pages, frequently it is throwing HTTP> Connection failure java.net.SocketException: Connection reset by peer at weblogic.socket.NTSocketMuxer.processSockets(NTSocketMuxer.java, Compiled
-
Why pre-configured Solaris VM with 5 (!) virtual hard discs ?
I downloaded the pre-configured Virtual Machine of Solaris Express Edition for VmWare and extracted it as described. Much to my surprise I found 5 (!) *.vmdks According to my knowledge these represent 5 independent virtual hard discs. Why this ? Can