Personalization Server: Reference session variable in cm:select
<%=String X=(String)session.getAttribute(y)%>
How do we get X into a cm:select tag?
I attempting to do a query and want to pass X into it.
Tried doing <%=X%> and it's causing a JSP compile error.
So, I guess I need to know how to pass a session variable into the query of a CM:SELECT
tag?
Thanks,
Mark
Hello Mark,
A coworker of mine created a sample that I tested with an in-lined String variable for
the "query" attribute. It works fine. I suspect that you may have other problems. For
instance, I don't think <%= String X=(String)session.getAttribute(y)%> is legal. The <%=
%> is supposed to contain a java expression, like <%= (String) session.getAttribute(y) %>
Also, double-quotes within an expression can be problematic, such as <%= (String)
session.getAttribute("y") %>. The best way to handle this would be to assign the session
attribute to a String and then inline the String with: <%= myValue %>.
Here is a working sample (that does not use a session variable, but that does not matter
- it uses a String:
<!-- Import the content management tag -->
<%@ taglib uri="cm.tld" prefix="cm" %>
<%@ taglib uri="es.tld" prefix="es" %>
<%@ page import="com.beasys.commerce.content.ContentHelper" %>
<!-- Use the cm:select tag to query the example content files in
<drive>:\weblogiccommerce3.2\dmsBase for type = news, (see headline1.htm,
headline2.htm, headline3.htm, headline4.htm, business1.htm, sports1.htm,
and showbiz1.htm) and display headings -->
<br>
<%
String newsQuery = "type = 'news'";
%>
<cm:select contentHome="<%=ContentHelper.DEF_CONTENT_MANAGER_HOME%>"
query="<%= newsQuery %>"
sortBy="heading ASC"
id="newsline" cacheId="news_lines"
cacheTimeout="300000" useCache="true" />
<es:forEachInArray array="<%=newsline%>"
id="newsBL" type="com.beasys.commerce.axiom.content.Content"
counterId="i">
<br>
<% out.println((i.intValue()+1) + ") "); %>
<cm:printProperty id="newsBL" name="heading" encode="html" default="Error" />
</es:forEachInArray>
Mark Mangano wrote:
<%=String X=(String)session.getAttribute(y)%>
How do we get X into a cm:select tag?
I attempting to do a query and want to pass X into it.
Tried doing <%=X%> and it's causing a JSP compile error.
So, I guess I need to know how to pass a session variable into the query of a CM:SELECT
tag?
Thanks,
Mark--
Ture Hoefner
BEA Systems, Inc.
2590 Pearl St.
Suite 110
Boulder, CO 80302
www.bea.com
[att1.html]
Similar Messages
-
Sticky using session variables
Hello
I was wondering if it is possible to stick a session to a server using session variables (such as username) Currently I am using cookies to keep the session sticky but i also need to use the session variables.
Thanks
DonaghDonagh,
there is absolutely no reason to use both.
If the name is more important, than use the name.
If the cookie is more important, than use the cookie.
If one is not more important than the other, then keep using the cookie.
Another way to see it is :
if the name and the cookie refer to the same server, it does not matter which one you use.
But if they point to different servers.
What do you do ?
Which information do you use to select the server ?
The name or the cookie ?
As I said, there is no reason to use both.
Unless if one is missing.
But the problem is then to make sure it is always there.
Is there any stickyness issue currently ?
Gilles. -
Session Variable in filter view error
Hello,
My prompt is defaulted to current 12Weeks. I used session variable in the prompt to capture 12 Weeks (Current Week and Current+12).
so the default value is @{biServer.variables['NQ_SESSION.PERIOD_STDATE']} where PERIOD_STDATE is my session varible.
I am using a filter view to display the filters being applied.
When the user opens a tab, the filter view is throwing error
***The syntax of the expression to be evaluated is invalid.***
***Expression: @{biServer.variables['NQ_SESSION.PERIOD_STDATE']}***
My report is running fine. I just have the date column as prompted in my report request.
When the user hits go button on the prompt then the filter view comes up just fine.
What is that I am doing wrong? Why does the filter view gives result after hitting GO button?
Please help.
thanks,
deepHi,
1. Set the default using logical SQL. Select <presentation table>.<presentation column> from <subject area> where <presentation table>.<presentationation column> =valueof(NQ_SESSION.<session variable>)
2. You dont have to write the exact syntax for entering the session variable in the default values. You just need to use the session variable name after selecting the session variable type in the drop down.
Hope this helped/ answered.
Regards
MuRam -
Using Variables in a select statement through a Database Adapter
I was wondering how I reference a variable in a select statement through a Database Adapter.
Ex.
1. I have a global variable that stores an employee number
2. I want to select an SSN # from a table based on an employee #
variable.
select ssn from emp where ssn = :input_variable - ????
- how do i reference the variable - I am getting a 'missing IN or OUT parameter error?
Any advice is much appreciated.
~ThanksI'm just wondering if anyone knows a work around so that I might be able to store a Table's FIELD name in a variable or an array[] so that I can do a query based on the decision of a loop without having to code 10 IF/ELSE statements.For instance, although the above code will not work, this code, although quite lengthy, does:
If DataGrid1.SelStartCol = 0 Then
Adodc1.RecordSource = "Select * from tblReservation order by RES__PUR_DT"
Adodc1.Refresh
ElseIf DataGrid1.SelStartCol = 1 Then
Adodc1.RecordSource = "Select * from tblReservation order by VENDOR"
Adodc1.Refresh
ElseIf DataGrid1.SelStartCol = 2 Then
Adodc1.RecordSource = "Select * from tblReservation order by VEN_LOC"
Adodc1.Refresh
ElseIf DataGrid1.SelStartCol = 3 Then
Adodc1.RecordSource = "Select * from tblReservation order by RES_TYPE"
Adodc1.Refresh
ElseIf DataGrid1.SelStartCol = 4 Then
Adodc1.RecordSource = "Select * from tblReservation order by RES_FROM_DT"
Adodc1.Refresh
ElseIf DataGrid1.SelStartCol = 5 Then
Adodc1.RecordSource = "Select * from tblReservation order by RES_TO_DT"
Adodc1.Refresh
ElseIf DataGrid1.SelStartCol = 6 Then
Adodc1.RecordSource = "Select * from tblReservation order by MISC_ADJ"
Adodc1.Refresh
ElseIf DataGrid1.SelStartCol = 7 Then
Adodc1.RecordSource = "Select * from tblReservation order by STATE_TAX"
Adodc1.Refresh
ElseIf DataGrid1.SelStartCol = 8 Then
Adodc1.RecordSource = "Select * from tblReservation order by LOC_CHARGE"
Adodc1.Refresh
ElseIf DataGrid1.SelStartCol = 9 Then
Adodc1.RecordSource = "Select * from tblReservation order by RES_ID"
Adodc1.Refresh
ElseIf DataGrid1.SelStartCol = 10 Then
Adodc1.RecordSource = "Select * from tblReservation order by RES_OP"
Adodc1.Refresh
End If
Do you see where i'm going with this?
I simple want to use a variable in the "select * from <Table> Order by <Field>" -
How to get session variable value in conditional formatting
I am trying to format my column according to value of a session variable. Normally when comparing to a static value I select value from add button and write the value. What I want is to be able to do this using a session variable. I select variable presentation and as the variable expression I tried MYDAY, NQ_SESSION.MYDAY, VALUEOF(NQ_SESSION.MYDAY), VALUEOF(MYDAY) but nothing works. By the way it is a date value, I don't know it makes any difference
Any help would be appriciatedI am surprised that it is not possible to select a session variable when you want to use conditional formatting. Apparently you can only base conditional formatting on presentation variable or values within a column.
As a workaround you can create an extra column in your request and use a CASE WHEN statement, where you compare the value of the date with the session variable. Then you can base your conditional formatting on that column.
Regards,
Stijn
Message was edited by:
Stijn Gabriels -
Access to Session variables in XSL via insert-request
We using the Transform="MyInsert.XSL" on the Insert-Request. How do we reference Session variables in the XSL?
Thanks[list=1]
[*]Add a top-level <xsl:param> to your stylesheet to define a top-level stylesheet parameter, for example <xsl:param name="foo"/>
[*]Use <xsql:set-stylesheet-param name="foo" value="{@session-var-name}"/> in your XSQL page before your <xsql:insert-request> to set the value of the top-level stylesheet parameter named "foo" to the value of the session parameter you want.
[list] -
I have set a session variable "var1" in the pagedef using ADFUtil.setEL("#(sessionScope.var1)",myValue);
How do I read this session variable, "var1" in select statement in a View Object please?
ThanksDo NOT try to access the variables stored in a scope in a view controller project directly in the Model layer. It breaks the MVC paradigm.
For your use-case,
1) Create a View Object with a View Criteria that has a single bind variable.
2) Have a method in AMImpl that takes a single parameter and applies the View criteria for the View Object Instance in 1) by setting the value for the bind variable with the input parameter and execute the View Object and expose this method through client interface.
3) Use this method in ViewController project and Invoke the method.
Thanks,
Navaneeth -
Server hangs and session variable value not maintained.
dear all,
this is exteremetly urgent. i upgraded my tomcat to 4.1.24.but i have problems running the same code which was working earlier, i get null in the value of session variable. and also get the following error
////////////////error got /////////////
Compile failed; see the compiler error output for details.
at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:842)
at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:682)
at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:317)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:370)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext
.java:473)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper
.java:190)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:2
95)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:
2415)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatche
rValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContex
t.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:22
3)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:594)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
ssConnection(Http11Protocol.java:392)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java
:565)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
ool.java:619)
at java.lang.Thread.run(Thread.java:536)
///////////////end of error messsge ////////////
the code where i am getting this message is as follows
<%@ page session="true"%>
<HTML>
<HEAD><TITLE> LOGGED IN ok</TITLE> </HEAD>
<%@ page import="java.sql.*" %>
<%! // declaring variables
String s = "";
java.sql.ResultSet rs=null;
java.sql.Connection con;
java.sql.Statement stmt=null,stmt1=null;
String username = "";
String password = "";
String Ousername = "";
String Opassword = "";
String changepass="";
String usertype ="",useremail="",EmpName="";
%>
<body>
<%
try
//set session for max of 100 milliseconds
// session.setMaxInactiveInterval(10000);
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = java.sql.DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};" +"DBQ=c:/vishal/HelpDesk.mdb;DriverID=22;READONLY=false","","");
stmt = con.createStatement();
s = "select * from LoginUser";
username = request.getParameter("LogonId"); //get this through prev. form
password = request.getParameter("txtPassword");
out.println(username + " " + password);
// make explicitly to lower case
username = username.toLowerCase();
rs = stmt.executeQuery(s);
while(rs.next())
//getting data from database
Ousername = rs.getString("EmpName");
Opassword = rs.getString("Password");
useremail = rs.getString("EmailId");
usertype = rs.getString("UserType");
if(Opassword.equals(password) && Ousername.equals(username)) //found match correct entry
changepass = request.getParameter("PasswordNew");
if(changepass != null)
stmt1 = con.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_UPDATABLE);
s = "update LoginUser set Password = '" + changepass + "' where EmpName = '" + username +"'";
out.println(s);
stmt1.executeUpdate(s);
stmt1.close();
if(usertype.equals("User") == false)//ie admin
session.setAttribute("username",username);
************************this value not maintained *********************
session.setAttribute("useremail",useremail);
session.setAttribute("usertype",usertype);
************************this value not maintained *********************
//closing connections
%>
<jsp:forward page= "ComplaintType.jsp" />
<%
else //user
EmpName = username;
session.setAttribute("EmpName",EmpName);
session.setAttribute("useremail",useremail);
//closing connections
%>
<jsp:forward page="ComplaintCategory.jsp" />
<%
}//end if
}//while loop
//first closing connections then forwarding
%>
<jsp:forward page="InvalidLOGIN.jsp" />
<%
///rs.close();
////closing
//stmt.close();
// con.close();
}//try
catch(Exception ep)
out.println(ep);
System.exit(1);
%>
</BODY>
</HTML>hi all,
thanx a lot for your help,specially hari52
hari52 strangely enough the code started working,but
now i have another problem
after a while my server hangs or gets shutdown ,a
message is shown as
"java.exe has generated error and will be shutdown"
i know that more connections can be a prob. but i
make sure that connections r closed on each page,also
i am a newbie and do not have the time at present to
learn abt. connection pool ,can this problem be
solved easily?
it would be a great help again on your part,
thanx again,You remove the System.exit(1) line from the code inside the catch block
and try again. That's the reason tomcat getting down. System.exit(1) should not be used inside jsp. it will make the underlaying Servlet Engine to shutdown. -
Code to set and destroy session variables in Java Server Pages(JSP)
code to set and destroy session variables in Java Server Pages(JSP)
we have use following statement to set session variable
session.setAttribute("userClient",id);
we have use following statement to destroy session variable
session.setAttribute("userClient","");
and
the session.invalidate() is not working
Plz. solve this probemcode to set and destroy session variables in Java
Server Pages(JSP)
we have use following statement to set session
variable
session.setAttribute("userClient",id);
we have use following statement to destroy session
variable
session.setAttribute("userClient","");Perhaps if you tried using
session.setAttribute("userClient", null);
or
session.removeAttribute("userClient");
and
the session.invalidate() is not workingNot working how?
>
Plz. solve this probem -
Select Column using Session Variable
I have set a session variable to hold the name of a column
dependent on who the user is. Is it possible to use a session
variable to select a column in a database table? If so, how? Does
it need a where statement?
Something like this?:
<cfquery name="rsSelectColumn" datasource="Test">
SELECT Column 1, Column 2, Column 3 = Session Variable
FROM tbl_data
</cfquery>
Thanks,
DaveI think you want to do this, if the value in the session
variable is the actual column name:
<cfquery name="rsSelectColumn" datasource="Test">
SELECT Column 1, Column 2, #Session Variable# AS Col3
FROM tbl_data
</cfquery>
this way you can call any column stored in the session
variable, and it will always be usable from the QUERY as COL3
regardless of what column you used.
If that is what you want to do - it IS that simple.
Sometimes we over think things too much. -
Possible to reference a session variable in customMessages.xml?
In customMessages.xml, I put in this code:
<!--Allow user to change password -->
<WebMessage name="kmsgChangePasswordLink">
<HTML>
<a href="http://www.somelink.com?someThingToPass=BISessionVariable">Change Password</a>
</HTML>
</WebMessage>Is there a way to reference a BI session variable within customMessages.xml somehow?John,
You make a good point. So I can't do this in customMessages.xml... can I make a change somewhere else that would accomplish this? Basically I want to be able to bring in the content of a session variable into the 'My Account' page. Does anyone know if this can be done? -
Alternate method to writing filter for recordset using session variable
I'm not sure if this can be done. I have a user page which I'd like to return database info based upon a userid entered on another page. So far, the session variable (userid) is captured on the user page however it is supposed to return the user's name rather than displaying the session variable.
My problem is this. Within dreamweaver, I am able to create recordsets however I cannot create a filter. The connection works. At this point, I am searching for a workaround where I can tie in the session variable to recordsets. I should make mention that whenever I update the sql statement using the recordset widget, my recordset disappears. ? At any rate, heres a sample of the code sans connection strings, etc.
<%
Dim Recordset1
Dim Recordset1_cmd
Dim Recordset1_numRows
Set Recordset1_cmd = Server.CreateObject ("ADODB.Command")
Recordset1_cmd.ActiveConnection = MM_newuniversity1_STRING
Recordset1_cmd.CommandText = "SELECT name FROM table WHERE userid = '" & Session("userid_my") & "'"
Recordset1_cmd.Prepared = true
Set Recordset1 = Recordset1_cmd.Execute
Recordset1_numRows = 0
%>
On the user page, I have a 'Welcome' and the following code
{Request.userid_my}
Any suggestions? I'm afraid I'm a newbie to asp within dreamweaver cs3.>When I insert request.userid_my code it returns the session variable
AFAIK, session variables are not part of the request object - so I do not understand why you are referencing them this way. I would use the standard reference method : Welcome <%Response.Write(Session("username"))%>
>when I insert the recordset associated with 'name' I get an Adobe End of file error. ?
Sounds like a possible problem with your installation. You may need to try reinstalling DW. How are you "inserting" this recordset and when does the error occur?
Regarding your next post...
>select name from table_name where userid = '" & namemy & "'"
>The statement consistently returns a 'quoted string not properly terminated' error.....
The select statement you quoted is obviously not complete. If you are refering to the select in your OP:
Recordset1_cmd.CommandText = "SELECT name FROM table WHERE userid = '" & Session("userid_my") & "'"
I see nothing wrong with that syntax and the string appears to be terminated correctly. If there is a different statement causing the error, please post the entire line and include a line above and below. -
Urgent regarding session variable
Hi Everyone,
I have a prompt having fromdate(calendar ctrl) and todate(calendar ctrl) and one orderID(here it is multiselect). Now my requirement is i should select an order ID from the multiselect and when i hit go the date should be prompted for the fromdate and todate and these should pass in the report.
Please help me how can i pass the session variables for the 'fordate' and 'todate' based on the orderid i am selecting from multiselect.
Thank you so much for your help.
Thanks,
chakrHi,
In the Dashboard prompt u can see edit column--> edit column formula--> here select varaible type as ---> session then include...see the screen short.
http://imageshare.web.id/images/2c3f2h66sb7l5nzfittl.jpg
1) In your DB Prompt go to Default To
2) Select Server Variable
3) NQ_SESSION.startdate and NQ_SESSION.enddate
4) Save and test
That should work well for you. Here is a link to a jpg that you should probably save for future reference. It'll show you the proper syntax to use in different situations.
http://shivabizint.files.wordpress.com/2008/10/obiee-variables-overview.jpg
Thanks
Deva -
Session variable getting reset when leaving dashboard
I have created a session variable with the 'Enable any user to set the value' option. I'm using the session variable as the default for a dashboard prompt. I'm able to set the variable with that dasboard prompt, and I can confirm that it is indeed getting set properly. So the interaction of the variable and the prompt seems to be in order.
After I make a selection from the dashboard prompt, as long as I stay in the dashboard, the session variable stays set to my selection. I can move from page to page and everything is fine. The selection stays put as I have set it. However, the moment I leave the dashboard, the session variable is reinitialized back to its default value as specified by the SQL in its initialization block. I can go from dashboard to catalog and back to dashboard - boom, it's back to the default. My selection has been replaced. ???
And here's an odd thing: I can look in the query log and see the initialization block code getting run when I log in. So far, so good. I can run the dashboard, make a prompt selection, and see the query log updated just fine. Still OK. BUT... when I switch from dashboard to catalog and back to dashboard, the value of the session variable is reset (I see the default month in my analysis and as the prompt default upon redisplay of the dashboard page), but there's no indication in the query log that the initialization block SQL ran again. The last SQL in the query log still shows my "selected" value in the SQL. The dashboard page is showing the "default", while the last entry in the query log shows the "selected".
Can anyone else confirm this odd behavior? And is there a reason that a session variable should not retain its value throughout the session? I've always viewed session variables as little buckets of single-cell data whose contents are consistent and static for the duration of a session, unless manually changed by a dashboard prompt. If the behavior that I'm seeing is both replicatable and expected, it would appear that my understanding is flawed.
Running 11.1.1.7.0 on Windows Server 2008. Same behavior is occurring in both Firefox 21 and IE 9.Thank you for your answer MK,
I try to write a SQL in my prompt but not work for me:
-In default selection I choose SQL Results and I type: Year(Current_date) and save my prompt and I don't see any value in my dashboardpage, if I click in prompt I can see all members of my year dimension but by default is empty.
I modify the other solution: I have 1hour refresh time and I change for 1 minute, but doesn't work.
the default initializer is in RPD (variable year that belongs to BI_Year Block) and I have written 2009. -
Javacard and session variables
Hello,
I'm trying to find a reasonable Javacard technique to handle "session variables" that must be kept between successive APDUs, but must be re-initialized on each card reset (and/or each time the application is selected); e.g. currently selected file, currently selected record, current session key, has the user PIN been verified...
Such variables are best held in RAM, since changing permanent (EEPROM or Flash) variables is so slow (and in the long run limiting the operational life of the card).
Examples in the Java Card Kit 2.2.2 (e.g. JavaPurseCrypto.java) manipulate session variables in the following way:
1) The programmers group session variables of basic type (Short, Byte, Boolean) according to type, and map each such variable at an explicit index of a vector (one per basic type used as session variable).
2) At install() time, each such vector, and each vector session variable, is explicitly allocated as a transient object, and this object is stored in a field of the application (in permanent memory), where it remains across resets.
3) Each use of a session variable of basic type is explicitly translated by the programmer into using the appropriately numbered element of the appropriate vector.
4) Vector session variables require no further syntactic juggling, but eat up an object descriptor worth of permanent data memory (EEPROM or Flash), and a function call + object affectation worth of applet-storage memory (EEPROM, Flash or ROM).
The preparatory phase goes:
public class MyApp extends Applet {
// transientShorts array indices
final static byte TN_IX = 0;
final static byte NEW_BALANCE_IX=(byte)TN_IX+1;
final static byte CURRENT_BALANCE_IX=(byte)NEW_BALANCE_IX+1;
final static byte AMOUNT_IX=(byte)CURRENT_BALANCE_IX+1;
final static byte TRANSACTION_TYPE_IX=(byte)AMOUNT_IX+1;
final static byte SELECTED_FILE_IX=(byte)TRANSACTION_TYPE_IX+1;
final static byte NUM_TRANSIENT_SHORTS=(byte)SELECTED_FILE_IX+1;
// transientBools array indices
final static byte TRANSACTION_INITIALIZED=0;
final static byte UPDATE_INITIALIZED=(byte)TRANSACTION_INITIALIZED+1;
final static byte NUM_TRANSIENT_BOOLS=(byte)UPDATE_INITIALIZED+1;
// remanent variables holding reference for transient variables
private short[] transientShorts;
private boolean[] transientBools;
private byte[] CAD_ID_array;
private byte[] byteArray8; // Signature work array
// install method
public static void install( byte[] bArray, short bOffset, byte bLength ) {
//Create transient objects.
transientShorts = JCSystem.makeTransientShortArray( NUM_TRANSIENT_SHORTS,
JCSystem.CLEAR_ON_DESELECT);
transientBools = JCSystem.makeTransientBooleanArray( NUM_TRANSIENT_BOOLS,
JCSystem.CLEAR_ON_DESELECT);
CAD_ID_array = JCSystem.makeTransientByteArray( (short)4,
JCSystem.CLEAR_ON_DESELECT);
byteArray8 = JCSystem.makeTransientByteArray( (short)8,
JCSystem.CLEAR_ON_DESELECT);
(..)and when it's time for usage, things go:
if (transientShorts[SELECTED_FILE_IX] == (short)0)
transientShorts[SELECTED_FILE_IX] == fid;
transientBools[UPDATE_INITIALIZED] =
sig.verify(MAC_buffer, (short)0, (short)10,
byteArray8, START, SIGNATURE_LENGTH);I find this
a) Verbose and complex.
b) Error-prone: there is nothing to prevent the accidental use of transientShorts[UPDATE_INITIALIZED].
c) Wastefull of memory: each use of a basic-type state variable wastes some code; each vector state variable wastes an object-descriptor worth of permanent data memory, and code for its allocation.
d) Slow at runtime: each use of a "session variable", especially of a basic type, goes thru method invocation(s) which end up painfully slow (at least on some cards), to the point that for repeated uses, one often attain a nice speedup by caching a session variable, and/or transientShorts and the like, into local variables.
As an aside, I don't get if the true allocation of RAM occurs at install time (implying non-selected applications eat up RAM), or at application selection (implying hidden extra overhead).
I dream of an equivalent for the C idiom "struct of state variables". Are these issues discussed, in a Sun manual, or elsewhere? Is there a better way?
Other desperate questions: does a C compiler that output Javacard bytecode make sense/exists? Or a usable Javacard bytecode assembler?
Francois GrieuInteresting post.
I don't have a solution to your problem, but caching the session variables arrays in local variable arrays is a good start. This should be only done when the applet is in context, e.g. selected or accessed through the shareable interface. This values should be written back to EEPROM at e.g. deselect or some other important point of time. Do you run into problems if a tear happens? I don't think so since the session variables should be transactional, and a defined point will commit a transaction.
Analyzing the bytecode is a good idea. I know of a view in JCOP Tools (Eclipse plugin) where you can analyze the bytecode and optimize it to your needs.
Maybe you are looking for
-
Alv report with varying number of columns
hi all, I am new to abap. I am writing this to get a brief idea of what i wanted to do in system. I have to do a report using alv. The format of the report looks like this. acc no acc. name amt_sum_april amt_sum_may amt_sum_june. .......
-
Sender File Adapter - remote FTP server program execution
Hi all, I have a scenario X12 -> XI -> File where sender File adapter is used. The input file is X12 txt document which needs to be converted into X12 xml format. I have created astylus studio XSLT mapping which uses Convertor to convert this txt fil
-
How do I add applications to the startup items?
I see a folder under system:startupitems, but I cannot modify it.
-
I can hear the audio for each video BUT the window for SEEING the videos does not open- it remains "closed" on top of the start/stop/pause controller. HOW can I fix this so I can also see the videos I want to edit? It worked fine the day I uploaded
-
Dump during Purchase of Investment Certificate (Prod. Type 02A)
Hello Experts, Please provide me with your inputs. System is giving dump when I am entering all the details in FTR_CREATE for product type 02A. Dump is attached in the post. This issue is pertaining to Valuation Area I guess. Also I am attaching cust