Question about conversational state of Stateless bean....
Hello all,
I have a simple stateless bean which parses an XML file and stores the xml content as an list of 2-D arrays in member variables. Here is quick look at design...
import javax.ejb.Stateless;
// included other libraries
import java.util.List;
import java.util.ArrayList;
@Stateless
public class XMLParseBean implements XMLParseBeanInterface {
public List<String> strParameters;
public List<String> getStrParameters() {
return strParameters;
private void setStrParameters(List<String> strParameters) {
this.strParameters = strParameters;
public void parseXML(String strFileName) {
/* Open the XML file and do initializations for xml parsing here
setStrParameters(visitNode(doc.getDocumentElement()));
private List<String> visitNode(Element thisNode) {
/* Parse the XML here */
return strNodes; // return the node names and their values
}My question is : if I inject this bean in another bean, call the method for parsing XML and then call the getParameter method to access the value of member variable, will it work.
I mean since I am using stateless bean, does the conversation state end when the parseXML method ends?
sir_edward wrote:
Hi vikram8jp,
The session of an stateless bean ends after a method call. If you call a method of your bean, the bean will forget all attributes when the method ends. If you want to save attributes, you have to use a stateful bean.
Regards
Sir EdwardHello Sir Edward,
That answers my query.
Similar Messages
-
Question about delete statement
I have question about delete statement...
i am performing some simple delete statement against one table..but its taking so long..How can we check whether particular delete statements actually deleting records or not..?Is the associated select-statement returning rows or not?
If yes -> delete is deleting
If no -> delete is just using CPU-cycles
To tune the delete-statement, you have to tune the corresponding select-statement. To tune the select-statement, you want to read the thread When your query takes too long ... -
EJB 3.0 Stateful bean not saving state while Stateless bean is !!!
My Stateless bean is as follow:
package test;
import javax.ejb.Stateless;
@Stateless(mappedName = "StatelessBean")
public class StatelessBean implements StatelessBeanRemote {
int counter;
public void increment(){
System.out.println("Stateless counter value:"+counter);
counter++;
My Stateful bean is as follow:
package test;
import javax.ejb.Stateful;
@Stateful(mappedName = "StateFulBean")
public class StateFulBean implements StateFulBeanRemote {
int counter;
public void increment(){
System.out.println("Stateful counter value:"+counter);
Client is as follows:
package test;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
public class TestClient {
public static void main(String[] args) {
Hashtable hashtable = new Hashtable();
hashtable.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
hashtable.put(Context.PROVIDER_URL, "t3://localhost:7001");
InitialContext ic;
try {
ic = new InitialContext(hashtable);
StateFulBeanRemote stateFulBeanRemote = (StateFulBeanRemote)ic.lookup("StateFulBean#test.StateFulBeanRemote");
stateFulBeanRemote.increment();
StatelessBeanRemote statelessBeanRemote = (StatelessBeanRemote)ic.lookup("StatelessBean#test.StatelessBeanRemote");
statelessBeanRemote.increment();
} catch (Exception e) {
e.printStackTrace();
The output i am getting after running the client twice is as follows:
//first time
Stateful counter value:0
Stateless counter value:0
//second time
Stateful counter value:0
Stateless counter value:1
Shouldn't the counter values be incremented in case of Stateful bean and remain the same for Stateless bean. But the output that I am getting is the complete opposite !!!
Can anyone please explain this confusing behavior of stateless and stateful ejb 3.0 beans.868664 wrote:
Can anyone please explain this confusing behavior of stateless and stateful ejb 3.0 beans.It is very simple: a stateless bean is ASSUMED to be stateless; you cannot keep state in a stateless bean as a contractual rule. That doesn't mean that you will fail to keep state in them at least for a little while, they are still only Java objects. Generally stateless EJBs are pooled, so you may get the same instance each time you use such an EJB, but you may just get another one. It is not dependable and the rules say don't do it - so don't do it.
A stateful bean is tied to a single client, and so can be used by a client to keep state in it. Since You are running the client application twice you are operating with two different clients and so you will get a new stateful bean each time and your code will keep printing 0. However there is also a bug in your code:
public void increment(){
System.out.println("Stateful counter value:"+counter);
}You are not incrementing anything. -
Question about 'write' statement
Hi,
A question on write statement.
I have a internal table itab which has field var. I am looping at this itab and writing horizontal heading output like below.
example on the output heading:
(3 spaces) itab-var (20 spaces) itab-var (20 spaces) itab-var.
the coding is:
loop at itab.
write: 3 itab-var.
endloop.
I want to increase the space by 20 for every loop. How to increase this 3 by 20? Can we accomplish this way?
Thank you for your time.hi krishen,
just add 20 inside the loop , so that after every loop its value increases by 20
for example:
data: v type i.
v=3.
do 3 times.
write: at v(20).
v=v+20.
end do.
hope it will help you
regards
Rahul sharma
Edited by: RAHUL SHARMA on Sep 4, 2008 7:47 AM -
A question about entity manager in stateless session bean.
JSR 220 ejbcore, page 47 : stateless session bean: All business object references of the same interface type for the same stateless session bean have the "same object identity", which is assigned by the container.
So, if we have two session beans in client code...
@EJB Cart cart1;
@EJB Cart cart2;
then cart1.equals(cart2)==true
If we declare entity manager in stateless session bean:
@PersistenceContext( unitName="ds" ,type=PersistenceContextType.TRANSACTION)
private EntityManager em;If cart1 and cart2 are the same reference, do we have any problem when using the same reference(maybe the same em? ) to get data from db?If cart1 and cart2 are the same reference, do we have
any problem when using the same reference(maybe the
same em? ) to get data from db?No. In EJB, there is a distinction between the EJB reference and the bean instance.
Each time you make an invocation on an EJB reference for a stateless session bean,
the container can choose any instance of that bean's bean class to process the
invocation. That's true whether you invoke the same reference multiple times or
two difference references to the same bean.
Each bean instance is guaranteed to be single-threaded. -
A question about conversion model.
I'm programming a JSF-based forum. See the code below:
<jsp:useBean id="CommentBean" class="net.gleamynode.notes.http.faces.CommentBean" scope="request" />
<jsp:setProperty name="CommentBean" property="pageId" value="${p.id}"/>
<h:form id="commmentForm" formName="commentForm" >
<h:input_hidden id="pageId" valueRef="CommentBean.pageId"/>
<h:input_text id="userName" valueRef="CommentBean.userName"/>
<h:input_text id="userEmail" valueRef="CommentBean.userEmail"/>
<h:input_text id="userURL" valueRef="CommentBean.userURL"/>
<h:input_textarea id="content" valueRef="CommentBean.content"/>
<h:command_button id="submit" label="Leave a comment" commandName="submit" actionRef="CommentBean.createAction" />
</h:form>
The type of CommentBean.pageId property is 'java.lang.Integer'. It seems JSF does not convert the request parameter 'pageId' (whose type is String) properly. CommentBean.pageId is always set to '0'.
The strange fact is that it works if I use input_number instead of input_hidden! It is clear that the conversion model is applied differently for different component types. (Sorry, I did'nt have much time to read every chapter of the spec. ;)
Is there anyone who experienced the same problem?
PS: btw, the first two line in the code above looks very unnatural because we specified the name of the bean class and scope already in faces-config.xml. Is there any way to do the same job without using jsp:useBean and jsp:setProperty? (please note ${p} is not a managed bean. it is just a dynamically declared bean in page scope.)Hi,
yes, it seems, that input_hidden field accepts only String attributes.
But this (maybe) will be changed in next releases so no conversion should be necessary.
See, what Craig said about a similar case, which I think includes your question: http://forum.java.sun.com/thread.jsp?forum=427&thread=443816&message=2011411#2011411
Greetings,
Rene -
Question about main difference between Java bean and Java class in JSP
Hi All,
I am new to Java Bean and wonder what is the main difference to use a Bean or an Object in the jsp. I have search on the forum and find some post also asking the question but still answer my doubt. Indeed, what is the real advantage of using bean in jsp.
Let me give an example to illustrate my question:
<code>
<%@ page errorPage="errorpage.jsp" %>
<%@ page import="ShoppingCart" %>
<!-- Instantiate the Counter bean with an id of "counter" -->
<jsp:useBean id="cart" scope="session" class="ShoppingCart" />
<html>
<head><title>Shopping Cart</title></head>
<body bgcolor="#FFFFFF">
Your cart's ID is: <%=cart.getId()%>.
</body>
<html>
</code>
In the above code, I can also create a object of ShoppingCart by new operator then get the id at the following way.
<code>
<%
ShoppingCart cart = new ShoppingCart();
out.println(cart.getId());
%>
</code>
Now my question is what is the difference between the two method? As in my mind, a normal class can also have it setter and getter methods for its properties. But someone may say that, there is a scope="session", which can be declared in an normal object. It may be a point but it can be easily solved but putting the object in session by "session.setAttribute("cart", cart)".
I have been searching on this issue on the internet for a long time and most of them just say someting like "persistance of state", "bean follow some conventions of naming", "bean must implement ser" and so on. All of above can be solved by other means, for example, a normal class can also follow the convention. I am really get confused with it, and really want to know what is the main point(s) of using the java bean.
Any help will be highly apprecaited. Thanks!!!
Best Regards,
AlexHi All,
I am new to Java Bean and wonder what is the main
difference to use a Bean or an Object in the jsp. The first thing to realize is that JavaBeans are just Plain Old Java Objects (POJOs) that follow a specific set of semantics (get/set methods, etc...). So what is the difference between a Bean and an Object? Nothing.
<jsp:useBean id="cart" scope="session" class="ShoppingCart" />
In the above code, I can also create a object of
ShoppingCart by new operator then get the id at the
following way.
ShoppingCart cart = new ShoppingCart();
out.println(cart.getId());
...Sure you could. And if the Cart was in a package (it has to be) you also need to put an import statement in. Oh, and to make sure the object is accessable in the same scope, you have to put it into the PageContext scope. And to totally equal, you first check to see if that object already exists in scope. So to get the equivalant of this:
<jsp:useBean id="cart" class="my.pack.ShoppingCart"/>Then your scriptlet looks like this:
<%@ page import="my.pack.ShoppingCart %>
<%
ShoppingCart cart = pageContext.getAttribute("cart");
if (cart == null) {
cart = new ShoppingCart();
pageContext.setAttribute("cart", cart);
%>So it is a lot more work.
As in my mind, a normal class can also
have it setter and getter methods for its properties.True ... See below.
But someone may say that, there is a scope="session",
which can be declared in an normal object.As long as the object is serializeable, yes.
It may be
a point but it can be easily solved but putting the
object in session by "session.setAttribute("cart",
cart)".Possible, but if the object isn't serializable it can be unsafe. As the point I mentioned above, the useBean tag allows you to check if the bean exists already, and use that, or make a new one if it does not yet exist in one line. A lot easier than the code you need to use otherwise.
I have been searching on this issue on the internet
for a long time and most of them just say someting
like "persistance of state", "bean follow some
conventions of naming", "bean must implement ser" and
so on. Right, that would go along the lines of the definition of what a JavaBean is.
All of above can be solved by other means, for
example, a normal class can also follow the
convention. And if it does - then it is a JavaBean! A JavaBean is any Object whose class definition would include all of the following:
1) A public, no-argument constructor
2) Implements Serializeable
3) Properties are revealed through public mutator methods (void return type, start with 'set' have a single Object parameter list) and public accessor methods (Object return type, void parameter list, begin with 'get').
4) Contain any necessary event handling methods. Depending on the purpose of the bean, you may include event handlers for when the properties change.
I am really get confused with it, and
really want to know what is the main point(s) of
using the java bean.JavaBeans are normal objects that follow these conventions. Because they do, then you can access them through simplified means. For example, One way of having an object in session that contains data I want to print our might be:
<%@ page import="my.pack.ShoppingCart %>
<%
ShoppingCart cart = session.getAttribute("cart");
if (cart == null) {
cart = new ShoppingCart();
session.setAttribute("cart", cart);
%>Then later where I want to print a total:
<% out.print(cart.getTotal() %>Or, if the cart is a JavaBean I could do this:
<jsp:useBean id="cart" class="my.pack.ShoppingCart" scope="session"/>
Then later on:
<jsp:getProperty name="cart" property="total"/>
Or perhaps I want to set some properties on the object that I get off of the URL's parameter group. I could do this:
<%
ShoppingCart cart = session.getAttribute("cart");
if (cart == null) {
cart = new ShoppingCart();
cart.setCreditCard(request.getParameter("creditCard"));
cart.setFirstName(request.getParameter("firstName"));
cart.setLastName(request.getParameter("lastName"));
cart.setBillingAddress1(request.getParameter("billingAddress1"));
cart.setBillingAddress2(request.getParameter("billingAddress2"));
cart.setZipCode(request.getParameter("zipCode"));
cart.setRegion(request.getParameter("region"));
cart.setCountry(request.getParameter("country"));
pageContext.setAttribute("cart", cart);
session.setAttribute("cart", cart);
}Or you could use:
<jsp:useBean id="cart" class="my.pack.ShoppingCart" scope="session">
<jsp:setProperty name="cart" property="*"/>
</jsp:useBean>The second seems easier to me.
It also allows you to use your objects in more varied cases - for example, JSTL (the standard tag libraries) and EL (expression language) only work with JavaBeans (objects that follow the JavaBeans conventions) because they expect objects to have the no-arg constuctor, and properties accessed/changed via getXXX and setXXX methods.
>
Any help will be highly apprecaited. Thanks!!!
Best Regards,
Alex -
Beginner question about prepared statements...PLEASE help! :-)
First let me say thanks for the assistance. This is probably really easy to do, but I'm new to JSP and can't seem to figure it out.
I want to dynamically populate a table that shows whether a particular person has an appointment at a given date and time with a user. To do this, I want to query the MySQL database for the lastname of the person with the appointment that occurs with the user at the year, month, date, and time, in question.
THE CODE BELOW DOESN'T WORK (obviously) BUT SOMEWHAT ILLUSTRATES WHAT I'M TRYING TO ACCOMPLISH:
<%
Driver DriverTestRecordSet = (Driver)Class.forName(MM_website_DRIVER).newInstance();
Connection ConnTestRecordSet = DriverManager.getConnection(MM_website_STRING,MM_website_USERNAME,MM_website_PASSWORD);
PreparedStatement StatementTestRecordSet = ConnTestRecordSet.prepareStatement("SELECT lastname FROM appts_pid1 WHERE user_id='<%=(((Recordset1_data = Recordset1.getObject(user_id))==null || Recordset1.wasNull())?"":Recordset1_data)%>' AND year='<%= yy %>' AND month='<%= months[mm] %>' AND date='<%= dates[dd] %>' AND appttime='16:15:00'");
ResultSet TestRecordSet = StatementTestRecordSet.executeQuery();
boolean TestRecordSet_isEmpty = !TestRecordSet.next();
boolean TestRecordSet_hasData = !TestRecordSet_isEmpty;
Object TestRecordSet_data;
int TestRecordSet_numRows = 0;
%>
The real problem comes in the prepared statement portion. If I build the prepared statement with static values like below, EVERYTHING WORKS GREAT:
PreparedStatement StatementTestRecordSet = ConnTestRecordSet.prepareStatement("SELECT lastname FROM appts_pid1 WHERE user_id='1' AND year='2002' AND month='October' AND date='31' AND appttime='16:15:00'");
But when I try to use dynamic values, everything falls apart. It's not that the values aren't defined, I use the user_id, year <%= yy %>, month <%= months[mm] %>, etc. elsewhere on the page with no problems. It's just that I can't figure out how to use these dynamic values within the prepared statement.
Thanks for reading this far and thanks in advance for the help!!!!Hi PhineasGage
You are little bit wrong in your
your preparedStatement.
Expression tag within scriptlet tag is invalid.
Whenever you are appending the statement with
expression tag, append it with "+" and remove
expression tag.
Hopefully it will work
ThanksThanks for the response!
I know that the expression tag within scriptlet tag is invalid. I just need a workaround for what I want to do.
I'm unclear what you mean by "Whenever you are appending the statement with expression tag, append it with a "+" and remove expression tag".
Could you give an example?
In the meantime, I've been trying to digest the docs on prepared statements and have changed the code to look like:
PreparedStatement StatementTestRecordSet = ConnTestRecordSet.prepareStatement("SELECT lastname FROM appts_pid1 WHERE user_id= ? AND year= ? AND month= ? AND date= ? AND appttime='13:15:00'");
StatementTestRecordSet.setInt(1,1);
StatementTestRecordSet.setInt(2,2002);
StatementTestRecordSet.setString(3,"October");
StatementTestRecordSet.setInt(4,31);
Again, WITH THE STATIC VALUES, THIS WORKS FINE...but when I try to use expressions or variables like below, things don't work:
StatementTestRecordSet.setInt(2,<%= yy %>);
Obviously, I'm doing something wrong, but there has to be a way to use variables within the prepared statement.
ALSO, the values are being passed to this page via URL in the form:
samplepage?user_id=1&year=2002&month=October&date=31
Based upon this information, is there another way (outside of stored procedures in the db) to do what I want to do? I'm open to ideas. -
A question About SUBMIT statement
Hi,
By SUBMIT statement, i can trigger another report. If the called report runs into dump, how can i detech/catch the dump in the calling report? I tested. It seems impossible to catch the dump. The calling report will also dump.
My question is, if the called report runs into dump, how to detect the dump and avoid dump in calling report?
Thanks in advance,
Best Regards, Johnney.hi
you can catch this kind of error or exeption from the respective report
then pass this error or exeception to the calling report
go through the example I am giving , ti have done it like this only
SUBMIT zgurep03 AND RETURN WITH SELECTION-TABLE li_seltab .
then in the called reprot
*Check ledger
SELECT SINGLE * FROM t881 WHERE rldnr = p_rldnr.
IF sy-subrc NE 0.
SET CURSOR FIELD 'P_RLDNR'.
MESSAGE e448 WITH p_rldnr
MESSAGE e446 INTO lv_text .
lv_type = 'E'.
Capturing the error messages.
EXPORT lv_text TO MEMORY ID 'TX'(004).
EXPORT lv_type TO MEMORY ID 'TP'(005).
in calling report
IMPORT gv_type1 TO gv_type FROM MEMORY ID 'TP'.
IMPORT gv_text1 TO gv_text FROM MEMORY ID 'TX'.
preparing error message in the callge report for the calling report
PERFORM prepare_message
USING sy-msgid
lv_msgno
lv_msgv1
lv_msgv2
lv_msgv3
lv_msgv4
CHANGING gv_text.
preparing error message
FORM prepare_message USING p_sy_msgid
p_sy_msgno
p_sy_msgv1
p_sy_msgv2
p_sy_msgv3
p_sy_msgv4
CHANGING p_gv_text.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = p_sy_msgid
lang = 'EN'
no = p_sy_msgno
v1 = p_sy_msgv1
v2 = p_sy_msgv2
v3 = p_sy_msgv3
v4 = p_sy_msgv4
IMPORTING
msg = gv_text
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
I guess this will solve your problem
Regards
Prashant -
Question about call statement in trigger
I faced a question in written exam.
A CALL statement inside a trigger allow us to call
a)package
b)procedure
c)function
d)another trigger
Can anyone give me answer with reason?
I used CALL statement inside trigger but not allowing to use it. Might be earlier in oracle CALL statement we can use..its only a guess so I am asking in forum..
plz guide me..
rgds,
pcYou can use CALL in a trigger without resorting to EXECUTE IMMEDIATE
SQL> create table t1 (
2 col1 number
3 );
Table created.
SQL> create procedure t1_proc
2 as
3 begin
4 dbms_output.put_line( 'In T1_PROC' );
5 end;
6 /
Procedure created.
SQL> ed
Wrote file afiedt.buf
1 create trigger trg_t1
2 before insert on t1
3 for each row
4* call t1_proc
5 /
Trigger created.
SQL> set serveroutput on;
SQL> insert into t1 values( 1 );
In T1_PROC
1 row created.I can't think of any reason that you'd actually intentionally structure your code this way in this day and age because it would be rather likely to cause confusion for whoever had to support this in the future. But it is valid syntax that probably made sense back in Oracle 5.
Justin -
Hi expert,
I have following sql statement, function 'hiroc_get_delta_amount1' and 'hiroc_get_delta_amount2' are separately used in select and where subclause. these two function are exactly same, except that there is a inserting log statement inside. for function 'hiroc_get_delta_amount1' , logs are supposed to write into log table1, whereas for function 'hiroc_get_delta_amount2' , logs are supposed to write into log table2. after running this sql, I got data loaded into log table2, however, there is no data loaded into log table1.
could you please tell me why there is no data in log table2 for function
1. sql statement;
select
pp.policy_premium_pk,
pp.policy_fk,
pp.policy_term_fk,
pp.risk_fk,
pp.coverage_fk,
pp.transaction_log_fk,
pp.coverage_component_code,
hiroc_rpt_user.hiroc_get_delta_amount1(pp.policy_fk, pp.policy_term_fk, pp.risk_fk, pp.coverage_fk, pp.transaction_log_fk, pp.coverage_component_code),
pp.rate_period_from_date
from PRODBKUPDW_MART.rmv_policy_premium pp
where pp.rate_period_type_code = 'TERM_COVG'
and pp.coverage_component_code 'NETPREM'
and hiroc_rpt_user.hiroc_get_delta_amount2(pp.policy_fk, pp.policy_term_fk, pp.risk_fk, pp.coverage_fk, pp.transaction_log_fk, pp.coverage_component_code) != 0
group by pp.policy_premium_pk,
pp.policy_premium_pk,
pp.policy_fk,
pp.policy_term_fk,
pp.risk_fk,
pp.coverage_fk,
pp.transaction_log_fk,
pp.coverage_component_code,
pp.rate_period_from_date;
2. log inserting statement used for both functions:
(1) function 'hiroc_get_delta_amount1'
insert into HIROC_RPT_USER.LOG_TEST1 values (v_start, sysdate,
p_policy_fk,p_policy_term_history_fk,p_risk_fk,p_coverage_fk,p_transaction_log_fk,p_comp_code);
COMMIT;
(2) function 'HIROC_GET_DELTA_AMOUNT_1'
insert into HIROC_RPT_USER.LOG_ZB_TEST_1 values (v_start, sysdate,
p_policy_fk,p_policy_term_history_fk,p_risk_fk,p_coverage_fk,p_transaction_log_fk,p_comp_code);
COMMIT;Are your functions using autonomous transactions?
We also need more information about the log tables etc. as we cannot tell what the problem would be from just that query, and no data. -
Hello Gurus,
as for a statement "The MBW job BI_BTCH__FX_PAYMENT_DATA=X10M and itu2019s child job ended with completed Abnormally status.", I have some question as follows:
(1) where does they check out this job " BI_BTCH__FX_PAYMENT_DATA=X10M " ? what do that "=" and "X10M" and "BI_BTCH__FX_PAYMENT_DATA" mean ?
(2) how does " MBW job BI_BTCH__FX_PAYMENT_DATA=X10M " match some BW object?
(3) what is itu2019s child job ?
MaIs the associated select-statement returning rows or not?
If yes -> delete is deleting
If no -> delete is just using CPU-cycles
To tune the delete-statement, you have to tune the corresponding select-statement. To tune the select-statement, you want to read the thread When your query takes too long ... -
Question about Merge Statement
Is it possible to use a CASE statement inside the update clause of a merge statement? Also what about a function?
I have a string (In Source) that needs to be split into multiple columns (In Target) depending on values in other columns (In Source).
I am on 11iR1Hi Chris,
You can take a look at the below examples :
SQL>create table t_test
col1,col2,col3
) as
select 1,2,3 from dual union all
select 2,3,4 from dual union all
select 3,4,2 from dual union all
select 9,10,12 from dual union all
select 11,23,43 from dual
create table succeeded.
SQL>select * from t_test;
COL1 COL2 COL3
1 2 3
2 3 4
3 4 2
9 10 12
11 23 43
SQL>merge INTO t_test t_t USING
SELECT
1 AS col1
FROM
dual
) d_d
ON
(d_d.col1 = t_t.col1)
WHEN matched THEN
UPDATE set
col2 = (
CASE
WHEN d_d.col1 = 1
THEN 123
ELSE -1
END );
1 rows merged
SQL>select * from t_test;
COL1 COL2 COL3
1 123 3
2 3 4
3 4 2
9 10 12
11 23 43 -
Question about multiple RequiresNew in Entity Bean transaction
Hi I've got a problem concerning transactions:
In both cases I've got a CMP Entity Bean called "Account" with some mothods like
increaseBalance(double amount)
decreaseBalance(double amount)
transferMoney(double amount)
for all methods the TransactionAttribute is "RequiresNew". When calling first decreaseBalance(amount) and afterwords
increaseBalance(amount), bothfrom within transferMoney(amount). When setting entityContext.RollbackOnly()
I would expect this rollback doesn't undo my changes because they are in a different transaction, which has been comitted
when the methods finished, but both are rolled back.
I thought there are no "nested transactions" in J2EE. Isn't this one?
Thanks!
MartinAhhhh! Right! If I call "this.increase(balance)" from the AccountBean method "transferMoney", the container has no chance to create a new transaction, so the same transaction as in "transferMoney" is used. I didn't think about that, but of course...
So one should never call a bean method directly even when it is a method of the same instance the thread is currently in.
Thanks a lot! -
Newbie question about switch statement
Lets say you have a loop and inside the loop you have a switch statement, how do you BREAK out of the outer loop?
for (i=0....) {
switch {
case 11:
.... some stuff
break; <==== HOW DO I BREAK OUT OF THE for loop here?In standard C and standard C++ the break statement terminates the nearest enclosing loop and only that loop; i.e. control transfers to the first statement following the loop. I think there are C or C++ extensions that allow loop tags which may be used with a break to specify which loop to drop through, but I don't think these are supported by gcc, and they would certainly be very non-portable.
There are several common ways to drop out of one or more outer loops. In many cases, there's nothing else in the loop following the switch so you can simply write
switch (condition) {
default:
case 0:
break;
// other case statements here
break;
Else you can declare a loop control var and use the continue statement like this:
for (i=0; i<jMax && !bDone; i++) {
switch (condition) {
default:
case 0:
bDone++; continue;
// other case statements
If you need to escape several loops and/or don't want to use loop control vars, you might consider structuring the code so you can use return to terminate the entire function. In the worst case of a very complex structure that you don't know how to simplify with a helper function, you can always resort to a goto:
switch (condition) {
default:
case 0:
goto escape;
// other case statements here
// remainder of code inside nested loops here
escape: <first statement following the outermost loop>;
Note that the statement following the escape label is always executed; i.e. when execution skips the goto it's as if the statement following escape was unlabeled. Use goto sparingly of course, since it's an artifact of unstructured programming. But when you really need a goto, it can make your code much easier to maintain.
Maybe you are looking for
-
Can we use more than one Help Provider class in a same project in ADF11g
Hi All, There are two help providers i want to use .They are "ResourceBundleHelpProvider","OHW Help Provider" In adf-settings.xml file <help-provider> <help-provider-class>oracle.adf.view.rich.help.ResourceBundleHelpProvider</help-provider-class> <pr
-
How do I change the order of sites when typing in the adress bar?
I usually type "go" in the adress bar if I want to go to google, then it automatically finishes and I just click enter after "go", but lately another site has taken the place so when I click enter I come to the wrong site. I have not searched for thi
-
Charge new iPad with iPod USB adapter 5V 1amp?
Is there any problem to charge my new iPad with a USB iPod wall adapter with an output of 5V 1amp? And is it okay to do it daily? Will it affect in any way the battery?
-
Hello Frnds, i am learning j2me..i am facing some problem in simple thread initilization.. the code is import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import java.io.*; import javax.microedition.io.*; class Process implements R
-
I want to delete a whole line in txt file where i found a string with DATE format.
#The date have specific format mm/dd/yyyy #I Need to find a line where is date older than one year and then erase it $Date = (Get-Date).AddDays(-365) write-host "-----------------------" $a= '\d{2}\/\d{2}\/\d{4}' Select-String -pattern "$a" -Path C