Detailed use of Sessions

An SDK user recently sent me this query:
So I wrote this parser:
instance.PARSER.assemble = function() {
var idx = 0; // table index
---SNIP---
return true;
I still don't understand when to use "this.PARSER.xxx" and
"instance.PARSER.xxx" or "Record.prototype.xxx".
I guess that's my main problem at the moment (understanding the laxness
of ECMA script - I'm used to use JAVA, C++ and all that stuff)
Also I don't get it which info to put into the newEvt and which one
into sessRec[0]...
And I also don't get when to use the "legacy" attributes and when the
"new ones" (like evt vs EventName) ...
DCorlette
DCorlette's Profile: http://forums.novell.com/member.php?userid=4437
View this thread: http://forums.novell.com/showthread.php?t=449867

And here was my (long-winded) response, which has some details that
folks might find interesting:
1) When the Collector initializes, it creates a few global objects to
keep track of, well, global things.
- One such object is 'instance', which is of class 'Collector' and
represents the actual running Collector instance. We put lots of other
stuff, like the state of parameters, caches, and other "in-memory"
objects into 'instance' as a convenient place to store them (so
'instance.MAPS' holds our maps, for instance).
- In the main Collector loop, we also create (and delete) a couple
other global objects, one of which is 'rec', which represents the next
inbound log record (class 'Record') from the event source.
- Also we create 'e' which represents that output Sentinel event
(class 'Event') that is currently being constructed.
2) In 'normal' Collector flow, the basic idea is that you take the
input record ('rec'), chop it up into pieces (and typically we store
that parsed data back as new attributes of 'rec') and normalize the
data, and then call a conversion routine to "convert" the 'rec' into
'e'. In other words, with rare exceptions you really shouldn't modify
'e' directly, instead you do all your partial parsing on and in 'rec',
and then the conversion to 'e' is dictated by the Rec2Evt DataMap.
3) Also just to make sure this is clear, methods that are declared as
prototypes on a class are members of that class, essentially, sort of
like normal member methods on a Java class. So if you have 'rec', and a
method Record.prototype.foo(), you can call rec.foo() and you'll end up
in a member method (and 'this' will refer to 'rec'). So in general if
you call the method from 'rec' it's a Record class member, from
'instance' it's a Collector member method (and 'this' will be
'instance', and from a Session object (like 'sess' in my example) it's a
Session member method (and 'this' will be the Session).
So you made a comment: "And I also don't get when to use the "legacy"
attributes and when the "new ones" (like evt vs EventName) ..."
The answer here is that the "long" variable aliases are recognized
attributes of the Event class. In most cases, you will NOT access them
directly so it would be somewhat unusual for you to actually write them
in your code. The 'short' tags you're talking about are probably
attributes of the 'rec' object, and those are just temporary variables
you create to hold the partial results from your parsing - they can
actually be anything you want, can be nested into deep structures if you
wish, etc etc. We happen to use the Sentinel internal field names for
convenience and because it helps to indicate (sometimes) the purpose for
which we intend to use that parsed data later on. Ultimately, the only
place you need to care about those 'rec' variables is when you construct
your Rec2Evt.map file that describes how a Record can be converted into
an Event - you'll see those Sentinel long field names on the left (the
*target* Event fields) and you put whatever Record attributes (again,
array references and deep structures in the Record are supported) on the
RHS.
When you're dealing with a Session, however, things get a little wonky.
First of all, you don't have the "simple" logic of 1-1 map from Record
to Event, so in general you don't end up using the global 'e' object as
your output Event (the main loop is typically short-circuited before
e.send() is called). Second, we play some tricks to allow you to
construct Sessions in re-usable ways. Let me explain this second point
first:
A) So, as you know we have a defined Session class. A Session will hold
some number of input Record objects (N+1, since Record [0] is an empty
Record), which then will need to be re-assembled, or parsed, or
summarized, or something. We don't know in advance. As a result, there's
no way we can pre-define a method by which the Session will be parsed -
that's up to you, the developer. So how do you do that?
Well, the first option would be for you to define a *prototype* method
on the Session object. Then when you create a Session in your code, that
method will be available as a prototype. But that can be a little tricky
- we have some scenarios where there are different Session types that
require different parsers, or that the parser may need to be modified
mid-stream. Our solution therefore is to have you create some number of
generic "Session" parsers, essentially as anonymous methods that aren't
attached to anything in particular. For convenience (so we can find them
later), we recommend you put them in the instance.PARSERS bucket, where
there could in fact be other parsers (like SQLOffset parsers). But at
that point the parsers are kind of disembodies parsers that can't really
be used to do anything yet.
At runtime, when you create a Session object, you then determine which
Session parser makes sense for the type of Session you are creating, and
you use the addParser() method to attach one of your stored Session
parsers to the Session. That parser then becomes the canonical parser
for that Session (although you could swap it out later if you wanted
to), and will automatically be called when the Session expires.
B) The second wrinkle is that since you don't have the simple 1-1
Record to Event logic, you have to re-create some of that basic logic
yourself. Your Session parser actually runs in the Session namespace,
and hence 'this' is the Session itself - underneath that you have
sessRecs[0] (a blank record) and sessRecs[1] - [N] which represent the
stored input Records. The general idea is that you would take the bits
and pieces you need from sessRecs[1]-[N] and copy that data into
sessRecs[0] (so it becomes your staging area for parsed data), but
that's optional - you could do it other ways if you really want. For
example, if you know that most of the data you need is already parsed
and in sessRecs[1], then you can just say sessRecs[0] = sessRecs[1], and
you have a copy of the starting record.
The Session object itself has a special send() method that essentially
takes sessRecs[0] and converts it into an Event, but again you don't
have to use that logic if you don't want to. In fact, you could create
multiple custom Rec2Evt DataMaps, multiple output Events from a single
Session, any sort of manipulation is possible. But if you want the
simplest approach, just make sessRecs[0] look like a complete input
Record, and use Rec2Evt.map to define the conversion, then use the
Session.send() method to send it (you need to pass in an Event that has
things like the DeviceEventTime preset, however).
Hope this helps!
DCorlette
DCorlette's Profile: http://forums.novell.com/member.php?userid=4437
View this thread: http://forums.novell.com/showthread.php?t=449867

