Unsupported query for Continuous Query Notification
Hi all,
I'm following an application which supports ADS(Active Data Service). http://www.consideringred.com/files/oracle/2011/ActiveDataServiceADFBCApp-v0.02.zip
I build the application and it works well.
Then I created a ViewCriteria for the same VO. Then added a search panel through that ViewCriteria.
Now when I change data at database it shows the data change (ADS works).
But when I search for data through that search boxes it gives me the following error.
java.sql.SQLException: ORA-29983: Unsupported query for Continuous Query NotificationHow can I overcome this error....??
Thanks,
Dinuka.
Here it is Mr.John..,
>
<ADFLogger> <begin> Execute query
<ViewObjectImpl> <closeStatementsResetRowSet> [7421] ViewObject: [########.client.views.TestVO]ClientAM.TestVO1 close prepared statements...
<ViewObjectImpl> <getPreparedStatement> [7422] ViewObject: [########.client.views.TestVO]ClientAM.TestVO1 Created new QUERY statement
<ViewObjectImpl> <buildQuery> [7423] TestVO1>#q computed SQLStmtBufLen: 2911, actual=2823, storing=2853
<ViewObjectImpl> <buildQuery> [7424] SELECT * FROM (SELECT
ClientsEO.ADDED_BY,
ClientsEO.APPROVAL_STATUS,
ClientsEO.CHANGED_BY,
ClientsEO.CLIENT_PREFIX,
ClientsEO.CLIENT_SUFFIX,
ClientsEO.CLIENT_TYPE,
ClientsEO.COUNTRY_OF_RESIDENCE,
ClientsEO.CUSTODIAN_NUMBERED_ACC,
ClientsEO.DATE_ADDED,
ClientsEO.DATE_CHANGED,
ClientsEO.DATE_OF_INCORPORATION,
ClientsEO.DATE_STATUS_CHANGED,
ClientsEO.DISPOSAL_INSTRUCTIONS,
ClientsEO.DIVIDEND_DISP_TYPE,
ClientsEO.ENTITLEMENT_TO_UNASSIGNED,
ClientsEO.ENTITLEMENT_UNASSIGNED,
ClientsEO.GENDER,
ClientsEO.INITIALS,
ClientsEO.LOCAL_CLIENT_ID,
ClientsEO.MEMBER_CODE,
ClientsEO.MEMBER_TYPE,
ClientsEO.NATIONALITY,
ClientsEO.OTHER_NAMES,
ClientsEO.REMARKS,
ClientsEO.STATUS,
ClientsEO.STATUS_CHANGE_REASON_CODE,
ClientsEO.STATUS_CHANGED_BY,
ClientsEO.SURNAME,
ClientsEO.TAX_CODE_DEBT,
ClientsEO.TAX_CODE_EQT,
ClientsEO.TITLE,
CS.DESCRIPTION STATUS_DESCRIPTION,
CT.DESCRIPTION TYPES_DESCRIPTION,
ClientsEO.CLIENT_SUFFIX as Client_Suff,
DECODE(ClientsEO.GENDER, 'M', 'MALE', 'F', 'FEMALE', 'N/A') CLIENT_GENDER,
CASE
WHEN CSF.COMPANY = 'Y' THEN ClientsEO.SURNAME
ELSE ClientsEO.TITLE || ' ' || ClientsEO.OTHER_NAMES || ' ' || ClientsEO.SURNAME
END Name,
C.COUNTRY_NAME,
C.NATIONALITY COUNTRY_NATIONALITY,
CSF.DESCRIPTION SUFFIX_DESCRIPTION,
DECODE(ClientsEO.MEMBER_TYPE,'',' ',(SELECT MT.DESCRIPTION FROM MEMBER_TYPES MT WHERE MT.MEMBER_TYPE=ClientsEO.MEMBER_TYPE )) MEM_TYPE_DESCRIPTION,
DECODE(ClientsEO.TAX_CODE_DEBT,'',' ',(SELECT TS.TAX_DESCRIPTION FROM TAX_STATUS_CODES TS WHERE TS.TAX_CODE=ClientsEO.TAX_CODE_DEBT )) TAX_DEBT_DESCRIPTION,
DECODE(ClientsEO.TAX_CODE_DEBT,'',' ',(SELECT TS.TAX_RATE FROM TAX_STATUS_CODES TS WHERE TS.TAX_CODE=ClientsEO.TAX_CODE_DEBT )) TAX_DEBT_RATE,
DECODE(ClientsEO.TAX_CODE_EQT,'',' ',(SELECT TS.TAX_DESCRIPTION FROM TAX_STATUS_CODES TS WHERE TS.TAX_CODE=ClientsEO.TAX_CODE_EQT )) TAX_EQT_DESCRIPTION,
DECODE(ClientsEO.TAX_CODE_EQT,'',' ',(SELECT TS.TAX_RATE FROM TAX_STATUS_CODES TS WHERE TS.TAX_CODE=ClientsEO.TAX_CODE_EQT )) TAX_EQT_RATE,
DECODE(ClientsEO.DIVIDEND_DISP_TYPE, 'C', 'CASH','B' , 'BANK','') DIVIDEND_DISP_DESCRIPTION ,
DECODE(ClientsEO.STATUS_CHANGE_REASON_CODE,'','',(SELECT SR.REASON FROM SUSPENDING_REASONS SR WHERE SR.REASON_CODE=ClientsEO.STATUS_CHANGE_REASON_CODE )) STATUS_CHANGE_REASON
FROM
CLIENTS ClientsEO,
CLIENT_STATUS CS,
CLIENT_TYPES CT,
COUNTRIES C,
CLIENT_SUFFIXES CSF
WHERE
ClientsEO.CLIENT_TYPE = CT.CLIENT_TYPE AND ClientsEO.STATUS = CS.STATUS AND ClientsEO.COUNTRY_OF_RESIDENCE = C.COUNTRY_CODE(+) AND ClientsEO.CLIENT_SUFFIX = CSF.CLIENT_SUFFIX) QRSLT WHERE ( ( (UPPER(CLIENT_PREFIX) = UPPER(:vc_temp_1) ) ) )
<ViewObjectImpl> <bindParametersForCollection> [7425] Bind params for ViewObject: [########.client.views.TestVO]ClientAM.TestVO1
<OracleSQLBuilderImpl> <bindParamValue> [7426] Binding param "vc_temp_1": 325
<ADFLogger> <addContextData> Execute query
MyOracleDatabaseChangeListenerWrapper.getRegistrationProperties() : vProperties = {DCN_QUERY_CHANGE_NOTIFICATION=true, DCN_NOTIFY_ROWIDS=true, DCN_BEST_EFFORT=true}
<ADFLogger> <addContextData> Execute query
<ViewObjectImpl> <freeStatement> [7427] ViewObject: [########.client.views.TestVO]ClientAM.TestVO1 close single-use prepared statements
<QueryCollection> <buildResultSet> [7428] QueryCollection.executeQuery failed...
<QueryCollection> <buildResultSet> [7429] java.sql.SQLException: ORA-29983: Unsupported query for Continuous Query Notification
>
I think this is the query you asked for.
thanks for paying attention Mr.John.
Dinuka.
Edited by: dinuka on Jul 25, 2011 12:18 PM
some package names removed due to company rules and regulations.
Similar Messages
-
VO Auto Refresh error - Unsupported query for Continuous Query Notification
I created a read only view object and set the auto refresh property to true. According to the documentation that was all that need to be done in order to enable auto-refresh for a view instance of a shared application module (which I am using to retrieve reference data). When I run a test, I get the following error:
[371] DCBindingContainer.reportException :oracle.jbo.SQLStmtException
[372] oracle.jbo.SQLStmtException: JBO-27122: SQL error during statement preparation. Statement: SELECT
CCIPO_REF_SENSITIVITY_LEVEL.SENSITIVITY_ID SENSITIVITY_ID,
CCIPO_REF_SENSITIVITY_LEVEL.SENSITIVITY_DESC SENSITIVITY_DESC
FROM
CCIPO_REF_SENSITIVITY_LEVEL
at oracle.jbo.server.BaseSQLBuilderImpl.processException(BaseSQLBuilderImpl.java:3721)
at oracle.jbo.server.OracleSQLBuilderImpl.processException(OracleSQLBuilderImpl.java:4722)
at oracle.jbo.server.QueryCollection.buildResultSet(QueryCollection.java:1386)
at oracle.jbo.server.QueryCollection.executeQuery(QueryCollection.java:928)
at oracle.jbo.server.ViewObjectImpl.executeQueryForCollection(ViewObjectImpl.java:6968)
at oracle.jbo.server.ViewRowSetImpl.execute(ViewRowSetImpl.java:1183)
at oracle.jbo.server.ViewRowSetImpl.execute(ViewRowSetImpl.java:1037)
at oracle.jbo.server.ViewRowSetIteratorImpl.ensureRefreshed(ViewRowSetIteratorImpl.java:2774)
at oracle.jbo.server.ViewRowSetIteratorImpl.ensureRefreshed(ViewRowSetIteratorImpl.java:2751)
at oracle.jbo.server.ViewRowSetIteratorImpl.first(ViewRowSetIteratorImpl.java:1580)
at oracle.jbo.server.ViewRowSetImpl.first(ViewRowSetImpl.java:3500)
at oracle.jbo.server.ViewObjectImpl.first(ViewObjectImpl.java:9943)
at oracle.adf.model.binding.DCIteratorBinding.setupRSIstate(DCIteratorBinding.java:779)
at oracle.adf.model.binding.DCIteratorBinding.refreshControl(DCIteratorBinding.java:679)
at oracle.jbo.uicli.binding.JUIteratorBinding.refreshControl(JUIteratorBinding.java:474)
at oracle.adf.model.binding.DCIteratorBinding.refresh(DCIteratorBinding.java:4437)
at oracle.adf.model.binding.DCExecutableBinding.refreshIfNeeded(DCExecutableBinding.java:347)
at oracle.adf.model.binding.DCIteratorBinding.getRowSetIterator(DCIteratorBinding.java:1605)
at oracle.jbo.jbotester.panel.BindingPanel.setBindingContext(BindingPanel.java:116)
at oracle.jbo.jbotester.panel.BindingPanel.<init>(BindingPanel.java:88)
at oracle.jbo.jbotester.panel.BindingPanel.<init>(BindingPanel.java:71)
at oracle.jbo.jbotester.form.BindingForm.createMasterPanel(BindingForm.java:63)
at oracle.jbo.jbotester.form.BindingForm.init(BindingForm.java:98)
at oracle.jbo.jbotester.form.JTForm.<init>(JTForm.java:72)
at oracle.jbo.jbotester.form.BindingForm.<init>(BindingForm.java:50)
at oracle.jbo.jbotester.form.FormType$1.createForm(FormType.java:63)
at oracle.jbo.jbotester.form.FormType.createForm(FormType.java:199)
at oracle.jbo.jbotester.form.FormType.createTab(FormType.java:270)
at oracle.jbo.jbotester.form.FormType.showForm(FormType.java:248)
at oracle.jbo.jbotester.form.FormType.showForm(FormType.java:207)
at oracle.jbo.jbotester.form.FormType.showForm(FormType.java:203)
at oracle.jbo.jbotester.tree.ObjTreeNode.showForm(ObjTreeNode.java:140)
at oracle.jbo.jbotester.tree.ObjTreeNode.showForm(ObjTreeNode.java:123)
at oracle.jbo.jbotester.tree.Tree.processTreeMouseClicked(Tree.java:728)
at oracle.jbo.jbotester.tree.Tree.access$100(Tree.java:96)
at oracle.jbo.jbotester.tree.Tree$TreeMouseListener.mouseClicked(Tree.java:141)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
at java.awt.Component.processMouseEvent(Component.java:6292)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6054)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4652)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4482)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4247)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4482)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
at java.awt.EventQueue.access$000(EventQueue.java:85)
at java.awt.EventQueue$1.run(EventQueue.java:603)
at java.awt.EventQueue$1.run(EventQueue.java:601)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:617)
at java.awt.EventQueue$2.run(EventQueue.java:615)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: java.sql.SQLException: ORA-29983: Unsupported query for Continuous Query Notification
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:457)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:405)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:889)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:476)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:204)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:540)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:217)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:924)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1261)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1419)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3752)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3806)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1667)
at oracle.jbo.server.QueryCollection.buildResultSet(QueryCollection.java:1262)
... 65 more
The query is selecting two varchar2 columns and according to the criteria in the documentation is valid to be registered for QRCN in Guaranteed Mode. Any thoughts?
JDev version: JDeveloper 11.1.1.5.0.Well, could be a DB bug. I seem to remember that there was a bug in that area in an older version of 11g.
Or you could use jnettrace to trace the calls made by the driver to the DB. That should show you what's going wrong.
Sascha -
ORA-29983: Unsupported query for Continuous Query Notification
Hi, i'm having a LOV with auto refresh. If i add "Order by " to the LOV query , the following exception is thrown.
SQL error during statement preparation. Statement: SELECT * FROM (SELECT DISTINCT XXXX FROM YYYY) QRSLT ORDER BY "XXXX"
Error ORA-29983: Unsupported query for Continuous Query Notification
I tried to override the create method of the VO, with "this.setNestedSelectForFullSql(false);" .. But this one disables the auto referesh property...
Could some one help to solve this. Thanks .Hi, i looked into the ADF run-time source code and i can see that , the connection object " OracleDatabaseChangeListenerWrapper" class setting the mode as "BEST_EFFORT".
I would assume , by default adf run-time using the best effort mode , not the guaranteed mode.
The data base doc also says in best effort mode "order by" clause as well as key word "like" can be used for continuous query notification. But still i'm getting "ORA-29983".
Could some one clarify me. Thanks . -
Initial vale in a Query for Transient Query
I need to set the value of a transient attribute of my view object when when query execute. PorDesc = 1-(NewPrice/OldPrice*100).
how can i do it? how can i set value in a query execution of the viewObject?
my jdeveloper version is 11.1.2.3
<ViewAttribute
Name="ProdNum"
PrecisionRule="true"
EntityAttrName="ProdNum"
EntityUsage="eoProductos"
AliasName="PROD_NUM"/>
<ViewAttribute
Name="OldPrice"
PrecisionRule="true"
EntityAttrName="OldPrice"
EntityUsage="ListaPrecioDetalle"
AliasName="OLD_PRICE">
<Properties>
<SchemaBasedProperties>
<LABEL
ResId="model.vo.voListaPrecioDetalle.PrecioLista_LABEL"/>
</SchemaBasedProperties>
</Properties>
</ViewAttribute>
<ViewAttribute
Name="NewPrice"
PrecisionRule="true"
EntityAttrName="NewPrice"
EntityUsage="ListaPrecioDetalle"
AliasName="NEWPRICE">
<Properties>
<SchemaBasedProperties>
<LABEL
ResId="model.vo.voListaPrecioDetalle.Precio_LABEL"/>
</SchemaBasedProperties>
</Properties>
</ViewAttribute>
<ViewAttribute
Name="PorDesc"
IsQueriable="false"
IsPersistent="false"
PrecisionRule="true"
EntityAttrName="PorDesc"
EntityUsage="PrecioDetalle"
AliasName="$none$">
<Properties>
<SchemaBasedProperties>
<LABEL
ResId="model.vo.voListaPrecioDetalle.PorDesc_LABEL"/>
</SchemaBasedProperties>
</Properties>
</ViewAttribute>Hi.
In the VO editor, click on your transient attribute. In the « details » tab, go to the « default value » section and select the « expression » radio button. Click the pen icon, and type 1-(NewPrice/OldPrice*100) as the expression (NewPrice and OldPrice must be the attribute names). At the bottom of the dialog, select NewPrice and OldPrice as the dependent attributes, which will ensure proper integrity for the value of the transient attribute.
Best Regards,
Frédéric. -
How to create query for infoprovider ? I have selection criteria, calculation and result screen for queries taken from one reference query. I am new to this part so dont know which transaction we will use to create query. Is it APO part or BI/BW part ?
I have to create queries for info provider. I have one reference query. I have to create similar selection screen as that of reference query for new query. Calculation which needs to be included in query is provided also result screen for query is given.
how to create query in APO using above input? Which transaction do we use to create query ?
I heard about BEx query analyzer which is there in BI for query creation . Is similar BEx functionality is available in APO ? If yes , what is t-code used for that? I know one tcode - RSRT with which I can see existing reference query selection? Is there similar tcode for query creation also in APO? -
Hi All,
I having block level 8000 records, I Scroll down from First record to last record it is takeing more time.
I Observed tkproof while scrolling two select statments are running..
1) pre-query block level
2) For update query
For update query -> How is is forming? Any Property or some else?
I am not able to find the second query..where it is forming..How to restrict the second query.
Query Array size - 10
Number of records buffered - 10
Number of records Displayed - 10
Query all records - No
Locking mode - Immediate
Key mode - Automatic
Version - Oracle 10g
Plz ........anyThe for update -query is generaetd by forms when its locking the record. If you didn't change anything in the record "by hand", check if there is some code in the POST-QUERY-trigger which forces the record to be locked. if its the POST-QUERY you can issue the following command to avoid the lock at the end of the POST-QUERY:
SET_RECORD_PROPERTY(:SYSTEM.TRIGGER_BLOCK, :SYSTEM.TRIGGER_RECORD, STATUS, QUERY_STATUS); -
Notification Query for Item Group
Dear Experts,
Please Guide me for a Notification Query for this Scenario :
I want to put a Notification Query for a Group i.e. when any user do transactions in any form or any Particular form using items
of this Group than if the Item Quantity is in Decimal then he can not do that Transaction and Get Error Message.
Thanks in Advance.
Atul ChakrabortyHi Atul,
to achieve this you have to write SPTN at the back end
under databases node select your live database.
Select programability
select stored procedure
select db.sbo.SP_Transactionnotification
and paste your code into
ADD YOUR CODE AREA
If (@object_type = '17') and (@transaction_type in ('A', 'U'))
BEGIN
Declare @ItmGrpCode as int
Declare @Qty as int
set @ItmGrpcode = (select oitm.itmsgrpcod from oitm inner join rdr1 on oitm.itemcode = rdr1.itemcode inner join ordr on
rdr1.docentry = ordr.docentry where ordr.docentry=@list_of_cols_val_tab_del)
set @Qty = (select quantity from rdr1 inner join ordr on ordr.docentry = rdr1.docentry where ordr.docentry =
@list_of_cols_val_tab_del)
BEGIN
if @ItmGrpcode = 10 and @qty = 0
Begin
set @error = -1
set @error_message = 'Invalid Input'
End
End
END
Like wise by capturing object type and dml mode you have to write code for every document that you want to check.
For example I've given code for Sales Order.
hope this will help you
Thanking you
Malhaar' -
NOTIFICATION QUERY FOR UDF COLUMN
Dear experts,
I want notification query for delivery should not be add without fill up the information in machine number column (UDF Column- U_MCnumber)
Please do needful.
Thanks & Regards,
AkshataDear all,
I have got query ...........
If @object_type = '15'and @transaction_type= ('A')
BEGIN
If Exists (Select T0.DocEntry from ODLN T0 Inner Join DLN1 T1
On T0.DocEntry=T1.DocEntry INNER JOIN OITM T3 ON T3.ItemCode = T1.ItemCode
Where (T1.U_MCnumber Is Null and T3.ITMsgrpcod='119')
And T0.DocEntry = @list_of_cols_val_tab_del )
BEGIN
Select @error = -1,
@error_message = 'Please fill up machine number!!!'
End
End
Thanks & Regards,
Akshata -
How to disable update notifications for Power Query?
Is there a way to disable the notification of available updates for Power Query? Command line switch on install, anything?
Thanks!it was included in the Power Query version released in September 2014. HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft Power Query for Excel DisableUpdateNotification dword 1 will disable the update notification.
Please remember to click "Mark as Answer" or "Vote as Helpful" on the post that answers your question (or click "Unmark as Answer" if a marked post does not actually
answer your question). This can be beneficial to other community members reading the thread.
This forum post is my own opinion and does not necessarily reflect the opinion or view of my employer, Microsoft, its employees, or MVPs.
Twitter:
@alexverboon | Blog: Anything About IT -
Continuous Query Caching - Expensive?
Hello,
I have had a look at the documentation but I still cannot find a reasonable answer to the following question : How expensive are continuous query caches?
Is it appropriate to have many of them?
Is the following example an acceptable usage of Continuous query caching (does it scale?)
In the context of a web application:
User logs onto a website
User performs a "Search" for financial instruments
A continuous query cache is created with a filter for those instruments returned (say, 50) to listen to price updates.
If the user pages, or does another search, the query cache is released and a new one, with an updated filter, is created.
Does it make a difference if we are using the extend client?Hi,
So 100 CQCs is probably not too excessive depending on the configuration of the process instantiating the CQCs and the cluster size etc.
Each CQC will hold its own set of deserialized keys and values, so yes they are distinct objects, although a CQC of 50 entries would not be very big.
One query I have - you mention that this is a Web Application but you also mention an Extend Client. Is your Web App and Extend Client of the main cluster? Is there are reason why you did this, most people would make a Web App a storage disabled cluster member so it would perform a bit better. Providing the Web App sits on a server that is very close in network terms to the cluster (i.e. same switch) then I would make it part of the cluster - or is the Web App the thing that is in the "regional environment".
If you are running CQCs over Extend then there used to be some issues with this if the Extend connection was lost. AFAIK this is supposed to be fixed in later patches so I would get 3.7.1.8 and make sure you test that the Web App continues to work and properly fails over if you kill its Extend connection. When the CQC fails over it will reinitialize all its data so you will need to cope with that if you are pushing changes based on the CQC.
JK -
Coherence-Extend and Continuous Query performance
Hi,
I am trying to evaluate the performance impact of continous queries, when using coherence extend (TCP). The idea is that desktop clients will be running continuous queries against a cluster, and other processes will be updating the data in that cluster. The clients themselves take a purely read-only view of the data.
In my tests, I find that the updater process takes about 250ms to update 5000 values in the cache (using a putAll operation). When I have a continuous query running against a remote cache, linked with coherence extend, the update time increases to about 1500ms. This is not CPU bound.
Is this what people would expect?
If so this raises questions to me about:
1) slow subscribers - what if one of my clients is very badly behaved? Can I detect this and/or take action?
2) conflation of updates - can Coherence do conflation?
3) can I get control to send object deltas over the wire rather than entire objects?
Is this a use case for which CoherenceExtend and continuous queries were designed?
RobertYes, it is certainly possible, although depending on your requirements it may be more or less additional coding. You have a few choices. For example, since you have a CQC on the cache, you could conceivably aggregate locally (on any event). In other words, since all the data are local, there is no need to do the parallel aggregation (unless it is CPU limited). Depending on the aggregation, you may only have to recalculate part of it.
You can access the internal data structure (Map) within the CQC as follows:
Map map = cqc.getInternalCache();
// now we can do aggregation
NamedCache cache = new WrapperNamedCache(map);
cache.aggregate(..);More complex approaches would only recalculate portions based on the event, or (depending on the function) might use the event to adjust the aggregated results.
Peace,
Cameron Purdy | Oracle Coherence
http://coherence.oracle.com/ -
Missed and duplicate events with Continues Query Cache
We have seen missed events and duplicate events when we register to receive events (using Continues Query Cache) on an entry in the cache while the entry is updating.
Use case:
Start a Node
Start a Proxy
Start Extend Client
Implementation of the Extend Client
Create Cache
Add Entry to Cache
Initiate Thread 1 {
For each ( 1 to 30)
Run Update Entry Processor on cache entry; Entry Processor increments the Cache Entry value by 1
Initiate Thread 2 {
wait until Cache entry is updated 10 times
Create MAP Listener {
For Entry Insert Event {
Print event
set Initial value = new value
For Entry Update Event {
Print event
set Update value = + 1
Initiate Continues Query Cache (cache, Always Filter, MAP Listener)
Start Thread 1
Start Thread 2
Waits until Thread 1 and Thread2 are terminated
Expected Result = read the value of the entry from cache
Actual result = Initial value + Update value
Results we have seen in two tests_
Test1: Expected Result > Actual results: Missing events
Entry Inserted Event: MapEvent{ContinuousQueryCache inserted: key=1, value=UpdateObject [intNumber=1, longNumber=13]}
+Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=13], new value=UpdateObject [intNumber=1, longNumber=15]}+*
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=15], new value=UpdateObject [intNumber=1, longNumber=16]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=16], new value=UpdateObject [intNumber=1, longNumber=17]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=17], new value=UpdateObject [intNumber=1, longNumber=18]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=18], new value=UpdateObject [intNumber=1, longNumber=19]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=19], new value=UpdateObject [intNumber=1, longNumber=20]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=20], new value=UpdateObject [intNumber=1, longNumber=21]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=21], new value=UpdateObject [intNumber=1, longNumber=22]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=22], new value=UpdateObject [intNumber=1, longNumber=23]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=23], new value=UpdateObject [intNumber=1, longNumber=24]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=24], new value=UpdateObject [intNumber=1, longNumber=25]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=25], new value=UpdateObject [intNumber=1, longNumber=26]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=26], new value=UpdateObject [intNumber=1, longNumber=27]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=27], new value=UpdateObject [intNumber=1, longNumber=28]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=28], new value=UpdateObject [intNumber=1, longNumber=29]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=29], new value=UpdateObject [intNumber=1, longNumber=30]}
Expected Result: 30
Actual Result: 29
Issue:+ Event on 14th update was not sent
Test 2: Expected Result < Actual Result: Duplicate events
Entry Inserted Event: MapEvent{ContinuousQueryCache inserted: key=1, value=UpdateObject [intNumber=1, longNumber=13]}
*Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=13], new value=UpdateObject [intNumber=1, longNumber=13]}*+
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=13], new value=UpdateObject [intNumber=1, longNumber=14]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=14], new value=UpdateObject [intNumber=1, longNumber=15]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=15], new value=UpdateObject [intNumber=1, longNumber=16]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=16], new value=UpdateObject [intNumber=1, longNumber=17]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=17], new value=UpdateObject [intNumber=1, longNumber=18]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=18], new value=UpdateObject [intNumber=1, longNumber=19]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=19], new value=UpdateObject [intNumber=1, longNumber=20]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=20], new value=UpdateObject [intNumber=1, longNumber=21]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=21], new value=UpdateObject [intNumber=1, longNumber=22]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=22], new value=UpdateObject [intNumber=1, longNumber=23]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=23], new value=UpdateObject [intNumber=1, longNumber=24]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=24], new value=UpdateObject [intNumber=1, longNumber=25]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=25], new value=UpdateObject [intNumber=1, longNumber=26]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=26], new value=UpdateObject [intNumber=1, longNumber=27]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=27], new value=UpdateObject [intNumber=1, longNumber=28]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=28], new value=UpdateObject [intNumber=1, longNumber=29]}
Entry Updated Event: MapEvent{ContinuousQueryCache updated: key=1, old value=UpdateObject [intNumber=1, longNumber=29], new value=UpdateObject [intNumber=1, longNumber=30]}
Expected Result: 30
Actual Result: 31
Issue:+ Event on 13th update was sent in Insert and Update events both
reg
Dasun.Hi Paul,
I tested with 3.7.1.4 and 3.7.1.5. In both versions I can see the issue.
reg
Dasun. -
Continuous Query Cache Local caching meaning
Hi,
I'm enconter following problem when I was working with continuous query cache with local caching TRUE.
I was able to insert data into coherence cache and read as well.
Then I stopped the process and try to read the data in the cache for keys which I inserted earlier.
But I received NULL as the result.
NamedCache::Handle hCache = DerivedCQC::create(CacheFactory::getCache("dist-AccountGCE"), AlwaysFilter::getInstance(), true);
DerivedCQC.hpp
* File: DerivedCQC.hpp
* Author: srathna1
* Created on 15 July 2011, 02:47
#ifndef DERIVEDCQC_HPP
#define DERIVEDCQC_HPP
#include "coherence/lang.ns"
#include "coherence/net/cache/ContinuousQueryCache.hpp"
#include "coherence/net/NamedCache.hpp"
#include "coherence/util/Filter.hpp"
#include "coherence/util/MapListener.hpp"
using namespace coherence::lang;
using coherence::net::cache::ContinuousQueryCache;
using coherence::net::NamedCache;
using coherence::util::Filter;
using coherence::util::MapListener;
class DerivedCQC
: public class_spec<DerivedCQC,
extends<ContinuousQueryCache> >
friend class factory<DerivedCQC>;
protected:
DerivedCQC(NamedCache::Handle hCache,
Filter::View vFilter, bool fCacheValues = false, MapListener::Handle hListener = NULL)
: super(hCache, vFilter, fCacheValues, hListener) {}
public:
virtual bool containsKey(Object::View vKey) const
return m_hMapLocal->containsKey(vKey);
#endif /* DERIVEDCQC_HPP */
When I switch off the local storage flag to FALSE.
I was able to read the data.
NamedCache::Handle hCache = DerivedCQC::create(CacheFactory::getCache("dist-AccountGCE"), AlwaysFilter::getInstance(), false);
Ideally I'm expecting in true scenario when I'm connected with coherence all keys and values with locally synced up with cache and store it locally and for each update also it will get synched up.
In false scenario it will hook into the coherence cache and read it from their for each key and cache values from that moment onwards. Please share how it is implemented underneath
Thanks and regards,
SuraHi Wei,
I found the issue when you declare you cache as an global variable then you won't get data in TRUE scenario and if you declare the cache during a method then you will retrieve data.
Try this.......
#include <iostream>
#include <coherence/net/CacheFactory.hpp>
#include "coherence/lang.ns"
#include <coherence/net/NamedCache.hpp>
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <coherence/net/cache/ContinuousQueryCache.hpp>
#include <coherence/util/filter/AlwaysFilter.hpp>
#include <coherence/util/filter/EntryFilter.hpp>
#include "DerivedCQC.hpp"
#include <fstream>
#include <string>
#include <sstream>
#include <coherence/util/Set.hpp>
#include <coherence/util/Iterator.hpp>
#include <sys/types.h>
#include <unistd.h>
#include <coherence/stl/boxing_map.hpp>
#include "EventPrinter.hpp"
using namespace coherence::lang;
using coherence::net::CacheFactory;
using coherence::net::NamedCache;
using coherence::net::ConcurrentMap;
using coherence::net::cache::ContinuousQueryCache;
using coherence::util::filter::AlwaysFilter;
using coherence::util::filter::EntryFilter;
using coherence::util::Set;
using coherence::util::Iterator;
using coherence::stl::boxing_map;
NamedCache::Handle hCache = DerivedCQC::create(CacheFactory::getCache("gce-Account"), AlwaysFilter::getInstance(), true);
int main(int argc, char** argv) {
std::cout << "size: " << hCache->size() << std::endl;
in above example you will see size is 0 for true case and size is equal to data size in the cache in false scenario.
But if you declare the cache as below you will get the expected results as the documentation.
int main(int argc, char** argv) {
NamedCache::Handle hCache = DerivedCQC::create(CacheFactory::getCache("gce-Account"), AlwaysFilter::getInstance(), true);
std::cout << "size: " << hCache->size() << std::endl;
Is this a bug or is this the expected behaviour. According to my understanding this is a bug?
Thanks and regards,
Sura -
Need to write SQL query for hierarchy
Hi Guys,
I need help to write a query for the below scenario.
I have one organization, under that I have many branches. when i provide input to query on last branch, i need to display all parents of that branch like below
Organization ---parent
branch 1 ---child
branch11
branch 12
branch 2 ---child
branch 21
branch 3 ----child
branch 31
branch 32
branch 33
here, when i provide input as branch 3, then I need to fetch results branch 2, branch 1 till organization.
can any one help me on this.
Thanks in advance!
Regards,
LKRHi,
Is this the same question as
https://community.oracle.com/thread/2616828
Please don't post the same question over and over. Mark this thread as "Answered" right away, and continue in the other thread (if necessary; the other thread has answers.) -
Query for functioning of Aggregate
Hello experts,
Could you please clarify me one fundamental question on the working of an aggregate.
I have a cube with the follwing information
CHAR1 CHAR2 CHAR3 KF 1
I have build an aggregate with
CHAR1 CHAR 2 KF1
I have my doubt here :
For example:
If I create a query with CHAR1 and CHAR2 in rows and KF1 in coloumns then the data is fetched from the Aggregate in stead of cube there by reducing the time. Is this correct?
OR
If I create a query is created with CHAR1 CHAR2 AND CHAR 3 in rows and KF1 in coloumns
then The data is read from the cube and noway the aggregate comes into picture.
Could you please clarify me how exactly the aggregate is working.Hi,
Goto RSRT transaction>Give report name>Execute+Debug>a pop up sceen will appear with multiple check boxes>select "Display aggregates found" option--> It will show all the aggregates those are hitting the query.
To propose aggregates follow the below procedure to improve the query performance:
First try to execute the query in RSRT on which u required to build aggregates. Check how much time it is taking to execute.....and whether it is required to build aggregate on this querry?? To get this information, Goto SE11> Give tabl name RSDDSTAT_DM in BI7.0 or RSDDSTAT in BW3.x.> Disply -> Contnts-> Give from date and to date values as today, user name as Ur user name, and give the query name
--> execute.
Now u'll get a list with fields like Object anme(Report anme), Time read, Infoprovider name(Multiprovider), Partprovider name (Cube), Aggregate name... etc. If the time read is less than 100,000,000 (100 sec) is acceptable. If the time read is more than 100 sec then it is recommended to create Aggregates for that query to increase performance. Keep in mind this time read.
Again goto RSRT> Give query name> Execute+Debug-->
A popup will come in that select the check box display aggregates found--> continue. If any aggregates or exist for that
query it will display first if u press on continue button, it will display from which cube which fields are coming it will display...try to copy this list of objects on which aggregate can be created into one text file...
then select that particular cube in RSA1>context>Maintain Aggregates-> Create by own> click on create aggregate button on top left side> Give discription of the aggregate>continue> take first object from list and fclick on find button in aggregates creation screen> give the object name and search... drag and drop that object into aggregate name right side (Drag and drop all the fields like this into aggregate).---->
Activate the aggregate--> it will take some time once the activation finishes --> make sure that aggregate is in switch on mode.
Try to xecute the query from RSRT again and find out the time read and compare this with first time read. If it is less tahn first time read then u can propose this aggregate to incraese the performance of the query.
I hope this will help u... go through the below links to know about aggregates more clear.
http://help.sap.com/saphelp_nw04s/helpdata/en/10/244538780fc80de10000009b38f842/frameset.htm
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/3f66ba90-0201-0010-ac8d-b61d8fd9abe9
Hope it helps you..
Regards,
Ramki.
Maybe you are looking for
-
Commons-logging error when starting Flex2 in JRun
Created new JRun Server and deployed Flex2 to this server. Receiving this error when starting up this server instance. Starting Macromedia JRun 4.0 (Build 92909), logicerm2 server 07/13 22:23:28 info JRun Naming Service listening on *:2911 07/13 22:2
-
Lumia 635 - Can't create FOLDERS from tiles on Sta...
I am unable to combine tiles to form folders of similar topics on my Start page. I followed the example shown in the little video posted in the user's manual, but it simply doesn't work as shown. Solved! Go to Solution.
-
Hide the services toolbar in transaction UDM_DISPUTE
Hi, We are in ECC 6.0. I am trying to hide the tool bar 'Services for Object' from the transaction UDM_DISPUTE. I found that we can use the BADI's GOS_SRV_REQUEST and GOS_SRV_SELECT. I implemented both of them and copied the class behind them. Since
-
Just got a new nano & the ITunes Music Store is not allowing me to create an account. I hit "create an account" then move to the "agreement" page. I click on Agree & then my computer tries to start up a windows program & then can't find it so it clos
-
Can somebody tell me if I can upgrade my Macbooks RAM with the following...
I wanted to upgrade my 1 GB RAM to a 4 GB RAM. Will these upgrades fit into my Macbook2, 1? It's a 13" one. This is the serial number W87245L1YA4 and here's a link to the hardware I'm looking at purchasing: http://www.tigerdirect.ca/applications/Sear