Stateless with Session Affinity and set jbo.ampool.maxpoolsize = 1

Hi,
I would like to know more about "Stateless with Session Affinity".
If I set
jbo.ampool.maxpoolsize = 1
jbo.ampool.minavailablesize = 1
jbo.ampool.maxavailablesize = 1
in application module configuration
and have two browser clients at different computers.
If I update some values and post changed data to database without commit
at one browser
some updates using jdbc prepared statements through database connection
with following code snippet in application module
Implementation:
private Connection getCurrentConnection() throws SQLException {
PreparedStatement st = getDBTransaction().createPreparedStatement("commit",1);
Connection conn = st.getConnection();
st.close();
return conn;
, will the other web client see these post changed data with the only one
application module through the only one database connection (ignores PS_TXN connection)?
If the answer is "no", can someone explain why bc4j can do this?

Hi,
It's not clear to me from your post what you are trying to test. Generally speaking, every HttpSession (~browser) is assocated with a pooled AM that is associated with a single transaction context that is associated with a single "application" JDBC connection.
HttpSession->AM->Txn->Connection
The session affinity features of the BC4J framework maintain this logical dependency for you without necessarily having to tie up the physical resources at each layer.
Now, if one session posts but does not commit then the other sessions will not "see" those changes (different AMx, Txns, Connections). Once a session does commit then those changes will be visible to other sessions. However, if those other sessions have already queried/cached the modified data then those sessions will not "see" it until their caches are refreshed. Please see the documentation for a description of BC4J caching and refreshing caches. The standard technique to refresh a VO cache is to invoke executeQuery.
Hope this helps,
JR

Similar Messages

  • How to correctly set jbo.ampool.maxavailablesize and minavailablesize ?

    Hi all,
    On performance tuning of our ADF BC application, during load test I notice from application server (10.1.3.3) console that :
    Request Processing Time (seconds) 11.45
    Requests per second 7.91
    From the docs, it is recommended to set both jbo.ampool.maxavailablesize and minavailablesize to be mutiplication of the above values, i.e : 90.
    We have about 12 application modules (AM) in the application, no nested one.
    The question is :
    1) Should I set maxavailablesize and minavailablesize of ALL the 12 application modules to be 90 ?
    Or Should I set the values selectively based on which AMs mostly accessed by the application invoked by the user ?
    2) After I change the maxavailablesize and minavailablesize to be 90, I notice that just after the OC4J start and no user access the application yet, the database already has 20-30 sessions opened, Is this normal ?
    Thank you for your help,
    xtanto

    Can you be more specific about what docs are recommending this? I don't see why you would want the max available size and min available size to be the same thing, but I'd like to review what documentation you are referring to for context.
    max pool size puts an upper limit on the number of AM's that can be created in that pool. If you hit this limit users wait until one of the existing instances is freed up.
    max available size gives a desired maximum that the pool should shrink down to after a period of higher-than-expected load.
    the min available size is the lowest number that the AM pool can shrink down to when the system is less loaded.
    I'd need to see all of your pool parameters, understand if you're using JDBC datasource or URL connection, and understand whether you use jbo.doconnectionpooling= true or false to explain any given set of behavior.

  • Issue with Gregorian Calendar and setting Day of the week

    Hi
    This may have a simple solution, but its currently got me stumped. Basically, after some calculation I determine the date that a particular event should occur on. These events are listed in a JTable where the column headers are the dates of the beginning of the weeks. In order to place my calculated event in the correct column I create a Gregorian Calendar, set it to the date of the event and then set the day of the week to the beginning of the week. Normally this works fine but for a few instances, rather than getting the date at the beginning of the week, I get the date thats the beginning of the next week.
    As a quick example, to kind of illustrate my problem:
    I determine that the date of the event is 27/06/2006 which is a Tuesday.
    I want this event to appear in the column headed 25/06/2006, the date of the beginning of the week.
    In fact it appears in the column headed the 02/07/2006 which is the beginning date of the following week.
    Is there anyway to get it so when I set the day to the first day of the week it goes to the beginning of the current week rather than the beginning of the next week?
    Any suggestions would be gratefully recieved as I'm currently struggling to think of any.
    Thanks

    Hi, I dont say Monday is the begining of the week. At least I dont think I do.
    As for code I'll post the conversion bit which is:
    for (int i = 0; i < areaNameSelectionTable.getRowCount(); i++) {
    GregorianCalendar conversionCalendar = new GregorianCalendar();
    conversionCalendar.setTime((java.util.Date) prioritiesTable.getValueAt(i, 10));
    conversionCalendar.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.SUNDAY);
    }//end for loopI then create a string from the GregorianCalendar in the format DD/MM/YYYY and compare that with the headers of my table columns (Also dates in the format DD/MM/YYYY) When they match thats the column this particular event should appear in. I can post this code if necessary, but I dont know if its relevant.
    Thanks

  • Poor interface with Adobe CS4 and setting the file size for emails

    In frustrations over an unfixed bug in iPhoto (slide shows) in addition to too many limitations, I am trying out Aperture. So far it has been a big disappointment. I like Photoshop (CS4) with layers etc. as well as Adobe Camera Raw, both of which I intend to continue using. The workflow in Aperture appears disappointing (Photoshop) and totally absent (Adobe Camera Raw). It seems like Apple's attempt to capture some of Adobe's market share has has happened on the consumer's expense? Besides disappointing functionality, I have run into a surprising problem: No matter how I set the email photo export preset in preferences, the attachment shows up as a large file when exported to Entourage. The size does not change no matter how I set this preference.
    My 21 years of loyalty and enthusiasm towards Apple has taken some heavy blows lately. With some 15000 photos and 35+ albums in iPhoto, I don't see too many alternatives. Can someone tell me if there is a way around these problems.

    First of all I am not comparing Aperture to Photoshop by expecting the layers function. It is the interface between the two I am questioning. We obviously also have different expectations to Aperture. Mine are solely based on my experiences with iPhoto and what Apple tells me on their website:" Aperture 3 is a professional photography application that lets you refine images, showcase your photography, and manage massive photo libraries. Aperture 3 gives you all the easy-to-use tools you need to import, organize, compare, enhance, and share your photos." I do not find a single sentence stating that it is primarily a "Raw image editor processor" as you are defining it. I was not looking for a new raw editor. I was, however, based on Apple's claims above, expecting a combined advanced editing an photo library application. As such I also expected layers. That is not comparing it to Photoshop. Naturally our views are based on expectations and experiences, and ours are just different, that is all.

  • Small problem with meta refresh and setting url

    I'm using the following line of code in my jsp.
    <meta http-equiv="refresh" content="<c:out value='${pageContext.session.maxInactiveInterval+60}'/>">This works fine in that 60 second after the session times out the refresh is called. This then goes into my action class and checks to see if my user object is still in session. It does not find it and forwards it to my login page with a message saying the session timed out.
    this works just fine
    Now instead of this happening I want to forward to an error page.
    so I can add a url into the content section of the tab... but when I try to use a
    <c:out value='${pageContext.request.contextPath}'/>this evaluates to nothing.. so that then the forward is to /sessionTimoutError.jsp instead of /appName/jsp/sessionTimeoutError.jsp.
    So my question is more of a verification. Is it true then that when the session times out it has absolutely nothing to do with struts and java.. and that when the refresh actually gets called and forwards it back to the logoff page that I've in effect created a new session that will timeout in 60 minutes and call a refresh in 61minutes?
    So the only way I can think of forwarding to the other page would be to change the forward in my action class... but changing this is not worth modifying all the action classes.. and I can't just change the definition of the forward since other places use that forward and I don't want to change them either...
    any othe ways anyone could think of doing this without hardcoding any url's in?

    Is it true then that when the session times out it has absolutely nothing to do with struts and java.Nothing to do with Struts, it's about JSP/servlet stuff specifically.
    <meta http-equiv="refresh" content="61; url=/timeout.html">that's the proper format, so you can dynamically write whatever URL you want.
    and that when the refresh actually gets called and forwards it back to the logoff pageOnly if the page that's reloaded checks for the valid login info and forwards. This is a common way to do it, of course.

  • Known Issues with Session Vars and non-IE browsers?

    Are there any known issues with non-Internet Explorer
    browsers storing or reading session variables. Or loops and
    ListGetAt functions? I'm using CF 5.
    The code works fine in IE, but not in FireFox or Netscape.
    Thanks,
    Josh

    This testing will not really address any cross domain issues, due to the content being hosted by ScormCloud.
    What I found interesting, is that in ScormCloud, using the links below, my results were opposite those that I obtained through my LMS.
    In LMS, Captivate 5 worked, Captivate 6 did not in IE8, both worked in FF
    In ScormCloud, Captivate 5 did not work in IE8, but worked in FF, and Captivate 6 did work in FF and IE8.
    Here are the links:
    captivate 5 http://cloud.scorm.com/sc/InvitationConfirmEmail?publicInvitationId=3c04f298-d0db-4d10-ab6 3-80b9aaf2890b
    captivate 6 http://cloud.scorm.com/sc/InvitationConfirmEmail?publicInvitationId=e2b05753-2f03-421a-87d 9-62b92ad199af
    Thanks for your attention, every bit of information that I can get will help.
    Thanks,
    SL

  • WebService with Session manager and Connection pooling

    I've created many a Oracle users in our RDBMS. It comes to this, that every
    user in our Company has its own oracle account.
    We are developing now a Web application (Internal information system) for my
    Company.
    This Web application will have GUI created in perl and middle tier will be
    Oracle WebServices.
    This WebServices will be connected to the DB for every oracle user and it also
    must have a session management.
    And this is a Action plan:
    1. the user will log to the Web GUI with his oracle login name and a password
    2. this oracle user name and the password will be sent from this Web app to the
    WebService
    3. this WebService will create a connection over a JDBC (not over DataSources)
    and will create also a session (maybe like a servlet)
    4. in this session the instance of the created connection for this user will be
    saved and the WebService will return to the Web app the session id
    5. and this session id will be then used for further calling of WebServices
    Then comes another user, signs up over the Web app with his oracle account and
    this whole process repeats.
    Finally every logged user will have its own session id with his own connection
    instance to DB.
    Maybe it's possible, that it will work only with Servlet (with HttpSession) and
    WebService created from this Servlet.

    Take a look at the Statefull Java Web Services. It may be able to handle your use case.
    http://download-west.oracle.com/docs/cd/B14099_04/web.1012/b14027/javaservices.htm#i1027664
    You should be able to cache the database connection, directly in your service implementation class.
    Hope this helps,
    Eric

  • Problem with pdf export and setting of the paper size

    Hi,
    I develop plugins for InDesign server.
    Can anybody suggest me an way to exports a pdf/ps file from a indesign document with my custom adjustment of the output "paper" size?
    I tried with kPrintActionCmdBoss but the "SavePDFAs" popups although I set kSuppressEverything(!?)
    When I used kPDFExportCmdBoss I cannot set paper size.
    greetings

    The helper class using IText:
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import com.lowagie.text.Document;
    import com.lowagie.text.DocumentException;
    import com.lowagie.text.pdf.PdfContentByte;
    import com.lowagie.text.pdf.PdfImportedPage;
    import com.lowagie.text.pdf.PdfReader;
    import com.lowagie.text.pdf.PdfWriter;
    public class PDFHealer
       public static InputStream heal(InputStream in) throws DocumentException, IOException
          try
             ByteArrayOutputStream out = new ByteArrayOutputStream();
             PdfReader reader = new PdfReader(in);
             // we retrieve the total number of pages
             int n = reader.getNumberOfPages();
             // step 1: creation of a document-object
             Document document = new Document();
             // step 2: we create a writer that listens to the document
             PdfWriter writer = PdfWriter.getInstance(document, out);
             // step 3: we open the document
             document.open();
             // step 4: we add content
             PdfContentByte cb = writer.getDirectContent();
             int i = 0;
             while( i < n )
                document.newPage();
                i++;
                PdfImportedPage page1 = writer.getImportedPage(reader, i);
                cb.addTemplate(page1, 0, 0);
             // step 5: we close the document
             document.close();
             ByteArrayInputStream ret = new ByteArrayInputStream(out.toByteArray());
             out.close();
             return ret;
          finally
             in.close();

  • Install changes my path ( with no auth ) and sets it wrong ?

    Hi,
    oracle installs two jre 1.3.* and 1.1.*.
    Adds the paths to both bin dirs to the system enviroment.
    ( I'd like to be asked if i want to change my enviroment ).
    So i go on convinced i'm using jre 1.4 that i always append at the END of the path
    ( since i do NOT that there are already two jre paths in it )
    But this would be fine, after all, if it worked !!
    Instead i had to spend days trying to understand NoClassDefFoundError(s)
    [ java.sql.DataSource, java.sql.Savepoint ]
    until i discover that oracle forced me to use:
    1. on my system
    2. for any java invocation
    3. with no explicit authorization
    a jre different from the one i wanted to use.
    I froce my program to run on the jre I installed on MY system and ORACLE's program
    ( eg. OCIConnectionPool.java ) wirks fine.
    Regards
    Alessandro Scotti

    Hi,
    oracle installs two jre 1.3.* and 1.1.*.
    Adds the paths to both bin dirs to the system enviroment.
    ( I'd like to be asked if i want to change my enviroment ).
    So i go on convinced i'm using jre 1.4 that i always append at the END of the path
    ( since i do NOT that there are already two jre paths in it )
    But this would be fine, after all, if it worked !!
    Instead i had to spend days trying to understand NoClassDefFoundError(s)
    [ java.sql.DataSource, java.sql.Savepoint ]
    until i discover that oracle forced me to use:
    1. on my system
    2. for any java invocation
    3. with no explicit authorization
    a jre different from the one i wanted to use.
    I froce my program to run on the jre I installed on MY system and ORACLE's program
    ( eg. OCIConnectionPool.java ) wirks fine.
    Regards
    Alessandro Scotti

  • Help with Verizon Router and Setting Up a Second Wireless Router

    I had my network set up until I had intermittent loss of the internet.  So I received a new Verizon router and I cannot figure out how to use the second wireless router which I used to have working just fine.
    The new Verizon router is the Actiontec MI424WR and it is installed in my basement and the signal is weak.  However there is a cat5 wire snaked up from the Actiontec router to my home office.  Currently that is plugged into the back of my computer for internet acess.  My second router is the Trendnet 300Mbps Wireless N Home router.  ANd this is the router that I would like to use (and used to use) to trasmit the internet connection throughout the house as well as use for a wired connection to my home security system.
    I attempted to plug the cat5 wire from the Actiontec into the back of the Nextrend router (1,2,3,4 and not the WAN) but then would lose the internet signal whether I attempted to log on via wired or wireless. Must be some kind of settings I need to change.
    Can anyone help me to understand how to add the second router?  I am relatively computer literate but cannot understand the instructions from Verizon.  Thanks in advance.
    Solved!
    Go to Solution.

    I point you to http://www.dslreports.com/faq/12506
    If you have any questions, please ask.
    If you are the original poster (OP) and your issue is solved, please remember to click the "Solution?" button so that others can more easily find it. If anyone has been helpful to you, please show your appreciation by clicking the "Kudos" button.

  • HT204161 How can I reconnect with new PC and set up a network

    I am using an iOS 8.2 on Apple iPad 2.  How do I reconnect with a Home network ?  If so, how do I do it?

    Go to Settings > WiFi, tap on the name of your network when it appears, enter your password and then hit join.

  • ADF 10g: AM pool dropped to zero after the jbo.ampool.timetolive is reached

    Hi,
    JDev: 10.1.3.2.0.4066
    I have a problem where all appModules in the application module pool are removed when the jbo.ampool.timetolive threshold is reached, even the currently referenced ones. This causing serious performance issues in our application. I have seen reports from Steve Muench on his blog (http://radio-weblogs.com/0118231/2006/03/30.html) that this issue can happen under certain circumstances but the link is broken, so am not sure what the reason is. Does anyone have a link to where this was moved to? Steve also has added (Disabling jbo.ampool.timetolive on this forum of how to "disabled the time to live consideration" but the timetolive is still removing all the appModules in the pool. Why is the pool being completely wiped out after the timetolive?
    Here is the BC4J configuration that is being used:
    NB:
    * web session timeout is 45 minutes
    * I am using a JDBC pool as well
          <AppModuleConfig name="Oracle">
             <DeployPlatform>LOCAL</DeployPlatform>
             <JDBCName>cvclaims_Oracle</JDBCName>
             <jbo.TypeMapEntries>Java</jbo.TypeMapEntries>
             <jbo.project>Model</jbo.project>
             <AppModuleJndiName>my.adf.root.RootAppModule</AppModuleJndiName>        
             <java.naming.factory.initial>oracle.jbo.common.JboInitialContextFactory</java.naming.factory.initial>
             <ApplicationName>my.adf.root.RootAppModule</ApplicationName>        
             <jbo.locking.mode>optimistic</jbo.locking.mode>        
             <jbo.ampool.initpoolsize>50</jbo.ampool.initpoolsize>
             <jbo.ampool.maxpoolsize>100</jbo.ampool.maxpoolsize>
             <jbo.recyclethreshold>50</jbo.recyclethreshold>
             <jbo.ampool.maxavailablesize>50</jbo.ampool.maxavailablesize>
             <jbo.ampool.minavailablesize>50</jbo.ampool.minavailablesize>
             <jbo.poolmaxavailablesize>51</jbo.poolmaxavailablesize>
             <jbo.maxpoolsize>51</jbo.maxpoolsize>
             <jbo.initpoolsize>51</jbo.initpoolsize>
             <jbo.poolminavailablesize>51</jbo.poolminavailablesize>
             <jbo.ampool.maxinactiveage>2760000</jbo.ampool.maxinactiveage>
             <jbo.ampool.monitorsleepinterval>60000</jbo.ampool.monitorsleepinterval>
             <jbo.ampool.timetolive>2850000</jbo.ampool.timetolive>
          </AppModuleConfig> Here is the code that logs out a user:
                    // Check whether the URL is the LOGOUT URL
                    if (requestURL.endsWith(logoutUrl)) {
                        // Log out, invalidate the session.
                        // Tried the patch mentioned in this thread with no change:
                        // ADF BC/ Faces - Logout exception
                        // This linked blog reports that the below ADFContext
                        // addition fixed it:
                        // http://vgoldin.blogspot.com/2007/02/adf-invalidating-web-session-in-apache.html
                        // but there may be more than one problem here.
                        // Others have suggested just wrapping the invalidate code
                        // in try/catch.
                        // Trying both here.
                        try {
                            ADFContext.getCurrent().removeScope(ADFContext.SESSION_SCOPE);
                        } catch (Exception e) {
                            e.printStackTrace();
                        try {
                            session.invalidate();
                        } catch (Exception e) {
                            e.printStackTrace();
                        MDC.remove(MDC_USERNAME);
                        if (!logoutDestinationUrlChecked && logoutDestinationUrl.startsWith("/")) {
                            logoutDestinationUrlChecked = true;
                            logoutDestinationUrl = request.getContextPath() + logoutDestinationUrl;
                            // relative path, prefix with request context path;
                        log.debug("Session is invalidated, redirecting to " + logoutDestinationUrl);
                        // we do redirect instead of forward so that this filter
                        // will be visisted again for the requested logout
                        // destination
                        // forcing a new login when applicable.
                        response.sendRedirect(response.encodeRedirectURL(logoutDestinationUrl)); DumpPoolStatistics.jsp page output
    This page is explained in Steve Muench's blog
    head:Application module lifetime statistics
    Number of application module creations,3208
    Number of application module removals,3184
    head:State management statistics
    Number of transactional state activations,2073
    Number of transactional state passivations,2873
    head:Application pool use statistics
    Number of application pool check outs,193821
    Number of application pool check ins,193818
    Number of referenced application modules that were reused,183071
    Number of referenced application modules that were recycled,0
    Number of unreferenced application modules that were recycled,7594
    Number of application pool check out failures,8
    head:Application module statistics
    Total number of application modules in the pool,24
    Maximum number of application modules in the pool,50
    Average number of application modules in the pool,23
    Total number of available application modules in the pool,21
    Average number of available application modules in the pool,21
    Average number of unavailable application modules in the pool,2
    Total number of referenced application modules in the pool,24
    head:Application module age statistics
    Number of referenced instances unused for >10 min,7
    Number of referenced instances unused for >5 min,2
    Number of referenced instances unused for >1 min,6
    Number of referenced instances used during last 1 min,9
    Number of instances unused for >10 min,0
    Number of instances unused for >5 min,0
    Number of instances unused for >1 min,0
    Number of instances used during last 1 min,0
    head:Session statistics
    Number of sessions registered with the pool,32
    Average number of sessions referencing transactional state,427
    head:Session age statistics
    Number of sessions inactive for >10 min,14
    Number of sessions inactive for >5 min,2
    Number of sessions inactive for >1 min,7
    Number of sessions active during last 1 min,9 The above DumpPoolStatistics page shows the AM pool shortly after the timetolive has kicked in. There is 24 app modules in the pool despite the jbo.ampool.minavailablesize being 50. There is also 32 users in the application so I would of expected there to be a corresponding number of appModules.
    Thanks
    Barry
    Edited by: Bar on Mar 9, 2011 5:18 PM
    Edited by: Bar on Mar 9, 2011 5:20 PM

    I believe my problem is that the jbo.ampool.minavailablesize is higher than the normal load on the system. This is stopping app modules to be removed once the jbo.ampool.maxinactiveage time is reached, therefore the only time an AM is removed is when the jbo.ampool.timetolive limit is reached.
    e.g.
    * 35 users log into the application in the morning. The AM pool contains 35 AM's
    * GC on the pool happens. If an AM has reached the jbo.ampool.maxinactiveage then they will not be removed because it would mean that the pool (currently 35) drops below the jbo.ampool.minavailablesize (50)
    * GC happens again and the jbo.ampool.timetolive threshold is now reached on all AM's so they are all removed from the pool.

  • 10g vs 11g: VO bind variable values stale on jbo.ampool.doampooling = false

    Hi gang
    (JDev 11g Build 5188)
    I'm currently doing some testing as recommended by the Fusion 11g Guide to test the ADF BC state management with jbo.ampool.doampooling = false (see sections 36 and 37). I'm seeing different behaviour under 11g vs 10g.
    I have a single updateable VO with a query restricted by a single bind variable. I have a single JSF page with the bind variable as an inputText control, the executeWithParams operation as a commandButton, and a table showing the results from the VO.
    Under 10g I can:
    1) Open the page
    2) Enter a value (say X) for the bind variable, hit the executeWithParams button and correctly see results in the table matching bind variable value X.
    3) Enter a different value for the bind variable (say Y), hit the executeWithParams button and correctly see results in the table matching value of the bind variable value Y.
    Under 11g I get different behaviour for # 3. Instead when I press the executeWithParams button with the value set to Y, the table still show results for the previous bind variable value X?
    It must be noted that if I set jbo.ampool.doampooling = true, the problem disappears, but presumably the error will reappear in a production system under load, so I need to track down what's happening here.
    Possibly I'm seeing a bug, but given the large amount of 11g changes and large amount of documentation I need to read on state management, it could just be I've missed something vital for 11g.
    Does anybody have any opinions what's happening here?
    Thanks for your help in advance.
    CM.

    Hi Chris,
    Yes, waking up in my lair after the long winter ;-)
    No problem for the version numbers.
    The reason I was asking was that the referenced issue was reported for JDeveloper 10.1.3.4.0
    So I'm not convinced this is the same issue.
    Bug 7517882 is fixed in 11.1.1.1.0, but a patch is available for 11.1.1.0.1
    I checked I could download it myself:
    1) in (classic) MetaLink, click tab "Patches & Updates"
    2) click "Simple Search"
    3) select "Search By" "Patch Number"
    4) enter the patch number: 7517882
    5) select the Platform "Microsoft Windows (32 bits)"
    6) click "Go"
    7) Download the patch for version 11.1.1.1.0
    8) click "View Readme" and follow instructions to install the patch.
    If you have any problem, open a SR requesting a support engineer to upload the patch on our FTP server.
    I would recommend you test the patch to ensure this is the same issue and the problem is fixed in your case after applying the patch.
    If not, you can easily de-install it anyway.
    For completeness, the following bugs were closed as duplicated of Bug 7517882
    Bug 7553275 - VOIMPL.GETBINDVARIABLE() RETURNS NULL AFTER APPLICATION MODULE ACTIVATION.
    (logged against 10.1.3.4.0)
    Bug 7556903 - JDEVELOPER 11G EXECUTEWITHPARAMS DOES NOT WORK CORRECTLY WITH AMPOOLING OFF
    (logged against 11.1.1.0.0)
    Regards,
    Didier.

  • Session state and browser cache - Back button problem

    Hi all,
    I have a problem (and unless I'm missing something I think we all do) with session state and use of the browser's Back button. I really hope I'm just being dumb...
    Background scenario:
    Page P has a sidebar list allowing the user to select what content is displayed (e.g. 'stuff relating to X, Y or Z' where X, Y and Z are rows in, say, a table of projects). When a list entry is clicked, we branch to page P with the value of the list item placed in an application-level item (call it G_PROJECT). Reports on page P use G_PROJECT in their WHERE clauses.
    So, click list entry X and G_PROJECT is set to X and page P shows reports for project X.
    Page P also has a set of buttons which branch to various edit pages which allow attributes of page P's current project to be updated. These pages similarly use G_PROJECT in their WHERE clauses.
    Problem scenario:
    1. The user goes to page P and picks project X off the list. Project X's stuff is displayed (G_PROJECT = X).
    2. The user then picks project Y off the list. Project Y's stuff is displayed (G_PROJECT = Y).
    3. The user then clicks the browser's Back button. The page is served from browser cache, so project X's stuff is displayed, but G_PROJECT still = Y.
    4. The user clicks an 'Edit' button; we submit, and branch to an edit page which displays (and will edit) data for project Y because G_PROJECT still = Y.
    This is SERIOUSLY BAD NEWS - apart from being confusing, the user's edit permissions on projects X and Y may differ, and so the user may be able to perform 'illegal' updates.
    I've read what I can on this forum and the rest of the web looking for ways to a) inhibit browsers' 'Back' functions and/or b) prevent pages being cached by the browser, but none of them have worked for me.
    Short of waiting for browser manufacturers to recognise that the web is now full of applications as well as static pages, and enable robust programmatic control of cache behaviour, does anybody know how the problem can be avoided - or at least detected?
    Thanks,
    jd
    Failed attempts to date:
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="cache-control" content="no-store">
    <meta http-equiv="cache-control" content="private">
    <meta http-equiv="cache-control" content="max-age=0, must-revalidate">
    <meta http-equiv="expires" content="Wed, 09 Aug 2000 01:01:01 GMT">
    <meta http-equiv="pragma" content="no-cache">
    Disallowing duplicate submission (page attribute).
    window.history.go(1);

    Thanks Scott,
    I may be being dumb here but I don't see how that would help...
    P250_PROJECT and G_PROJECT are currently kept in sync by app logic. Whichever is used to drive, if the page is rendered from cache then the app logic is not executed, so the rendered page contents are not those keyed by P250_PROJECT, as illustrated in steps 1-4 of the problem above.
    The user sees X, the session items say Y. The engine doesn't know what the user is seeing.
    when page P is POSTed, its hidden item P250_PROJECT should always be used to derive the application item G_PROJECT. Then whether the page was pulled from cache or rendered anew via a click from the sidebar link, the project ID is determined by the contents of that page.
    As I said above I tried this, with the 'Edit' branch set to:
    Set these items: G_PROJECT
    With these values: &P250_PROJECT.
    but it makes no difference. The project ID is not determined by the rendered page contents - the engine gets the value of P250_PROJECT from session state.
    I can code the 'Edit' pages such that they check permissions and if necessary redirect back to p250 (conditional before-header branch), but that's a clunky cure rather than the prevention I was hoping for.
    Please tell me if my understanding is incorrect.
    jd

  • TS4147 i have iphone 4 s in beirut and just bought iPhone 5 s to use in abu dhabi  instead of black berry .. transfered my contacts and set it on my iCloud - when i came back to beirut and used my iPhone 4s my contacts where not the same - i lost a big ch

    i have an iphone 4s , a mac air, ipad4 .... all on same itune and icloud. i live in between 2 cities... i had a blackberry in abu dhabi.... Recently i replaced it with iphone 5 and set it on the same icloud account...
    I had different contacts on each but now all my contacts on my i phone 4s are lost...
    How can i retrieve them ? its all my beirut life .... now its only the abu dhabi contacts ??? what can i do?

    Hi, beth.lau.gr.
    Thank you for visiting Apple Support Communities.  
    I understand you have been experiencing issues with your iPhone restarting and showing you a blue screen.  I wont be able to give you an exact answer as to why this is happening.  However, this is the most relevant troubleshooting article for this issue.  This article also provides options to reach out to us via phone for additional assistance.  
    If your iOS device restarts, displays the Apple logo, or powers off while you're using it
    http://support.apple.com/en-us/HT203899
    Cheers, 
    Jason H.  