Similar Messages

  • Defining Business Operations using remote session EJBs for WLI2.1

    Hello all,
    I'm having a deployment issue with WLI 2.1. Is it true that in order to define
    a Business Operation in WLI 2.1 that uses a session EJB, the EJB MUST be deployed
    in the same JNDI tree (WLS instance) that WLI is running on? Is everyone just
    running one admin server that hosts WLI and all other applications on the same
    instance?
    I'd like to have WLI running on one machine and have my applications running on
    another, but at this point seems unobtainable because you cant supply a t3 URL
    to that separate machine when defining Business Operations...
    Any help would be appreciated,
    Jon

    I am new to WLPI and have run across this problem as well. Could you
    provide more detail your proxy session bean and maybe include some
    example code? Thanks.
    Regards,
    Rick H.
    "Paul Rooney" <[email protected]> wrote:
    >
    I have come accross the same problem - solved it by using a "proxy" session
    bean
    that knows how to call out to all the Remote EJBS that I need. This "proxy"
    session
    bean is deployed with wlpi application.
    "Erik Godding Boye" <[email protected]> wrote:
    We would like to define business operations in WLI calling EJBs on a
    remote machine.
    It seems like the EJB have to be deployed locally to appear in the (JNDI)
    drop-down
    list when defining the business operation.
    Is the only way to achieve this functionality to write (or generate)
    some kind
    of wrapper EJB that will be deployed locally, or do you have other suggestions?
    Regards,
    E
    PS: We're using WLI 2.1 running on WLS 6.1 SP1

  • Using SSO Session

    Hi,
    We are using AS 10.1.3.5 to deploy our EAR.(platfoem is OEL 5)
    In our EAR we are Hibernate 3.0 and Struts 2.0 Framework,using JDeveloper 10.1.3.5 and also we are using the SessionAware Interface of Struts 2 to implement session management.
    We have configured this as a partner Application with SSO and OID(10.1.4.3) using "Note 403164.1 " and invoking AS 10.1.2 Reports from our EAR.
    So,we need to use the same SSO session throughout our J2EE Application.
    Where as we need to add some session attribute to the SSO session which we are picking from our custom db table and we need to use those session attributes throughout our application (as long as the SSO session is valid).
    We do not have any idea on using this SSO sessions.(before making this a partner application we were using Servlet Sessions)
    Please suggest how to set some attibutes in the SSO session and retireve the same in our EAR.
    Edited by: Susmit on Jun 14, 2011 7:05 PM

    Susmit
    There are 2 ways you will be configuring SSO in OHS of OAS.
    Static and dynamic.
    Which one you are using ?
    If you are using dynamic i.e using java program, you have the control of the flow. You can make entries of that after successful authentication and delete the entries when the session expires.
    You can always check the session status using java api.
    If you are using static, you should have one servlet filter to track the session.
    Regards
    Chinna

  • Upload of purchase order details using LSMW

    Hi friends,
    I encountered a problem while uploading purchase order details using LSMW . in the field mapping I could not able to fine the field TCODE. as a result I could not assign the transaction code ME21. could you please suggest me a solution.
      thanks

    Hai
    Check with the following
    Select fifth Radio button then follow the bellow step
    <b>5) select radio-Button 5 and execute
       Maintain Field Mapping and Conversion Rules
       Select the Tcode and click on Rule button there you   will select constant
       and press continue button
       give Transaction Code : ME21 and press Enter</b>
    Thanks & regards
    Sreenivasulu P

  • Unable to filter a recordset using a session  variable

    I have a volunteer application page and when the volunteer presses <Submit> their info is saved in a MySQl db table and a session variable is created containing the primary key of their record in the table, control is then passed to a "success page". The success page can access the session variable (I proved this by displaying the session variable on the success page) so my next step was to create a recordset in the success page with a filter using the session variable to select the appropriate row in the table, allowing me to display to the volunteer the info they submitted.
    I set up a test success page which displays the session variable and one field of the volunteer info. When I test this I see the session variable displayed but the corresponding volunteer info field from the recordset is not displayed.
    The volunteer application page is here www.hollisterairshow.com/volunteerapp.php and the successpage is here www.hollisterairshow.com/thanksvol.php
    The code that creates the session variable in the volunteer application page is shown below
    $_SESSION['volunteer_id'] = mysql_insert_id();
    The code to display the session variable in the success page is shown below
    <?php  echo $_SESSION['volunteer_id']; ?>
    The code to display the volunteer info is shown below
    <h1> Thank You <?php echo $row_rsVolunteerApp['firstname']; ?>!! </h1>
    The recordset definition is shown below
    The success page test result is shown below, as you can see the volunteer's first name is not displayed immediately after the "Thank you" message but the session variable holding the correct primary key (41) is shown correctly.
    Does anyone have an idea of what I'm doing wrong?
    Thanks
    Tony

    Where did you put session_start()? It needs to be before the variable is accessed. It's obviously before the line that displays the value in your page, but is it before the SQL query is generated?
    Also, have you checked in phpMyAdmin to see whether volunteernumber 41 has any values in the database?

  • Java Heap Error when using Stateless Session Timer Bean deployed in Oracle

    Hi,
    Am getting following Java Heap Error when using Stateless Session Timer Bean deployed in Oracle 10g AS R3 (Oracle Containers for J2EE 10g (10.1.3.0.0) (build 060119.1546.05277) ):
    06/08/02 14:58:43 javax.ejb.EJBException: java.lang.OutOfMemoryError: Java heap space
    06/08/02 14:58:43 at com.evermind.server.ejb.EJBUtils.getLocalUserException(EJBUtils.java:304)
    06/08/02 14:58:43 at com.evermind.server.ejb.interceptor.system.AbstractTxInterceptor.convertAndHandleMethodException(AbstractTxInterceptor.java:67)
    06/08/02 14:58:43 at com.evermind.server.ejb.interceptor.system.TxNotSupportedInterceptor.invoke(TxNotSupportedInterceptor.java:45)
    06/08/02 14:58:43 at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:69)
    06/08/02 14:58:43 at com.evermind.server.ejb.StatelessSessionEJBObject.OC4J_invokeMethod(StatelessSessionEJBObject.java:86)
    06/08/02 14:58:43 at com.evermind.server.ejb.StatelessSessionEJBHome.invokeTimer(StatelessSessionEJBHome.java:71)
    06/08/02 14:58:43 at com.evermind.server.ejb.EJBContainer.invokeTimer(EJBContainer.java:1624)
    06/08/02 14:58:43 at oracle.ias.container.scheduler.TimerTask.runBeanTimer(TimerTask.java:92)
    06/08/02 14:58:43 at oracle.ias.container.scheduler.TimerTask.run(TimerTask.java:184)
    06/08/02 14:58:43 at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:819)
    06/08/02 14:58:43 at java.lang.Thread.run(Thread.java:595)
    06/08/02 14:58:43 Caused by: java.lang.OutOfMemoryError: Java heap space
    I had tried using -Xms / -Xmx options (upto 1 GB).
    The trace of exception gets delayed (from being displayed on the console) as the memory size is increased; but after sometime it starts getting displayed on the console.
    Even though this exception is displayed on the console, the Timer Bean continues to execute upto sometime before it finally crashes!
    If anyone has encountered such problem; would appreciate if you could share the solution.
    Regards, Vidyadhar

    Hi guys, I have the same problem. I have an application EAR file with two modules (EJB and WAR starting in this order). The application can schedule a process via EJB timer. In this case restarting the server I receive the error above. If I change the modules start order --> WAR - EJB the server start correctly, but the application scheduler fails (the persistency is not working) with this error:
    07/10/09 10:30:54 FINISSIMO: TimerTask.runBeanTimer java.lang.NullPointerException; nested exception is: java.lang.NullPointerExceptionjavax.ejb.TransactionRolledbackLocalException: java.lang.NullPointerException; nested exception is: java.lang.NullPointerException
    java.lang.NullPointerException
         at java.util.ListResourceBundle.handleGetObject(ListResourceBundle.java:107)
         at java.util.ResourceBundle.getObject(ResourceBundle.java:319)
         at java.util.ResourceBundle.getString(ResourceBundle.java:285)
         at java.util.logging.Formatter.formatMessage(Formatter.java:108)
         at oracle.j2ee.util.TraceLogFormatter.format(TraceLogger.java:124)
         at oracle.j2ee.util.TraceLogger$TraceLoggerHandler.publish(TraceLogger.java:105)
         at java.util.logging.Logger.log(Logger.java:428)
         at java.util.logging.Logger.doLog(Logger.java:450)
         at java.util.logging.Logger.log(Logger.java:539)
         at oracle.ias.container.timer.TimerEntry.readObjFromBytes(TimerEntry.java:308)
         at oracle.ias.container.timer.TimerEntry.getInfo(TimerEntry.java:107)
         at oracle.ias.container.timer.Timer.getInfo(Timer.java:367)
         at oracle.ias.container.timer.EJBTimerImpl.getInfo(EJBTimerImpl.java:89)
         at com.finantix.foundation.integration.ejbtimer.EJBTimerServiceExecutorBean.ejbTimeout(EJBTimerServiceExecutorBean.java:42)
         at com.evermind.server.ejb.interceptor.joinpoint.EJBTimeoutJoinPoint.invoke(EJBTimeoutJoinPoint.java:20)
         at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119)
         at com.evermind.server.ejb.interceptor.system.DMSInterceptor.invoke(DMSInterceptor.java:52)
         at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119)
         at com.evermind.server.ejb.interceptor.system.SetContextActionInterceptor.invoke(SetContextActionInterceptor.java:44)
         at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119)
         at com.evermind.server.ejb.interceptor.system.TxBeanManagedInterceptor.invoke(TxBeanManagedInterceptor.java:53)
         at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119)
         at com.evermind.server.ejb.InvocationContextPool.invoke(InvocationContextPool.java:55)
         at com.evermind.server.ejb.StatelessSessionEJBObject.OC4J_invokeMethod(StatelessSessionEJBObject.java:87)
         at com.evermind.server.ejb.StatelessSessionEJBHome.invokeTimer(StatelessSessionEJBHome.java:38)
         at com.evermind.server.ejb.EJBContainer.invokeTimer(EJBContainer.java:1714)
         at oracle.ias.container.scheduler.TimerTask.runBeanTimer(TimerTask.java:106)
         at oracle.ias.container.scheduler.TimerTask.run(TimerTask.java:220)
         at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
         at java.lang.Thread.run(Thread.java:595)
    javax.ejb.TransactionRolledbackLocalException: java.lang.NullPointerException; nested exception is: java.lang.NullPointerException
         at com.evermind.server.ejb.EJBUtils.getLocalUserException(EJBUtils.java:309)
         at com.evermind.server.ejb.interceptor.system.AbstractTxInterceptor.convertAndHandleMethodException(AbstractTxInterceptor.java:73)
         at com.evermind.server.ejb.interceptor.system.TxBeanManagedInterceptor.invoke(TxBeanManagedInterceptor.java:55)
         at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119)
         at com.evermind.server.ejb.InvocationContextPool.invoke(InvocationContextPool.java:55)
         at com.evermind.server.ejb.StatelessSessionEJBObject.OC4J_invokeMethod(StatelessSessionEJBObject.java:87)
         at com.evermind.server.ejb.StatelessSessionEJBHome.invokeTimer(StatelessSessionEJBHome.java:38)
         at com.evermind.server.ejb.EJBContainer.invokeTimer(EJBContainer.java:1714)
         at oracle.ias.container.scheduler.TimerTask.runBeanTimer(TimerTask.java:106)
         at oracle.ias.container.scheduler.TimerTask.run(TimerTask.java:220)
         at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
         at java.lang.Thread.run(Thread.java:595)
    Caused by: java.lang.NullPointerException
         at java.util.ListResourceBundle.handleGetObject(ListResourceBundle.java:107)
         at java.util.ResourceBundle.getObject(ResourceBundle.java:319)
         at java.util.ResourceBundle.getString(ResourceBundle.java:285)
         at java.util.logging.Formatter.formatMessage(Formatter.java:108)
         at oracle.j2ee.util.TraceLogFormatter.format(TraceLogger.java:124)
         at oracle.j2ee.util.TraceLogger$TraceLoggerHandler.publish(TraceLogger.java:105)
         at java.util.logging.Logger.log(Logger.java:428)
         at java.util.logging.Logger.doLog(Logger.java:450)
         at java.util.logging.Logger.log(Logger.java:539)
         at oracle.ias.container.timer.TimerEntry.readObjFromBytes(TimerEntry.java:308)
         at oracle.ias.container.timer.TimerEntry.getInfo(TimerEntry.java:107)
         at oracle.ias.container.timer.Timer.getInfo(Timer.java:367)
         at oracle.ias.container.timer.EJBTimerImpl.getInfo(EJBTimerImpl.java:89)
         at com.finantix.foundation.integration.ejbtimer.EJBTimerServiceExecutorBean.ejbTimeout(EJBTimerServiceExecutorBean.java:42)
         at com.evermind.server.ejb.interceptor.joinpoint.EJBTimeoutJoinPoint.invoke(EJBTimeoutJoinPoint.java:20)
         at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119)
         at com.evermind.server.ejb.interceptor.system.DMSInterceptor.invoke(DMSInterceptor.java:52)
         at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119)
         at com.evermind.server.ejb.interceptor.system.SetContextActionInterceptor.invoke(SetContextActionInterceptor.java:44)
         at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:119)
         at com.evermind.server.ejb.interceptor.system.TxBeanManagedInterceptor.invoke(TxBeanManagedInterceptor.java:53)
         ... 9 more
    Any idea?
    Thx Auro

  • Creation of Material using BDC Session method & global class

    Hi
    Creation of Material using BDC Session method & global class by using oops.
    can anyone plz help me out

    Hi,
    it looks like it's not possible to call this BAPI wihtout material number. Here is a quote from BAPI documentation.
    When creating material master data, you must transfer the material
    number, the material type, and the industry sector to the method. You
    must also enter a material description and its language.
    Cheers

  • Creating Sales order texts while using BDC session method is not working

    Hi All,
    I have an existing program which creates sales order using BDC session method.( Actual program uses BAPI to create sales order and in case if any error occurs during creation of sales order BDC session is generated so that user can process it later and i am facing issues in this part of code where it uses BDC)
    I wanted to modify this BDC sesion  to update the sales order text also. I tried recording VA01 for creationg sales order text unfortunatly it is not capturing the data i am entering in the text fields.
    Please suggest if there is any way to create sales order using BDC.
    Regards
    Sheeba

    Hi Madhu,
    '=TP_CREATE' is the OK code i am getting for creating TEXTS. But the text entered are not captured in BDC.
    Part of BDC program generated for cretaing sales order texts.
    perform bdc_dynpro      using 'SAPMV45A' '4003'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=%_GC 128 22'.
    perform bdc_field       using 'LV70T-SPRAS'
                                  'EN'.
    perform bdc_dynpro      using 'SAPMV45A' '4003'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=TP_CREATE'.
    perform bdc_field       using 'LV70T-SPRAS'
                                  'EN'.
    perform bdc_dynpro      using 'SAPMV45A' '4003'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=%_GC 128 22'.
    perform bdc_field       using 'LV70T-SPRAS'
                                  'EN'.
    perform bdc_dynpro      using 'SAPMV45A' '4003'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=TP_CREATE'.
    perform bdc_field       using 'LV70T-SPRAS'
                                  'EN'.
    perform bdc_dynpro      using 'SAPMV45A' '4003'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/EBACK'.
    perform bdc_field       using 'LV70T-SPRAS'
                                  'EN'.
    perform bdc_dynpro      using 'SAPMV45A' '4001'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=SICH'.
    Regards,
    Sheeba

  • Use transacted session in MDB

              Hi,
              If I use transacted session in MDB with container managed transaction, dose the
              weblogic ignore the transacted setting or start in it's own transaction. I looked
              the JMS Tutorial from Sun, the J2EE server just ignore the transacted setting,
              treated it as non-transacted session.
              Thanks
              

              Thanks, Greg. I created another XAQCF in MQ JMSADMIN, but still did not help. The
              strange part is when this exception happens, in the Event Viewer there is a Message:
              An internal Websphere MQ Error has occurred'. In the Trace Log of MQ, the Major
              Error Code reported is arcE_XAER_PROTO.
              Has anyone encountered this error? The same code works fine when enlist an XAQCF
              defined in Weblogic and PUT into a Weblogic JMS Queue instead within the same
              XA Transaction. I am attaching the stack trace to this message, just in case,
              someone has useful pointers to help me. May be this is MQ Specific though I made
              sure I have the latest FixPack for MQ installed.
              Thanks,
              Sridhar
              "Greg Brail" <[email protected]> wrote:
              >Yeah. This comes up from time to time. MQ is upset because it wants to
              >be
              >enlisted in the JTA transaction, but JTA is not enlisting it because
              >it
              >thinks it's already enlisted. It thinks it's already enlisted because
              >the
              >same MQ connection factory was used for the MDB input queue, even though
              >it's a different JMS connection and session.
              >
              >You can avoid this by creating another "XAQCF" object in the MQ JNDI
              >space
              >and giving it a different name. If you do that -- essentially use different
              >connection factories for the MDB's input and output queues -- then this
              >will
              >work.
              >
              >Also, the transaction enlistement code in 8.1 that supports the
              >"resource-ref" feature avoids this problem.
              >
              > greg
              >
              >"Sridhar Krishnaswamy" <[email protected]> wrote in message
              >news:[email protected]...
              >>
              >> Hi Greg:
              >> I assume you meant to getXAResource() from an Object of type
              >XAQueueSession. Here
              >> is the code I tried within the onMessage() method of the MDB:
              >>
              >> XAQueueConnectionFactory factory = (XAQueueConnectionFactory)
              >ctx.lookup("XAQCF")
              >> ;
              >> XAConnection connection = factory.createXAQueueConnection() ;
              >>
              >> XAQueueSession mqSession = connection.createXAQueueSession() ;
              >> XAResource mqResource = mqSession.getXAResource() ;
              >> Transaction tran = TxHelper.getTransaction() ;
              >> tran.enlist(mqResource) ;
              >>
              >> //Then I was going to get the QueueSession Object from XAQueueSession,
              >obtain
              >> the Queue
              >> //Object from JNDI, create the Sender
              >> //and call the send. But I commented out these calls. Even then, after
              >the
              >onMessage
              >> Method
              >> // completes, I get the following error:
              >>
              >> javax.transaction.SystemException: start() failed on resource
              >'com.ibm.mq.MQXAResource':
              >> XAER_PROT : Routine was invoked in an improper context
              >> javax.transaction.xa.XAException: XA Operation failed. see errorcode
              >(which I
              >> am assuming is XAER_PROT).
              >>
              >> Any idea, what I am doing wrong?
              >>
              >>
              >>
              >>
              >> "Greg Brail" <[email protected]> wrote:
              >> >In 7.0, you can do your MQ "put" inside the same JTA transaction that
              >> >was
              >> >used to receive the message for the MDB, but you have to do the
              >transaction
              >> >enlistment yourself. Basically, you have to use the class
              >> >weblogic.transaction.TxHelper class to get a reference to the current
              >> >transaction, then call "enlistResource" on the transaction using the
              >> >JTA
              >> >"XAResource" that you get from the MQ JMS "Session" object. I'm sure
              >> >we've
              >> >posted the code in this newsgroup before, but I don't know where,
              >so
              >> >it
              >> >would look something like:
              >> >
              >> >// First, get the MQ QueueSession object you're going to use to send
              >> >the
              >> >message
              >> >QueueSession mqSession = mqConnection.createQueueSession(false, 0);
              >> >XAResource mqResource = mqSession.getXAResource();
              >> >weblogic.transaction.Transaction tran =
              >> >weblogic.transaction.TxHelper.getTransaction();
              >> >tran.enlistResource(mqResource);
              >> >// Now send your message
              >> >
              >> >In 8.1, this will still work, but it's not necessary. If you register
              >> >the MQ
              >> >XA connection factory as a "resource-reference" in your EJB deployment
              >> >descriptors and look it up using java:comp/env the way the documentation
              >> >link way below describes, then this transaction enlistment happens
              >> >automatically. This only happens when you use the "resource-reference"
              >> >feature (which means that old code will still work if it does NOT
              >use
              >> >this
              >> >feature), and it's only in 8.1.
              >> >
              >> > greg
              >> >
              >> >"Sridhar Krishnaswamy" <[email protected]> wrote in
              >message
              >> >news:[email protected]...
              >> >>
              >> >> Hi Greg:
              >> >> Is the Statement
              >> >>
              >> >> 'But in this case, you don't get a "non-transactional" session,
              >but
              >> >actually a
              >> >> session that participates in the current JTA transaction for the
              >thread
              >> >where
              >> >> your EJB is running'
              >> >>
              >> >> also true in the case of an MDB running in Weblogic 7.0 (Container
              >> >Managed
              >> >Transactions)
              >> >> driven by an XAQCF and a Foreign JMS Provider such as MQSeries?
              >In
              >> >other
              >> >words,
              >> >> if I want the MDB to PUT the Message into an MQSeries Queue, can
              >the
              >> >PUT
              >> >be invoked
              >> >> under the Context of the Same XA Transaction? My understanding is
              >that
              >> >WebLogic
              >> >> 7.0 doesn't support send
              >> >> messages out of an MDB within the same XA transaction if the MDB
              >is
              >> >> XA-driven by a foreign JMS provider. Please let me know if this
              >is
              >> >false.
              >> >If true,
              >> >> does Weblogic 8.1 also have this restriction?
              >> >>
              >> >> Thanks,
              >> >> Sridhar Krishnaswamy.
              >> >>
              >> >> "Greg Brail" <[email protected]> wrote:
              >> >> >What do you mean by "use transacted session in MDB?" Are you creating
              >> >> >a new
              >> >> >session inside your MDB, or do you mean something else?
              >> >> >
              >> >> >The only Sun thing I can think of is in code that looks like this:
              >> >> >
              >> >> >InitialContext ctx = new InitialContext();
              >> >> >QueueConnectionFactory qcf = ctx.lookup("java:comp/env/jms/QCF");
              >> >> >Queue queue = ctx.lookup("java:comp/env/jms/Queue");
              >> >> >QueueConnection connection = qcf.createQueueConnection();
              >> >> >// Create "transacted" session:
              >> >> >QueueSession session = connection.createQueueSession(true, 0);
              >> >> >QueueSender sender = session.createQueueSender(queue);
              >> >> >TextMessage message = session.createTextMessage("Hello, world");
              >> >> >sender.send(message);
              >> >> >connection.close();
              >> >> >
              >> >> >If you do this, and exactly this, inside an EJB, including the
              >use
              >> >of
              >> >> >"java:comp/env/jms", in WebLogic Server 8.1, then we do indeed
              >ignore
              >> >> >the
              >> >> >"transacted" flag when you create the session, just like Sun says
              >> >we
              >> >> >should
              >> >> >in the EJB and J2EE specs. But in this case, you don't get a
              >> >> >"non-transactional" session, but actually a session that participates
              >> >> >in the
              >> >> >current JTA transaction for the thread where your EJB is running.
              >> >> >
              >> >> >The idea is that if you are working inside an EJB, you don't use
              >> >transacted
              >> >> >sessions -- you use the transaction control given to you by the
              >EJB
              >> >> >container, including the UserTransaction interface and/or the various
              >> >> >container-managed transaction flags, rather than the JMS "transacted
              >> >> >session".
              >> >> >
              >> >> >You can find more information here:
              >> >> >
              >> >> >http://e-docs.bea.com/wls/docs81/jms/j2ee_components.html
              >> >> >
              >> >> > greg
              >> >> >
              >> >> >"Jen" <[email protected]> wrote in message
              >> >> >news:[email protected]...
              >> >> >>
              >> >> >> Hi,
              >> >> >>
              >> >> >> If I use transacted session in MDB with container managed
              >transaction,
              >> >> >dose the
              >> >> >> weblogic ignore the transacted setting or start in it's own
              >> >transaction.
              >> >> >I
              >> >> >looked
              >> >> >> the JMS Tutorial from Sun, the J2EE server just ignore the
              >transacted
              >> >> >setting,
              >> >> >> treated it as non-transacted session.
              >> >> >> Thanks
              >> >> >
              >> >> >
              >> >>
              >> >
              >> >
              >>
              >
              >
              [eRRORS.txt]
              

  • Req:Download of purchase order item details using ALV oops

    Hi all,
    How to download the purchase order item details using ALV oops from the output of header details

    Hi all,
    How to download the purchase order item details using ALV oops from the output of header details

  • Proper Use Of Sessions

    Hi everyone,
    My fellow developers and I were having a discussion as to the proper use of sessions in a web application built with Servlets. The situation was we were building a method to get search results from a database and we wanted to have the ability to limit the number of results displayed per page.
    One method of doing this was to get the entire search result, load that into a hashtable or some other data structure, and put that into a session variable to preserve the hashtable.
    The other method was to re-query the database every time the person clicked the 'view next' button and get a new result set every time.
    I tend to favor the use of session variables to maintain the ResultSet...as I was taught that database connections are expensive and should be limited. However, according to one of the other developers, storing objects (especially when they are potentially large) in session variables is not recommended.
    So what do you guys think? Should be store large objects in session variables, or should we re-query the database every time the person loads the page?
    As a side note, the servers we use are quite robust, but we know that that is not an excuse to write in-efficient code.

    Its a trade off between memory and database access.
    Storing stuff in session is expensive in terms of memory.
    The more stuff you store in session, the more overhead there is with each user of the system.
    Querying the database each time saves you memory on the app server, but means more work for the database.
    Which is better? As always it depends.
    - How many users are projected for the system? More users means you want to keep the session as light as possible.
    - Is the query is hugely expensive to run? A long running query that only returns a few records - you would want to cache that in session.
    - Are you able to limit the result set data returned via the database? Some database support this, some don't. ie if you did a database query each time would you have to step through "5 pages" of data to get to display the "6th" page, or could you just get the data for page 6 using row numbers?
    Database connections themselves aren't that expensive to acquire if you are using connection pooling, but they are still a limited resource.
    Hope that helps some,
    evnafets

  • Facing issue with concurrent use of session

    Hi All,
       We are facing concurrent use of session.save call in our LDAP sycn up process. Issue we got while performing performance test for multiple user and issue is at com.day.crx.security.ldap.LDAPUserSync.performUpdate api. Please guide me what could be wrong missing in code due to this Out of box service is showing error.
    Below are logs:
    02.01.2013 14:32:07 WARN SessionState: Attempt to perform session.save() while another thread is concurrently writing to session-system-1. Blocking until the other thread is finished using this session. Please review your code to avoid concurrent use of a session. (SessionState.java, line 149)
    java.lang.Exception: Stack trace of concurrent access to session-system-1
    at org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:147)
    at org.apache.jackrabbit.core.SessionImpl.perform(SessionImpl.java:355)
    at org.apache.jackrabbit.core.SessionImpl.save(SessionImpl.java:758)
    at com.day.crx.security.ldap.LDAPUserSync.performUpdate(LDAPUserSync.java:230)
    at com.day.crx.security.ldap.LDAPUserSync.syncUser(LDAPUserSync.java:178)
    at com.day.crx.security.ldap.LDAPLoginModule.commit(LDAPLoginModule.java:266)
    at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at javax.security.auth.login.LoginContext.invoke(LoginContext.java:769)
    at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186)
    Regards,
    Yogesh

    Hey Jorg,
    Your comments are much appreicated!
    question about the statement "it seems, that you import lot of users concurrently from the LDAP".  for us yes we are but the question is should that me problamatic?  We do see that it is causing issues for us  in CQ5.5 with CRX 2.3.15:
    com.day.crx.security.ldap.LDAPLoginModule commit: could not commit: javax.jcr.InvalidItemStateException: property /some/LDAP/group/rep:lastsynced: the property cannot be saved because it has been modified externally.
    However we had no such issue with CQ5.3 with CRX2.0
    -Faraz

  • Unable to Serialize ReportClientDocument using "StateServer" session mode

    Hello,
    In my ASP.NET application, I am using "StateServer" session state mode for maintaining session variables. The problem however is that this mode requires all the objects inside the session variables to be serialized and for some reason ReportClientDocument doesn't seem to be serializable.
    Here is the code that's not working:
    ceSession = Session.Item("ceSession")
    ceEnterpriseService = ceSession.GetService("", "InfoStore")
    ceInfoStore = New InfoStore(ceEnterpriseService)
    rptAppFactory = ceInfoStore.EnterpriseSession.Interface.Service("", "RASReportFactory")
    rptClientDoc = rptAppFactory.OpenDocument(rptId, CdReportClientDocumentOpenOptionsEnum.cdReportClientDocumentOpenAsReadOnly)
    Session.Add(rptClientDoc)
    At the end of the request it throws an exception
    "Unable to serialize the session state. In 'StateServer' and 'SQLServer' mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. The same restriction applies if similar serialization is done by the custom session state store in 'Custom' mode."
    [SerializationException: Type 'CrystalDecisions.ReportAppServer.ClientDoc.ReportClientDocumentClass' in Assembly 'CrystalDecisions.ReportAppServer.ClientDoc, Version=12.0.1100.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' is not marked as serializable.]
    Is anybody having any idea on how to successfully store ReportClientDocument in the session variable by using "StateServer" session state mode?
    Thanks

    There is a sample that demonstrates serializing the ReportClientDocument [here|https://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/d0a4791b-9d3b-2c10-94a5-86088b6224d4]

  • Using ALTER SESSION inside a stored procedure.... not a good idea?

    Hi,
    I have two stored procedures, both of which are used to query a database to find a particular book, based on ISBN. One sproc searches our main product catalogue and the other searches our suppliers feed catalogues. The stored procedures are called from a C# application via a search tool and the user is able to search on either our catalogue or our suppliers. The appropriate procedure is called based on the users choices.
    However, the following behaviour is observed
    I search for an ISBN (is a varchar2 field, as isbn's may contain an X if the checksum digit equates to 10) on a feed, so uses the FEED SPROC. The book is found and returned to the app in about 0.5 seconds. I can repeat this as often as i like on different books etc. always works fine.
    I then do the same search but against our own catalogue, so uses our CATALOGUE SPROC. Again the book is found quickly, and the search can be repeated with the same results.
    If i then go back and run our FEED SPROC then the search time increases to about 3 minutes !
    Both the feed and our catalogue is in the same database, although different schema's the connections will be pooled through our app server.
    I can repliacte this every single time. I think i have narrowed doen the cause of this behaviour to a few lines of code in our CATALOGUE SPROC:
    -- store values
    select value into v_vch_NLS_COMP from nls_session_parameters nsp where nsp.parameter = 'NLS_COMP';
    select value into v_vch_NLS_SORT from nls_session_parameters nsp where nsp.parameter = 'NLS_SORT';
    -- Ensure case insensitivity throughout
    EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_COMP = LINGUISTIC';
    EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_SORT = BINARY_CI';
    do other stuff
    -- restore session variables
    EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_COMP = ' || v_vch_NLS_COMP;
    EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_SORT = ' || v_vch_NLS_SORT;
    If i remove this code then all is well, so i am assuming that using ALTER SESSION inside a stored procedure is the cause of the problem as it would be changing the execution plan of the FEEDS SPROC in some manner? Any ideas? I know i can just rewrite the sproc to avoid using this coding, but wanted to understand if i am doing something wrong by using ALTER SESSION in this manner?
    Any pointers would be appreciated.
    John Thompson
    Software Architect,
    play.com
    Edited by: user7186902 on 27-May-2009 03:51

    Hello (and welcome),
    It may be a case of having to create a linguistic index to facilitate the queries once you set these session level parameters, i.e..,
    CREATE INDEX idx_01 ON tab ((NLSSORT(col1, 'NLS_SORT=BINARY_CI'))It would appear that the setting of those parameters is invalidating index searching on the current indexes.

  • Use of Session Variable in Dashboard Page XML

    Hi All,
    Can we use a Session variable in the Dashboard Page XML?
    My Requirement is,
    There are 1000+ users, each user will have access to same dashboard. But a different report in the same dashboard.
    So we want to Save individual user reports in the location /users/LOGIN_NAME/Financials/ABC
    and dynamically change the Dashboard Page XML, to accept Session Variable VALUEOF(NQ_SESSION.USER) in place of LOGIN_NAME.
    So that for each user, they will see only their report.

    On the face of it, Session is ideal for this, however this is SharePoint and the obvious isn't always the best. 
    You'd need to do the calculation about memory usage and number of concurrent users to ensure it really is a viable option in Production. 
    If it isn't viable, or wouldn't scale to possible future usage what would you do? Then you need to ask if it's really necessary to move between pages? If the user needs to move through a dialog for example, that could be hosted on a single page which might
    have different controls or sections made visible as the user progressed through the use case.
    Passing data between pages in SharePoint is a lot more difficult than it should be. Sometimes it's best to stay put, and certainly safer than using Session if you're really not sure if Session will stop your solution from scaling.
    Always remember, SharePoint might be hosted on ASP.NET but the design considerations are significantly different than if this were a pure ASP.NET application.
    w: http://www.the-north.com/sharepoint | t: @JMcAllisterCH | YouTube: http://www.youtube.com/user/JamieMcAllisterMVP

Maybe you are looking for

  • Final Cut Pro HD 4.5 freezes on output to VHS and other weridness!!!

    Gents and Ladies, First time poster...I feel all warm and fuzzy on the inside...really I do... My Brand New G5 dual 2.7GHz blah blah blah is freezing up on out put to VHS. I am using a JVC SR-VS30 Mini-DV/SVHS dual deck. Why VHS? I work for a school

  • "Application not available" page

    We have a need to display an "application not available" page when a person navigates to the site outside the normal hours of operations. One way to do this is to have the index.html route to a JSF page which checks the time, then either redirects to

  • Export presets do not save file naming template

    I don't know if this is a bug or a missing feature so I'll post here first, then submit a bug report if necessary. I have done a search first but not found anything relevant. When you create an Export Preset, LR does not save the File Naming Template

  • Keychains corrupted after Security Update 003 Panther?

    I installed Security Update 003 and now my keychains and the Keychain Access app won't work. All the keychain items in my User keychain are inaccessible, for example WLAN passwords won't work with the WLAN station and secure notes won't open. Mail ca

  • Program to re-structure table cobra

    Hi experts, i have discovered that sometimes the sales order has no entry in table COBRA (settlement profile). I was thinking.. does anybody know if there is some program that re-structure it. Because when ia go into the sales order i can see the dat