Documents COM object creation failure
Hi all,
We are using the DI API (2005) to access SBO database objects. The API call generally work fine, but we have a problem when creating order objects with the following code (using it's managed wrapper in C#):
Documents docs = conn.Connection.GetBusinessObject(BoObjectTypes.oOrders) as Documents;
getting the folloing exception: 'System.Runtime.InteropServices.SEHException: External component has thrown an exception..'. Creation of other objects (like BusinessPartners, Recordsets, ...) work fine, but as soon as we try to create one of the Document type object (oOrder, oInvoice) we get this error!
Any ideas?
Thanks,
Reinhard
Alternative way of typecasting your object (actually didn't know that one existed).
I use:
Documents docs = (Documents)conn.Connection.GetBusinessObject(BoObjectTypes.oOrders) .. and have never had any problem with it
... Also make sure that the Documents-object is the SAP object (and not from another namespace, although I doubt it given the code you have shown)
SAPbobsCOM.Documents docs = (SAPbobsCOM.Documents)conn.Connection.GetBusinessObject(BoObjectTypes.oOrders)
Similar Messages
-
COM object model not functioning after encrypting the word document using office extention
After encrypting A word document using office extention, it seems like the COM object model becomes unusable. I cannot not manipulate the encrypt document through COM interface, nor can I write macro VBScript to do some operation on the docuent.
For example, I create a word Macro with some simple code.
Sub hi()
Dim i As Integer
i = ThisDocument.Fields.Count
MsgBox i
End Sub
If the document is not encrypt, then we will see a msgbox which tells us the number of bookmarks in the current document.
Now, encrypt the word document using the office extention, running the macro code will fail with error code " 80004005" and error message:Method 'Fields' of bject 'ThisDocument' failed.
It is very important for us to manipulate word documents through COM interface in our system, I want to know why the COM interface does not work anymore after the document is encrypted.I take macro script as an example to demonstrate that word COM object model cannot be used after encripted. Actually you can reproduce the same problem when you manipulate word document through COM interface using any programming language.
For example, you can create a text document with the following VBscript:
set a = createobject("Word.Application")
set doc = a.Documents.Open("E:\temp\test.docx")
msgbox doc.Fields.count
doc.close
a.quit
Save the document with ".vbs" file extention and then run it by double clicking it. it will fail if the document is encrypted using the office extention. -
Cannot install Grid control 11g because of repository creation failure
I cannot install Grid control 11g (on AIX6.1 and 11.2.0.1 database) because of repository creation failure with following log emschema.log.CREATE
2012-10-29 17:44:49,729 [Thread-190] ERROR emschema.17oypu8dqqrf7 - ERROR:FATAL Configuration Exceptions
Execution Exception
null
2012-10-29 17:44:50,162 [17oypu8dqqrf7] ERROR emschema.17oypu8dqqrf7 - Schema Action Failed
2012-10-29 17:44:50,163 [17oypu8dqqrf7] ERROR emschema.17oypu8dqqrf7 - java.lang.Exception: The last RCUModel exit status code is not SUCCEEDED.
2012-10-29 17:44:50,164 [17oypu8dqqrf7] ERROR emschema.17oypu8dqqrf7 - Schema Action Failed
2012-10-29 17:44:50,167 [17oypu8dqqrf7] ERROR emschema.17oypu8dqqrf7 - Running RCU Failed with Exception Trace
The last RCUModel exit status code is not SUCCEEDED.
and rcu.log:
RCU Logfile : /ugp1apl/oracle/product/grid/middleware/oms11g/sysman/log/schemamanager/m_102912_0530_PM/m_102912_0530_PM.CREATE/rcu.log
RCU Checkpoint Object : /opt/oracle/product/grid/middleware/oms11g/sysman/log/schemamanager//RCUCheckpointObj
Component schemas created:
Component Status Logfile
EM Repository Creation Configuration Failed /ugp1apl/oracle/product/grid/middleware/oms11g/sysman/log/schemamanager/m_102912_0530_PM/m_102912_0530_PM.CREATE/em_repos_config.log
EM Repository Init Configuration Success /ugp1apl/oracle/product/grid/middleware/oms11g/sysman/log/schemamanager/m_102912_0530_PM/m_102912_0530_PM.CREATE/em_repos_init.log
EM Repository Common Success /ugp1apl/oracle/product/grid/middleware/oms11g/sysman/log/schemamanager/m_102912_0530_PM/m_102912_0530_PM.CREATE/em_repos_common.log
2012-10-29 17:44:49.887 NOTIFICATION rcu: oracle.sysman.assistants.common.util.SilentMessageHandler::writeToLog: Repository Creation Utility - Create : Operation Completed
Database has 11.2.0.1 version and setup according installation guide(init parameters and so on...), what's wrong?
Edited by: mariok on Oct 31, 2012 2:11 AMIn install guide is written: http://docs.oracle.com/cd/E11857_01/install.111/e15838/install_em_exist_db.htm#CIAIGDIH
„No environment variable specific to Enterprise Manager Grid Control needs to be set prior to installation. The ORACLE_HOME and ORACLE_SID variables should not be set; Oracle directories should not appear in the PATH.“
When I'v set up following variables everything went fine:
ORACLE_HOME=/opt/oracle/product64/11.2.0.1
ORACLE_SID=UAGRID
PATH=/usr/java6_64/bin:/opt/oracle/product64/11.2.0.1/bin:/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/lbin:/root/MSP/bin:.:/usr/local/bin:/u1/oracle/SCRIPTS:/opt/oracle/product64/11.2.0.1/OPatch -
JVM 1.5.0, parallelism and object creation
Hi.
I am currently running Java 1.5.0 on a production server. This server is a 4-cpu 2gb ram beast running Red Hat ES 3. It provides MySQL backend and a Java server to be accessed through a Flash client.
So far, the Flash client fares well. MySQL takes worst cast 16% of one CPU for very heavy selections. But I am having problems with optimizing the Java part that does everything.
First and foremost, I cannot change the way it is. Our java code is mostly vendor code, thus we can't really expect to be able to easily change the code. Whatever code we added to the vendor code is definitely not the bottleneck, it's optimized, it's properly synchronized and it's very effective.
I would like to give you an idea of how things fares. You will see my problem soon.
- I am running one process of Java. This process is -Xms and Xmx'ed to 384 megs.
- The total DSize of the Java environment is more than a gigabyte due to the 1000+ threads that runs through it. More so, every client that runs through it adds up at least two threads.
- There are massive object creation and destruction happening. For a 100-client system, the "eden" memory is filled up and GC'ed at least twice per second. Since 1.5.0, the "old" memory of 384m gets filled up in 10 minutes, and GC'ed at that point.
- CPU usage is having fun between 80% and 150% of one CPU (remember I have 4 CPUs so 150% is 150/400% total usage)
- GC is the major speed bump for my server, as if I put 768 megs of Xmm instead of 384, cpu usage drops to 60%-90% CPU, that is, until memory gets filled up and swap gets used (do the math: 768m + 1200 thread stacks)
Now it works fine. 100 users, it's perfect. My major problem is that from next week on, we are planning 300+ users. Ouch.
So my few questions are:
- In knowing that garbage must constantly be collected, is there something I can do in the environment to make it happen all the time in background? Or am I bound to have all 4 cpu's stopped momentarily twice per second so that it might happen?
- In 1.4.x, I could change "eden" memory block size. It doesn't seem to be the same for 1.5.x. What's up with that? I used to increase it dramatically, making GC longer but less frequent, increasing parallelism force.
I am asking the questions because I am not in position of trying "what if"s with my production server. The test server handles well our 8 internal users ... but we are not close of making the same amount of request as our 100-users production server... so we cannot reliably try out options. Best case is see if it crashes or now.
Thanks
MikeMikle -- please make sure that you are using either the
UseParallelGC collector or the UseConcMarkSweepCollector.
Both would appear to address some of the problems you
mention.
You may need to tune the size of the young generation
explicitly. Check out the GC tuning documents/tips
at:
http://java.sun.com/docs/hotspot
You should make sure your application is not paging.
Since the default thread stack sizes are large (2 MB?)
and you may not need that much, you can try -Xss256k
(for example) to reduce the virtual memory requirements
for your thread stacks and free up more address space
for the Java heap.
In the end, for an application of the kind you describe you
probably need to go 64-bit and use a larger Java heap
along with the parallel/concurrent collector to deal with the
attendant GC overheads. That (going 64-bit) should be easy
(trivial) if your application is pure Java.
Hi.
I am currently running Java 1.5.0 on a production
server. This server is a 4-cpu 2gb ram beast running
Red Hat ES 3. It provides MySQL backend and a Java
server to be accessed through a Flash client.
So far, the Flash client fares well. MySQL takes worst
cast 16% of one CPU for very heavy selections. But I
am having problems with optimizing the Java part that
does everything.
First and foremost, I cannot change the way it is. Our
java code is mostly vendor code, thus we can't really
expect to be able to easily change the code. Whatever
code we added to the vendor code is definitely not the
bottleneck, it's optimized, it's properly synchronized
and it's very effective.
I would like to give you an idea of how things fares.
You will see my problem soon.
- I am running one process of Java. This process is
-Xms and Xmx'ed to 384 megs.
- The total DSize of the Java environment is more than
a gigabyte due to the 1000+ threads that runs through
it. More so, every client that runs through it adds up
at least two threads.
- There are massive object creation and destruction
happening. For a 100-client system, the "eden" memory
is filled up and GC'ed at least twice per second.
Since 1.5.0, the "old" memory of 384m gets filled up
in 10 minutes, and GC'ed at that point.
- CPU usage is having fun between 80% and 150% of one
CPU (remember I have 4 CPUs so 150% is 150/400% total
usage)
- GC is the major speed bump for my server, as if I
put 768 megs of Xmm instead of 384, cpu usage drops to
60%-90% CPU, that is, until memory gets filled up and
swap gets used (do the math: 768m + 1200 thread
stacks)
Now it works fine. 100 users, it's perfect. My major
problem is that from next week on, we are planning
300+ users. Ouch.
So my few questions are:
- In knowing that garbage must constantly be
collected, is there something I can do in the
environment to make it happen all the time in
background? Or am I bound to have all 4 cpu's stopped
momentarily twice per second so that it might happen?
- In 1.4.x, I could change "eden" memory block size.
It doesn't seem to be the same for 1.5.x. What's up
with that? I used to increase it dramatically, making
GC longer but less frequent, increasing parallelism
force.
I am asking the questions because I am not in position
of trying "what if"s with my production server. The
test server handles well our 8 internal users ... but
we are not close of making the same amount of request
as our 100-users production server... so we cannot
reliably try out options. Best case is see if it
crashes or now.
Thanks
Mike -
Error while reading indesign(.indd) file through COM object in c#
I want to read InDesign(.indd) file in c#. I have installed adobe InDesignCS6.
I have added COM reference of 'Adobe InDesign CS6 Type Library' in my c# application.
Code snippet is as follows.
[STAThread]
static void Main(string[] args)
InDesign.Application app = (InDesign.Application)COMCreateObject("InDesign.Application");
Document doc = app.ActiveDocument;
Page page = doc.Pages[1];
TextFrame frame = page.TextFrames[1];
Console.WriteLine(frame.Contents.ToString());
public static object COMCreateObject(string sProgID)
// We get the type using just the ProgID
Type oType = Type.GetTypeFromProgID(sProgID);
if (oType != null)
return Activator.CreateInstance(oType);
return null;
But the first line itself throwing an following error while type casting output of COMCreateObject method into InDesign.Application type.
Error :
Unable to cast COM object of type 'System.__ComObject' to interface type 'InDesign.Application'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{ABD4CBB2-0CFE-11D1-801D-0060B03C02E4}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
Kindly help me. Its urgent.try this,
InDesign.Application app = (InDesign.Application)COMCreateObject("InDesign.Application.CS6"); -
Hello
Please tell me what is the difference between these two object creation of string.
String str = new String("Hello");.
String str="Hello";
Thanks.RGEO wrote:
hello,
Is the string pool is part of a heap? Huh? I suppose yes, you could regard the String pool as part of the heap... but (I guess) that interned String objects would be placed directly into the permanent generation, which is not garbage collected... and therefore I don't really think of the permanent generation as part of the heap (except when tuning heap allocations)... but I think I'm talking over your noob head here, yes... and so to the noob-stuff.
If you get bored you might like to scan (for now) http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html#generations ... and come back to it in a couple of years time (when every second word isn't new and baffling to you;-)
jvm what will do when he encounter the following code,
String s1 = new String ("hello");The VM will:
1. Create a new String object, and then
2. copy the characters 'h','e','l','l','o' from the interned String "hello" to the new String,
3. and then assign a reference to the new String to variable s1.
Note that the result is subtley different from String s1 = "hello", which just does step 3... it assigns a reference to the existing interned String object "hello" to the variable s1... it does not create and "populate" a new String object.
Try this just for fun... what is the output of the following program? Why?
package forums;
public class StringEquals
public static void main(String[] args) {
try {
String a = "Hello";
String b = "Hello";
System.out.println("a==b is "+(a==b));
String c = new String("Hello");
System.out.println("a==c is "+(a==c));
} catch (Exception e) {
e.printStackTrace();
}Now, what's the correct way to evaluate equality of String objects in Java?
HTH. Cheers. Keith. -
DMS BAPI_DOCUMENT_CREATE2 Class type Technical Document Category, object ty
Hello Experts!
The problem is that DMS import functionality stoped working after supp. pack implementation.
The process is based on BAPI_DOCUMENT_CREATE2 functionality.
The first problem was an error "The status set requires a previous status" which was causes dy note 1157678
(http://wiki.sdn.sap.com/wiki/display/PLM/Error-Thestatussetrequiresapreviousstatus)
After setting break point/de-implementing that note additional error appeared:
"Class type Technical Document Category, object ty"
Does anyone have idea what caused the problem, or which sap note did that? before SP19 implementation that error was not displayed.
Current highest support package is SAPKH60403.
Thanks in advance for help,
Rgds,
LBHi,
That error refers to updating characteristics for classification (addnl data tab in DIR).
Does anyone know what could cause the problem after support pack implementation?
Is it possible that bapi_document_create2 > api_document_maintain2 disables an option to update classification? -
Hi all,
I have the following code:
Dim oProdOrders As SAPbobsCOM.Documents
oProdOrders = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oProductionOrders)
after the second line I get a system exception: {"Unable to cast COM object of type 'System.__ComObject' to interface type 'SAPbobsCOM.Documents'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{A6DA575B-E105-4585-9F4B-50CC4044EEDD}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE))."}
If I change document to eg oQuotations it proceeds normally.
Any Idea?
Thanks in advance,
Vangelistry it as
Dim oProdOrders As SAPbobsCOM.ProductionOrders
oProdOrders = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oProductionOrders) -
I am having a heck of a time finding a good example of a word
COM object. I just upgraded from word 2000 to word 2007, in hopes
that would suddenly work for me (which honestly I didn't
expect...). In word 2000, this line worked fine, but not in 2007:
thisDoc.SaveAs("c:\MyDoc.doc");
Here is what I am trying to accomplish: I need to use values
submitted by forms and input it into a word document. The word doc
needs to have different paragraphs in different formats. I thought
I could build the paragraphs somehow, with formatting with
something like para1 = docrange.newparagraph(); then insert the
text and formatting into para1 and then insert para1 into the
document. It does not seem to be working at all. If someone can
link me to a good example I can figure it out from there, but I
don't seem to be able to find it. Here is my code so far:
<cfquery name="getAttorney" datasource="agreement">
Select * from Attorney where ID = #Form.attorney#
</cfquery>
<cfoutput query="getAttorney">
<cfset attornyInfo =
"#Name#
#email#
#Phone#">
</cfoutput>
<CFTRY>
<!--- If it exists, connect to it --->
<CFOBJECT
ACTION="CONNECT"
CLASS="Word.Application"
NAME="objWordApp"
TYPE="COM">
<CFCATCH>
<!--- The object doesn't exist, so create it --->
<CFOBJECT
ACTION="CREATE"
CLASS="Word.Application"
NAME="objWordApp"
TYPE="COM">
</CFCATCH>
</CFTRY>
<CFSCRIPT>
/* This will open Word if running locally */
objWordApp.Visible = true;
/* This returns the 'Documents' collection the Word Object
thisDoc = objWordApp.Documents.add();
/* Save the document to a location */
thisDoc.SaveAs("c:\MyDoc.doc");
docRange = thisDoc.Range(0);
docRange.Style=-2;
docRange.InsertAfter("Header1");
docRange.InsertParagraphAfter();
docRange.Style=-3;
docRange.InsertAfter("I am the paragraph you requested");
docRange.InsertBreak();
docRange.InsertAfter("check me out... I'm on the second
page!");
para1 = thisdoc.paragraphs.count();
data = docrange.listparagraphs();
data1 = docrange;
/* Save the changes */
thisDoc.Save();
/* Close the document */
thisDoc.Close();
/* Quit Word */
objWordApp.Quit();
</CFSCRIPT>
<cfdump var="#para1#">
<cfdump var="#data#">
<cfdump var="#data1#">
The dumps do dump information on the related objects, giving
me methods, puts and gets, but I need more explantion than what is
actually provided. Para1 used to dump "1" even though I had more
paragraphs than that in the build. Since I upgraded to 2007, I have
not gotten it not to error out, I will try to save it as a docx,
but a doc is really more appropiate for my purposes.
Thank you for your time.The last time I had to deal with a requirement like this,
which was
about 2000-2001, we eventually scrapped the word COM thing.
Even then
it was such a fragile and perilous solution, fraught with
problems and
headaches.
What we ended up doing, that was much easier, was to create a
.rtf, rich
text format, file. We could do all the required formating in
this
format, and 90% of the uses would have this file open in MS
Word and not
even know they did not get a .doc file.
How we did it was create a .rtf template with dummy text that
had all
the desired formating. Then we could read in the .rtf file,
which is
just a marked-up text file, not a binary, and string replace
the dummy
text with the dynamic text. Save it again and viola a rich
text
formated file with the required content.
These days, I would push for doing this in PDFs and use
ColdFusion's
<cfdocument...> and|or <cfpdf...> functionality.
But if it has to be
Word, I suppose it has to be Word. -
Oracle 8i Lite: Command Object Creation Failed
Hi Everyone,
I use Windows XP everything works except navigator and I get the message that Command Object Creation Failed
Does Anyone know how to fix this and I have to use 8i Lite as it for a school database project
Thanks in advance for everyone's help
J SHi. I know this response is too many years late, but I'm putting it in case someone (like me a few days ago) needs to connect to a legacy server using legacy tools:
This error is caused by the installer, sometimes it does not adequately register the OLE/COM objects provided in nav8cmd.dll
So, to correct it:
- open a command window
- change to the directory where the navigator program files reside (In my case c:\orant\bin)
- type the following command: regsvr32 nav8cmd.dll
You should receive a message that the DLL was correctly registered. After that you can use the navigator without problems.
Cheers. -
Adobe Plugin not able to access COM object in Protected mode
We have an adobe plugin for our application. The plugin creates a toolbar button in Adobe and on clicking this button, it invokes one of the form from our application to save the document record for the PDF file in the database. The plugin was working fine till Adobe 9. It stopped working in Adobe X with proctected mode ON. However, if we turn off Protected mdoe, it works fine.
I did some research and found that we need to modify the policy rules by creating ProtectedModeWhitelistConfig.txt file and appropriate registry for it. I did those steps and now I am not getting "Access denied" error when protected mode is ON but the plugin is still not working. On further debug, I found that it fails while trying to connect to SQL Server. It gives error "SSL Security Error". This is working perfectly fine without protected mode. Also It is not able to access COM objects. I guess both these things might be related.
Can anyone let me know what are we missing here?I would recommend that open a formal support case, as working with Protected Mode is quite complex.
-
Is it possible to restrict the object creation for stateless session beans
Hi,
Is it possible to restrict/fix the ejb object creation for stateless session beans in application server?
For example, i want to configure the application server ( am using JBOSS ) to create maximum of 10 session bean objects. and if any requests for the stateless session bean come, as application server has created 10 objects, the requests should be blocked.
Thanks in advance,
nvseenuYou can keep a counter in the application code. A static var won't work, but an entity and a consistent id should. This version would affect performance, but it would be portable to other app servers.
// ConstrainedBean.java
package unq.ejb;
import javax.ejb.Stateless;
import javax.ejb.CreateException;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.persistence.PersistenceContext;
import javax.persistence.EntityManager;
@Stateless
public class ConstrainedBean implements Constrained {
final static int DEFAULT_COUNTERID = 1;
@PersistenceContext EntityManager em;
@PostConstruct
protected void init() throws CreateException {
ConstrainedBeanCounter counter =
em.find(ConstrainedBeanCounter.class, DEFAULT_COUNTERID);
if( counter == null ) {
counter = new ConstrainedBeanCounter();
counter.counterId = 1;
counter.counterValue = 0;
em.persist(counter);
if( counter.atMaximum() ) {
throw new CreateException("error attempting to create > 10 beans");
else {
counter.increment();
@PreDestroy
protected void destroy() {
ConstrainedBeanCounter counter = em.find(ConstrainedBeanCounter.class,
DEFAULT_COUNTERID);
counter.decrement();
public void doSomething() { System.out.println("doSomething()"); }
// ConstrainedBeanCounter.java
package unq.ejb;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class ConstrainedBeanCounter implements java.io.Serializable
@Id public int counterId;
public int counterValue = 0;
public void increment() {
counterValue++;
public void decrement() {
counterValue--;
public boolean atMaximum() {
return counterValue > 9;
} -
Hi everyone,
I've got a project on the horizon that involves using an API to access a database. The API uses COM objects.
Can I connect to the API using <cfobject> like this:
<cfobject
class = "program ID"
name = "myneatobject"
action = "connect"
context = "remote"
server = "http://someserverip">
type = "com">
If the server is remote, isn't there some security involved? Login credinentials? I'm trying to ge my head around this. There's an exisiting website in place using the API, however we're planning on redoing everything in CF.
Thanks for any tips in to set me straight!Thanks Guys.
To be sure I'm describing this properly, I've got the manual for the API (updated in 2009) and it states
"The API is a COM+ application (formerly MTS). It
provides a set of COM objects that can be manipulated by COM-
compliant development tools such as Visual Basic, Visual C++, Visual
C#, VSTA and so on.
The API provides the ability to search and locate accounts across
multiple databases. It uses an advanced data cache mechanism to
minimize round-trips to database servers.
Once the account is located using a 10-digit telephone, and
optionally an account number, each subsequent attempt to connect to an
database requires a company number as well as a valid account
number."
The following example shows how to modify an existing user profile information:
Dim objUserProfile as Object
Dim lRetCode as Integer
Set objUserProfile = CreateObject("EnergyAPI.cUserProfile")
lRetCode = objUserProfile.ModifyUserInfo (sEmailAddress,
sPassword,sName,sPAsswordHint,sHintAnswer,lPreferences,cSysUser)
If lRetCode <> 0 Then
‘ Failure - Display error message
Else
‘ Success
End If
COM+ much different than COM?? Not from what I'm reading. -
How sharing a COM object with severeal test dlls in teststand
I have several tests (dlls) accessing a DAQ board (not VI compliant) thanks to a COM object. I would like to keep one instance of this object, passing its reference to each test dll, instead of creating one in each test. How can I do that with TestStand?
You can do one of two things to store a reference to the COM object in the context of TestStand so that you can pass it to successive steps in order for them to all use the same object instance.
First, if you create the object in TestStand with an ActiveX Automation Adapter step, the method call to instantiate the object should return a reference to the object. If you designate an activex reference type local variable as the property to receive the reference during the creation operation, you should be able to pass this into methods that use IDispatch* parameters, or you can use the TestStand API to access the TestStand variable instead.
The second scenario is very similar, in that if you don't create the object in TestStand but inside of a dll instea
d, you can simply pass the parameter back from a function into a TestStand activex reference property variable or use the TestStand API inside of the dll to set the value of an activex reference property to the IDispatch of the object.
To better understand how to use the ActiveX Automation Adapter and ActiveX Reference Variable Types, look at Chapter 13 of the TestStand User Manual under the section entitled "ActiveX Automation Adapter". I have also attached an example to this post that uses the ActiveX Automation Adapter and ActiveX reference datatype in a sequence that writes data to a Microsoft Excel spreadsheet and generates a chart from the data.
Jason F.
Applications Engineer
National Instruments
www.ni.com/ask
Attachments:
Write_Table_to_XL_and_Create_Chart.seq 53 KB -
Frequent Object Creation vs. synchronized
HI all,
I'm just looking to prompt a discussion I can learn from. Apologies if I'm missing something.
Having just read the excellent articles over at:
http://www-106.ibm.com/developerworks/java/library/j-threads1.html
http://www-106.ibm.com/developerworks/java/library/j-threads2.html
http://www-106.ibm.com/developerworks/java/library/j-threads3.html
I was left wondering about the (largely unmentioned) trade-off between object creation and use of synchronization.
If a particular part of a given system is heavily accessed then one might consider instantiating, and caching references to, components in an initialisation stage. In a multithreaded environment, this can obviously pose a problem.
If these components aren't threadsafe then at some point use will have to be made of a synchronized block, unless the unsafe components are instantiated for every thread.
The articles do mention the overrated cost of synchronization - how does this compare with the cost of frequent object instantiation?
Thanks for your time,
JohnGWell, let's time it (test program below):
using no synchronization: 180 ms (baseline measurement, not thread safe)
using new: 1111 ms
using uncontended sync: 491 ms
using contended sync: 49531 ms
new is fast - ten million temporary object allocations and frees per second. A magnitude faster than in traditional malloc()/free() -based languages. new is rarely a performance problem in Java programs.
Uncontended locks are fast - twenty million per second.
Heavily contended locks slow you down. Way down. A second becomes a minute.
Don't try to optimize unless you have measured a real performance bottleneck.
Object pooling is unlikely to help. Exceptions being objects that are expensive to initialize and are created often (e.g. large buffers or arrays, cryptographic engines that take time to initialize, or connections to external systems such as databases). You'll need to measure first if object creation really is the bottleneck.
public class t
static class Calculator
private int value;
void initialize(int n)
value = n;
int result()
return value * 2;
static class NewThread
extends Thread
int result;
public void run()
for (int n = 0; n < 1000 * 1000; n++) {
Calculator x = new Calculator();
x.initialize(n);
result += x.result();
static class SyncThread
extends Thread
static Calculator x = new Calculator();
int result;
public void run()
for (int n = 0; n < 1000 * 1000; n++) {
synchronized (x) {
x.initialize(n);
result += x.result();
// Not thread safe
static class BaselineThread
extends Thread
static Calculator x = new Calculator();
int result;
public void run()
for (int n = 0; n < 1000 * 1000; n++) {
x.initialize(n);
result += x.result();
public static void main(String args[])
throws Exception
int thread_count = 10;
for (int n = 0; n < 5; n++) {
Thread threads[] = new Thread[thread_count];
long start = System.currentTimeMillis();
for (int m = 0; m < thread_count; m++) {
// threads run consecutively, not in parallel
(threads[m] = new BaselineThread()).start();
threads[m].join();
long end = System.currentTimeMillis();
System.out.println("using no synchronization: " +
(end - start) + " ms");
for (int n = 0; n < 5; n++) {
Thread threads[] = new Thread[thread_count];
long start = System.currentTimeMillis();
for (int m = 0; m < thread_count; m++)
(threads[m] = new NewThread()).start();
for (int m = 0; m < thread_count; m++)
threads[m].join();
long end = System.currentTimeMillis();
System.out.println("using new: " + (end - start) + " ms");
for (int n = 0; n < 5; n++) {
Thread threads[] = new Thread[thread_count];
long start = System.currentTimeMillis();
for (int m = 0; m < thread_count; m++) {
// threads run consecutively, not in parallel
(threads[m] = new SyncThread()).start();
threads[m].join();
long end = System.currentTimeMillis();
System.out.println("using uncontended sync: " +
(end - start) + " ms");
for (int n = 0; n < 5; n++) {
Thread threads[] = new Thread[thread_count];
long start = System.currentTimeMillis();
for (int m = 0; m < thread_count; m++)
(threads[m] = new SyncThread()).start();
for (int m = 0; m < thread_count; m++)
threads[m].join();
long end = System.currentTimeMillis();
System.out.println("using contended sync: " +
(end - start) + " ms");
}
Maybe you are looking for
-
Calling a method on backing bean in response to contextual event
Hi I am using Jdeveloper 11.1.1.6.0 and using ADF contextual events.. I have a drop down list and i am rasiing a contextual event on changing the current selection. In response to that event i want to call a backing bean method with parameters.. But
-
Use of final keyword on methods arguements ?
Hi All, Just say I have an input arguement for a method which is an int. If I wanted to access the value stored by the input arguement reference inside an anonymous class that is contained in the method one way would be to pass the input arguement re
-
How to set executeThreadCount on the client side in WLS 6.0 SP1
In WLS 5.1, you can set executeThreadCount on client side by using "java -Dweblogic.system.executeThreadCount=30 clientProgram". What's the counter part in WLS 6.0? The qustion is strictly to CLIENT. I know how to configure executeThreadCount on serv
-
File Servers in Multiple locations
HI All, We have seven sites and each location have the Windows 2003 File Servers, Tape drive and offsite Backup service. So what is the best practice to reduce the cost and give better solutions to users. Also need to backup and easy to maintain.
-
Clustering on a single box.
Is there typically a performance benefit from clustering EJBs on single box? That is, running a number of smaller (memory footprint) Weblogic Servers on a single machine vs. one larger instance. In its simplest form, we have an