Maybe you are looking for

  • SOS..How to execute an Oracle Stored procedure

    Please help me. I need to execute an oracle stored procedure from a JSP. I'M using Jakarta Tomcat and I dont have the Oracle Jbo tags and no BC4j tags. Anyone have an example using standar tags or directives???. This an emergency call..!!!!!!

  • GPF in ORACOMMON8.DLL when SELECTing a BLOB w/OCI

    Hello, This may not be the right Forum for this topic but I didn't know where else to post this... I am using OCI with Oracle 8.1.5 drivers and I am trying to perform a SELECT on a BLOB and a CHAR. When I try to SELECT the BLOB, ORACOMMON8.DLL throws

  • OPMN ERROR while starting

    WHen I try to start the opmn process I get the following error: [oracle@ip-10-0-20-40 bin]$ ./opmnctl startall opmnctl: starting opmn and all managed processes... ================================================================================ opmn i

  • Mac Mail v4.1 stalls after attaching a Word document

    I have had intermittent trouble when attaching a Word doc onto an email. Right after the attachment is made, if I click back into the email body to continue typing, Mail stalls. This has occurred since the upgrade to Snow Leopard.

  • What's the email address of APPLE customer center?

    I'd like to get the email address of Apple Customer Centre as I am going to send a complaint letter in regard to the poor service provided by their designated delivery company Kerry EAS. Thanks.