Passing object vis-a-vis ThreadLocal, storage...
Hi,
I came across the ThreadLocal object in Java docs.
As per my understanding we could use it store 'common object references' that are required by methods invoked down the line vis-a-vis instead of passing the 'common object references' to all concerned
methods as parameters.
For eg, In a database transaction, the java.sql.Connection object needs to be the same in all crud operations involved so that it can either commited/ rollbacked in one shot.
Am I correct ?
How does storage in a ThreadLocal or passing as parameter compare on the performance aspect.?
g1
Thks.
Kayaman u understood my problem but I did not understand u'r statement:
How does storage in a ThreadLocal or passing as
parameter compare on the performance aspect.?
Negligible, if you're concerned about that you shouldn't be writing Java.
To elaborate my scenario....
Say I have a User business object (the db stores the user details and the products he wishes to buy)
So the User BO, will call a singleton - DatabaseSession.startSession(), which obtains a java.sql.connection
to the db and stores it in a local (static) variable of type ThreadLocal.
The BO invokes the UserDAO and ProductDAO in sequence and commits to database (using the same connection, which
can be retrieved from the ThreadLocal var in the singleton).
What I wanted to know was the performance statistics in the scenarios of....
1. keeping the connection instance in a ThreadLocal accessible to all DAO
versus
2. Passing the connection instance to all concerned DAO methods as parameters.
thks
g1
Similar Messages
-
Passing objects by reference in PL/SQL
Hi,
I have come across an unexpected problem using object types in PL/SQL that is causing me some grief. I'm from a Java background and am relatively new to Oracle Objects but what I'm trying to do is fairly trivial, I think. The code below illustrates the problem.
--- cut here ---
CREATE OR REPLACE TYPE test_obj_t AS OBJECT
num INTEGER,
CONSTRUCTOR FUNCTION test_obj_t RETURN SELF AS RESULT
CREATE OR REPLACE TYPE BODY test_obj_t IS
CONSTRUCTOR FUNCTION test_obj_t RETURN SELF AS RESULT IS
BEGIN
num := 0;
RETURN;
END;
END;
CREATE OR REPLACE PACKAGE test_obj_ref AS
PROCEDURE init(o IN test_obj_t);
PROCEDURE inc;
FUNCTION get_num RETURN INTEGER;
END;
CREATE OR REPLACE PACKAGE BODY test_obj_ref IS
obj test_obj_t;
PROCEDURE init(o IN test_obj_t) IS
BEGIN
obj := o;
END;
PROCEDURE inc IS
BEGIN
obj.num := obj.num + 1;
END;
FUNCTION get_num RETURN INTEGER IS
BEGIN
RETURN obj.num;
END;
END;
--- cut here ---
The object type test_obj_t holds a integer and the test_obj_ref package holds a 'reference' to an instance of the object.
To test the above code I run this PL/SQL block:
declare
obj test_obj_t;
begin
obj := test_obj_t;
test_obj_ref.init(obj);
dbms_output.put_line('obj.num='||obj.num);
dbms_output.put_line('test_obj_ref.get_num='||test_obj_ref.get_num);
test_obj_ref.inc;
dbms_output.put_line('obj.num='||obj.num);
dbms_output.put_line('test_obj_ref.get_num='||test_obj_ref.get_num);
test_obj_ref.inc;
dbms_output.put_line('obj.num='||obj.num);
dbms_output.put_line('test_obj_ref.get_num='||test_obj_ref.get_num);
end;
giving the output:
obj.num=0
test_obj_ref.get_num=0
obj.num=0
test_obj_ref.get_num=1
obj.num=0
test_obj_ref.get_num=2
It appears that the object held by the test_obj_ref package is being incremented as expected, but I would have expected the object declared in the PL/SQL block to be pointing to the same object and so should report the same incremented values.
I suspect that the object is copied in the call to test_obj_ref.init() so I end up with two object instances, one that is held by the test_obj_ref package and one in the anonymous block. Although, I thought that all IN parameters in PL/SQL are passed by reference and not copied!
Am I right?
Is passing objects by reference possible in PL/SQL, if so how?
I'm using Oracle 10.2.0.3.
Cheers,
Andy.the object being passed to the test_obj_ref.init+ procedure is passed by reference; however, when you assign it to your package variable obj it is being copied to a new instance. you can pass object instances as parameters to procedures using the +IN OUT [NOCOPY]+ *calling mode, in which case modifications to the attributes of the passed object will be reflected in the calling scope's instance variable.
oracle's only other notion of an object reference is the +"REF <object-type>"+ datatype, which holds a reference to an object instance stored in an object table or constructed by an object view.
hope this helps...
gerard -
Passing object as parameter in JSF using h:commandLink tag
Hi ,
I have a scenario in which i need to pass objects from one jsp to another using h:commandLink. i read balusC article "Communication in JSF" and found a basic idea of achieving it. Thanks to BalusC for the wonderful article. But i am not fully clear on the concepts and the code is giving some error. The code i have is
My JSP:
This commandlink is inside a <h:column> tag of <h:dataTable>
<h:commandLink id="ol3"action="ManageAccount" actionListener="#{admincontroller.action}" >
<f:param id="ag" name="account" value="#{admincontroller.account}" />
<h:outputText id="ot3" value="Manage Account" rendered="#{adminbean.productList!=null}" />
</h:commandLink>
Also a binding in h:dataTable tag with the binding="#{admincontroller.dataTable}"
My Backing Bean:
public class CompanyAdminController {
private HtmlDataTable dataTable;
private Account account=new Account();
public HtmlDataTable getDataTable() {
return dataTable;
public Account getAccount() {
return this.account;
public void setAccount(Account account) {
this.account = account;
public void action(){
account= (Account)this.getDataTable().getRowData();
} faces-config.xml
<navigation-rule>
<from-view-id>/compadmin.jsp</from-view-id>
<navigation-case>
<from-outcome>ManageAccount</from-outcome>
<to-view-id>/manageAccount.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<managed-bean>
<managed-bean-name>admincontroller</managed-bean-name>
<managed-bean-class>com.forrester.AdminController</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>account</property-name>
<property-class>com.model.Account</property-class>
<value>#{param.account}</value>
</managed-property>
</managed-bean>My account object:
public class Account {
string name;
public String getName()
return this.name;
public void setName(String name)
this.name=name;
}I need to display #{admincontroller.account.name} in my forwarded jsp. But I am not sure whether the code i wrote in commandlink is correct. I get an error if i use <f:setActionListener> . No tag "setPropertyActionListener" defined in tag library imported with prefix "f"
Please advise.
Edited by: twisai on Oct 18, 2009 11:46 AM
Edited by: twisai on Oct 18, 2009 11:47 AM
Edited by: twisai on Oct 18, 2009 11:48 AMYes.. iam removed the managedproperty from faces-config. But still i get the null pointer exception on main jsp itself and i am taken to second jsp manageaccount.jsp. Did you find anything wrong in my navigation case in the action method??
public String loadAccount(){
Account account = (Account)this.getDataTable().getRowData();
return "ManageAcct";And also can you please answer this question i have
The AdminController is the backing bean of 1st JSP and manageAccontController is the backing bean of forwarded JSP .
Can i put this action method and dataTable binding in a 2nd manageAccontController backing bean instead of AdminController. But if i do that way dataList binding in h:dataTable tag will be in first JSP backing bean and dataTable binding to 2nd JSP. Not sure how to deal with this.
{ -
Memory leak problem while passing Object to stored procedure from C++ code
Hi,
I am facing memory leak problem while passing object to oracle stored procedure from C++ code.Here I am writing brief description of the code :
1) created objects in oracle with the help of "create or replace type as objects"
2) generated C++ classes corresponding to oracle objects with the help of OTT utility.
3) Instantiating classes in C++ code and assigning values.
4) calling oracle stored procedure and setting object in statement with the help of setObject function.
5) deleted objects.
this is all I am doing ,and getting memory leak , if you need the sample code then please write your e-mail id , so that I can attach files in reply.
TIA
Jagendrajust to correct my previous reply , adding delete statement
Hi,
I am using oracle 10.2.0.1 and compiling the code with Sun Studio 11, following is the brief dicription of my code :
1) create oracle object :
create or replace type TEST_OBJECT as object
( field1 number(10),
field2 number(10),
field3 number(10) )
2) create table :
create table TEST_TABLE (
f1 number(10),f2 number (10),f3 number (10))
3) create procedure :
CREATE OR REPLACE PROCEDURE testProc
data IN test_object)
IS
BEGIN
insert into TEST_TABLE( f1,f2,f3) values ( data.field1,data.field2,data.field3);
commit;
end;
4) generate C++ classes along with map file for database object TEST_OBJECT by using Oracle OTT Utility
5) C++ code :
// include OTT generate files here and other required header files
int main()
int x = 0;
int y = 0;
int z =0;
Environment *env = Environment::createEnvironment(Environment::DEFAULT);
Connection* const pConn =
env->createConnection"stmprf","stmprf","spwtrgt3nms");
const string sqlStmt("BEGIN testProc(:1) END;");
Statement * pStmt = pConn->createStatement(sqlStmt);
while(1)
TEST_OBJECT* pObj = new TEST_OBJECT();
pObj->field1 = x++;
pObj->field2 = y++;
pObj->field3 = z++;
pStmt->setObject(1,pObj);
pStmt->executeUpdate();
pConn->commit();
delete pObj;
} -
Hoe to pass object as a parameter thru webSerive
I need to pass Object as a parameter to web service:
example:
public calss returnCodes{
int ret_code;
String ret_string;
public retrunCodes(int ret_code, String ret_string){
this.ret_code = ret_code;
this.ret_string = ret_string;
public int getret_code()
return this.ret_code;
public String getret_string {
return this,ret_string
and other repc holder class to hold returnCodes
public class retrunCodesHolder implents javax.xml.rpc.Holder
returnCode value;
pubic returnCodesHolder(){
public returnCodesHolder(returnCodes value) {
this.value = value;
In Webservice I use returnCodesHolder as parameter.
WebService getReturnCodesWs I have
returnCodes retCodes = new returnCodes(04,"Good return code)
returnCodesHolder retholder = new returnCodesHolder(retCodes)
return myString;
When I am calling above webService in servlet I have code:
org.test.mytest.returnCodesHolder retHolder = new org.test.mytest.returnCodesHolder();
String result = port.getReturnCodesWs(retHolder);
How to I access /get values of returnCodes class in my calling servlet?
I am using Tomcat v 6.0I believe (although have never used, so if I'm wrong,
correct me please!) you can do it with implicit
dynamic cursors, such as:
For rec in 'select col1, col2 from table 1 '||lstr
loop
Not really:
michaels> declare
lstr varchar2 (30) := ' where empno = 7788';
begin
for rec in 'select * from emp e ' || lstr
loop
null;
end loop;
end;
Error at line 1
ORA-06550: line 5, column 4:
PLS-00103: Encountered the symbol "LOOP" when expecting one of the following:
. ( * @ % & - + / at mod remainder rem .. <an exponent (**)>
|| -
Auto payment program - Customer is Vendor & vis-a-vis
Hello Experts,
if there's a customer who is our vendor & vis-a-vis...how iwll the auto payment program help in netting the receivables with payables?Hi!
You can find Indicator: Clearing between customer and vendor in Payment transaction accounting (company code data) Section of the master record.
Indicates that during automatic payment transactions, clearing is made with the corresponding customer account, and that during manual clearing procedures, the items of that customer account are also selected.
Procedure
To use this function in automatic payment transactions, you have to
o enter the customer account number in the vendor master record,
o enter the vendor account number in the customer master record,
o select the "Clearing with vendor" indicator in the customer master record, and
o select the "Clearing with customer" indicator in the vendor master record.
Regards,
Anand -
Passing Objects to Stored Procedures in SQL Queries: UNREF(REF(o))
To me it seems that passing an object (type) to stored procedure in a SQL query is quite laborious. See:
I created the following simple type:
TYPE LAST AS OBJECT (
id NUMBER
defined a function:
FUNCTION "CHECKLAST" (l LAST)
RETURN NUMBER
AS LANGUAGE JAVA
NAME 'Checker.checkLast(Last) return int';
created a typed table:
CREATE TABLE lastTable OF Last;
inserted some objects:
INSERT INTO lastTable VALUES (1003);
NOW! If want to use the StoredFunction I have to use the following syntax:
SELECT checkLast(DEREF(REF(o)))
FROM lasttable o;
That's not very elegant.
I would expect the follwing to be working:
SELECT checkLast(o)
FROM lasttable o;
Did I do something wrong? Or did Oracle forget to implement the simple syntax?
Even worse, the DEREF(REF(o)) trick does not work for member functions...
Regards,
AndréI did some experiments and can now (partly) answer my own question:
Indeed, it is possible to declare a function with a parameter passed as reference:
CREATE OR REPLACE TYPE Point AS OBJECT
ID INT,
MEMBER FUNCTION distance(q IN REF Point) RETURN NUMBER
Unfortunately, it is not possible to use the REF in PL/SQL directly:
CREATE OR REPLACE TYPE BODY Point is
MEMBER FUNCTION distance(q IN REF Point) RETURN NUMBER
AS
BEGIN
RETURN q.ID - SELF.ID; --Error(5,14): PLS-00536: No navigation through REF
END;
end;
So, for testing purposes I decided to implement a very simple PL/SQL member function:
CREATE OR REPLACE TYPE BODY Point is
MEMBER FUNCTION distance(q IN REF Point) RETURN NUMBER
AS
BEGIN
RETURN -1;
END;
end;
BUT: The SQL query without VALUE is still not possible. The query
SELECT *
FROM PointTable d, PointTable e
WHERE d.distance(e) > 0
renders ORA-00904: "E": invalid identifier
Somehow the 'e' seems to be misinterpreted completely.
Illogically, the following query works fine:
SELECT *
FROM PointTable d, PointTable e
WHERE d.distance(REF(e)) > 0
The illogical thing is that, now 'E' seems to refer to a VALUE and not to REF (because we can use the REF function), whereas in Gaverill's post 'O' seems to refer to a REF (because we can use the VALUE function).
My intent is to avoid both the VALUE(o) from Gaverill's example and the REF(e) from my example, because both is not intuitive for end users...
Maybe I have to define a VIEW holding the object values... But then the end user has to use it in the FROM part.
All in all, there seems to be no elegant solution for passing objects as parameters to functions...
Regards,
André -
Customer Material Stock Summary Component vise & Customer Vise.
Dear friends,
plz give a report name where we can see material as.Customer Material Stock Summary Component vise & Customer Vise.
thanks
zarahi G. Lakshmipathi,
thanks for your valuable reply. and need again help. plz see my new requirement and suggest the solution.
thanks
zara -
Can we pass objects to pl/sql block
hi,
can we pass objects to pl/sql block.i think we can.how to pass it.help me in getting the examples of "passing objects to pl/sql block"What exactly do you mean ? You can pass objects like any other parameters
into and out from procedures/functions:
SQL> create or replace procedure get_object(myobj in out nocopy my_obj)
2 is
3 begin
4 dbms_output.put_line('ID : ' || myobj.empno);
5 dbms_output.put_line('Salary : ' || myobj.sal);
6 dbms_output.put_line('Department : ' || myobj.deptno);
7 myobj.sal := myobj.sal*2;
8 end;
9 /
Procedure created.
SQL> declare
2 mo my_obj := my_obj(1,1000,10);
3 begin
4 get_object(mo);
5 dbms_output.put_line('New salary : ' || mo.sal);
6 end;
7 /
ID : 1
Salary : 1000
Department : 10
New salary : 2000
PL/SQL procedure successfully completed.Rgds. -
Passing Object parameters to Procedures in Oracle
Hi,
Can any one please provide me with a sample example how to pass object types as parameters (IN) to a procedure/package.
Thanks in Advance.Here is a simple example
SQL> create or replace type tbl as table of number
2 /
Type created.
SQL> create or replace procedure proc(pTbl tbl)
2 as
3 begin
4 for i in 1..pTbl.count
5 loop
6 dbms_output.put_line(pTbl(i));
7 end loop;
8 end;
9 /
Procedure created.
SQL> exec proc(tbl(1,2,3,4,5))
1
2
3
4
5
PL/SQL procedure successfully completed. -
Passing objects to a method.
Hi,
I was reading this from a book and puzzled by this suggestion:
for example:
public Employee findEmployee(String employeeID);
This method takes a String specifying a unique employee id and returns the Employee object with that id, null otherwise. Don't pass un-necessary objects to methods, and return the appropriate results.
Why not passing objects to methods, I found it is convenient to pass objects to methods, why ?
Thanks in advance !
TeeOf course you can pass objects to methods. A String is also an object.
The author doesn't say to not pass any objects to methods, only no unnecessary objects. He propably means that you don't need a method likepublic Employee findEmployee(String employeeID, String country)to retrieve the Employee if the employee ID by itself is unique or you don't use the country in the method, to give you an example. -
What is the use of passing object reference to itself ?
What is the use of passing object reference to itself ?
regards,
namancThere is an use for returning an object reference from itself, for instance:
class C {
public:
C append(C c) {
// do something interesting here, and then:
return this;
}You can "chain" calls, like this:
C c = new C();
C d = new C();
C e = new C();
c.append (d).append (e);Maybe the OP has "inverted" the common usage, or thought about a static method of a class C that requires a parameter of type C (effectively being a sort of "non-static method").
class C {
static void doAnotherThing (C c) {
c.doSomething(); //-- effectively C.doAnotherThing(c) is an "alternative syntax" for c.doSomething() -
Yet Another "Passing Objects" Thread
Hi All,
Quick question about passing objects:
I have three classes - ClassA, ClassB and ClassC. Lets say I create an object of ClassA in ClassB. Also, I would like to send the ClassA object from ClassB to ClassC to update its data. My question is, can I set the ClassA object in ClassC and modify it through ClassB? Confusing? I'll try to create an example below.
ClassA:
public class ClassA {
// data
} ClassB: creates and calls update methods for ClassA object
public class ClassB {
ClassA object = new ClassA();
// print object
ClassC ClassCFacade = new ClassC();
ClassCFacade.setClassAObject(object);
ClassCFacade.updateClassAObject(object);
// print object
}ClassC: updates object
public class ClassC {
// set object
public void setClassAObject(ClassA object) {
// sets object
// get object
public ClassA getClassAObject() {
// returns object
// modify object
public updateClassAObject() {
ClassA o = getClassAObject()
// modify o
setClassAObject(o)
}So if objects are passed by reference, handle, or whatever you call it, essentially the above code should modify ClassA object created in ClassB, meaning the ClassA object should display it was modified after second print in ClassB. Although I've tried this implementation and the ClassA object is not modified after updateClassAObject method call from ClassB.
Any input would be appreciated.
Thanks,
BobOK. Here's snippets of actual code:
public class ClassA implements SessionBean, ClassARemoteBusiness {
// ClassA Attributes
Integer ID;
String name;
// SET METHODS
public void setClassAID(Integer ID) {
this.ID = ID;
public void setClassAName(String name) {
this.name = name;
// GET METHODS
public Integer getClassAID() {
return ID;
public String getCLassAName() {
return name;
import classa.ClassA;
import classc.ClassC;
import javax.servlet.*;
import javax.servlet.http.*;
public class ClassB extends HttpServlet {
private ClassA object;
private ClassC ClassCFacade;
private ClassCFacade = lookupClassCBean();
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
// display object values - displays default values
out.println("ID: " +object.getClassAID());
out.println("Name: " +object.getClassAName());
// update object
ClassCFacade.setClassAObject(object);
ClassCFacade.updateClassAObjectID(someInteger);
ClassCFacade.updateClassAObjectName(someName);
// display object values - displays updated values
out.println("ID: " +object.getClassAID());
out.println("Name: " +object.getClassAName());
// LOOKUP METHODS
private web.ServiceLocator serviceLocator;
private web.ServiceLocator getServiceLocator() {
// service locator code
private classc.ClassCRemote lookupClassCBean() {
// lookup code
import classa.ClassA;
public class ClassC implements SessionBean, ClassCRemoteBusiness {
private ClassA o;
// SET METHODS
public void setClassAObject(ClassA object) {
o = object;
// UPDATE
public void updateClassAObjectID(Integer ID) {
o.setClassAID(ID);
public void updateClassAObjectName(String name) {
o.setClassAName(name);
} -
Getting error when passing objects using IntelliJ 7.0
Hi All,
i have just started working in Web Services using Axis 2 in IntelliJ IDE. i am getting this error when i pass objects:
org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.i have used rpc/literal, i tried with other combinations but not working.
i have created two class called "address" and "user" and i want webservice client to pass "address" object to a "user" method.Hi,
Try populating the ltab_extensionin as the code given below:
Maybe it can help you.
Constants: c_flag_bape_vbak TYPE char10 VALUE 'BAPE_VBAK', " Constant
c_flag_bape_vbakx TYPE char10 VALUE 'BAPE_VBAKX'," Constant
wa_bape_vbap-vbeln = space.
wa_bape_vbap-posnr = wa_order_items_in-in_linenumber.
MOVE c_flag_bape_vbak TO wa_extensionin-structure.
MOVE c_flag_bape_vbap TO wa_extensionin-structure.
CALL METHOD cl_abap_container_utilities=>fill_container_c
EXPORTING
im_value = wa_bape_vbap
IMPORTING
ex_container = wa_extensionin-valuepart1.
APPEND wa_extensionin TO it_extensionin.
CLEAR : wa_extensionin.
MOVE c_flag_bape_vbapx TO wa_extensionin-structure.
wa_extensionin-valuepart1+0(10) = space.
wa_extensionin-valuepart1+10(6) = wa_order_items_in-in_linenumber.
wa_extensionin-valuepart1+80(3) = abap_true.
APPEND wa_extensionin TO it_extensionin.
CLEAR : wa_extensionin.
Regards,
Shweta -
How can I pass objects across neywork?
How can I pass a ObjectOutputStream to a ObjectInputStream, across a socket?
Thanks in advance for your posts!Or maybe I am misunderstanding your question?-Probably
Lets see: ObjectOutputStream passes data trought aout
Stream; ObjectInputStream receives data trought a in
Stream: so, I suppose that they can use as streamsthe
connections betwen two sockets, in one point the
ObjectOutputStream sending, an in another the
ObjectInputStream receiving.Yes. The sockets provide the connections, and you can
call getInputStream or getOutputStream on the sockets
to read what the other guy is sending, or to write to
the other guy. You don't actually pass the sockets or
streams back and forth--they're just the channels by
which you pass your data.I knew that, thanks anyway. But my question is how can I pass objects throught that streams.
Anyone knows?
Thanks
Maybe you are looking for
-
Ipad 4 airplay dropping link to AppleTV when streaming from Safari
When using Safari to view video, and Airplay to show it on my TV via an AppleTV, it drops the link every few minutes. It does not happen if I'm watching a video on an app, only with Safari. I have the latest iOS on my iPad (7.1), and the latest Apple
-
Cannot move my former .wma files to itunes for mac
Over the years, I ripped all of my cds and stored them on my PC. Because I was using a PC, I ripped this music in .WMA format. When I got my macbook, I was EXTREMELY disappointed that I couldn't just transfer these files into itunes. So I did some
-
User-exit for report RPCAIDP0 (tcode: PC00_M19_CAID)
Dear Gurus, Does anyone know user-exits for report RPCAIDP0 (tcode: PC00_M19_CAID) ? Thank you in advance, PSC
-
Can I view/print a log of my phone calls for the last year?
How can I view/print a log of my phone calls for the last year without going into each of my individual monthly bills?
-
Use oraDav with large files (1GB+)?
My customer has many terabytes of images, many of which are over 1GB in size. Using interMedia w/oraDav looks very interesting. For example, the users could access the images from a client/server application via WebFolders from their Windows workstat