Password indirection for database adapter
Does the database adapter support the use of thge password indirection feature? I refer to the topic Creating an Indirect Password in the OC4J J2EE Security Guide, see http://download-east.oracle.com/docs/cd/B14099_15/web.1012/b14013/passman.htm#sthref746,
oc4j-ra.xml is not listed.
you will notice a JNDI name for this e.g. eis/DB/... this is used to look at the Application Server configuration. If it doesn't exist then it will use the credentials used as design time. Not good asthe connection will be fore development mainly.
you can safely remove the mcf setting from the wsdl so it will always force the AS connection. this is good practice.
To configure the AS configuration there is the oc4j-ra.xml file for the DB adapter. Or you can configure in Enterprise Manager
EM -> oc4j_soa (home if basic install) -> Administration -> JDBC Resources
configure a connection pool and data source
then create a JNDI name entry for the DB adapter
EM -> oc4j_soa (home if basic install) -> Applications -> Drop Down box select Adapter Resources -> DB Adapter
Use the examples. You will see that the connect string = jdbc/DBName
cheers
James
Similar Messages
-
Where is user name and password stored for database adapter
dear all,
does any body know where is the password stored in database adapters.
I noticed it mentioned in wsdl file in encrypted format, but is there any other place it stored.
a ) before deployment
b) aftre deployment .
Thanks in advance .
Regards
Arcyou will notice a JNDI name for this e.g. eis/DB/... this is used to look at the Application Server configuration. If it doesn't exist then it will use the credentials used as design time. Not good asthe connection will be fore development mainly.
you can safely remove the mcf setting from the wsdl so it will always force the AS connection. this is good practice.
To configure the AS configuration there is the oc4j-ra.xml file for the DB adapter. Or you can configure in Enterprise Manager
EM -> oc4j_soa (home if basic install) -> Administration -> JDBC Resources
configure a connection pool and data source
then create a JNDI name entry for the DB adapter
EM -> oc4j_soa (home if basic install) -> Applications -> Drop Down box select Adapter Resources -> DB Adapter
Use the examples. You will see that the connect string = jdbc/DBName
cheers
James -
What kind of database driver should use for database adapter in BPEL?
what kind of database driver (XA or non-XA) should use for database adapter in BPEL? I have only one database adapter and no JMS.
Thanks
Jo
Edited by: 799095 on Sep 30, 2010 8:35 AMHi
It depends on wheter you need XA transaction or not.
See http://www.theserverside.com/discussions/thread.tss?thread_id=21385 third reply.
If you only have one database and no synchronous dependency to the caller, non-XA should be OK.
-Johan -
Dynamic JNDI name for database adapter in BPEL
Hi All,
I am having some major issues trying to make the JNDI location for the database adapter dynamic (10.1.3.4). I already went through the followin link, but that didnt work for me: http://www.oracle.com/technology/pub/articles/bpel_cookbook/carey.html
The below example works, but only the first run. Second time around the first runs JNDI value gets retained and connects to that database.
This is what worked atleast the first time.
I parameterized the JNDI with a variable defined in the partnerlink definition in the bpel.xml
In Bpel. xml
<partnerLinkBinding name="updatetbl">
<property name="wsdlLocation">updatetbl.wsdl</property>
<property name="CONN">eis/DB/na</property>
<property name="retryInterval">60</property>
</partnerLinkBinding>
In the updatetbl.wsdl file
<service name="updatetbl">
<port name="updatetbl_pt" binding="tns:updatetbl_binding">
<jca:address location="$CONN"/>
</port>
</service>
At run time I change the partnerlink CONN variable in embedded Java.
try
Element targetAdapterElement =(Element)getVariableData("Invoke_getFromTbl_OutputVariable","getFromTblOutputCollection","/ns2:getFromTblOutputCollection/ns2:getFromTblOutput/ns2:SRC_JNDI");
getLocator().lookupProcess("JndiIssueTest").getDescriptor().getPartnerLinkBindings().getPartnerLinkBinding ("updatetbl").setPropertyValue ("CONN",targetAdapterElement.getTextContent());
("updatetbl").getPropertyValue ("CONN"));
catch(Exception ex)
addAuditTrailEntry("Error is " + ex);
This works fine the first time, but the second time I run it to look at a different CONN value, it somehow still connects using the first runs value!
If I redeploy or clear the WSDL cache, it works. But we plan to run it multiple times from several environment so manually or programatically clearing WSDL is not the right solution.
Can someone tell me what is the standard process of doing this so it works everytime?
Thanks,
ShafShaf,
Please refer the mail thread for details. If you want I can send you(send me your email id) the sample BPEL process which uses Dynamic JNDI.
Re: How to externalize JNDI name (setting JNDI name dynamically)
Thanks,
Sen -
Can I use polling frequency for Database Adapter
I need to use Database Adapter that acts like FileAdapter. Can I set polling frequency for my Database Adapter, so that the adapter can query every 5 secs?
You can use polling feature when you configure your DB adapter Operation Type as "Poll for New or Changed Records in Table"
If you use Adapter configuration wizard it will promot for "Pollling Options" and Polling Frequency is the option which you can configure in seconds, mins or hrs -
Re-using toplink code for database adapter
Hi,
I have a project in which multiple BPEL processes will be implemented. Some of them use database adapters to connect to various staging areas.
Is it possible to setup JDeveloper in such a way that I can create the toplink side for the database adapter in a separate project, and include it in the other BPel projects? It seems a waste of resources to recreate the whole toplink business each time I create a database adapter in a project to again the same schema.
Jeroen van VeldhuizenBecause:
1) it is not possible to deploy the same instance multiple times to run in parallel, connecting to different databases simultaneously to start up processes
2) an adapter that polls and a second adapter that writes to the same schema, are using the same datamodel and message model.
Why recreate the whole model over and over again?
Jeroen -
How to set polling interval for database adapter in interconnect?help plz!!
Hi
i have 4 database adapters with same name subscribing to same event in 4 different interconnect instances(i.e., same business event and application event in different hubs) and pointing to same source application database , same destination application database.
source application database have one oai bridge schema.When a message has to be sent,message will be enqueued in messageobjecttable.This message can be taken by 4 databse adapters.and send to 4hubs then 4 messages will be sent to destination application instead of single message.
To avoid this,I want to set database polling interval in 4 adapters sych a way that if one adapter take message in MESSAGEOBJECT TABLE,the other three adapters don't pick same message.
this way i can avoid redundacy at destination application.Please reply soon
ThanksYou would seem to have an extremely unusual use case for interconnect. The whole purpose of Interconnect is to concentrate the message processing into one hub and distribute the message to those applications interested in it. The use of 4 hubs from one application is probably not supported for precisely the reasons you are having trouble. Can you give us more details of your use case?
I am not sure that adjusting the polling interval for the different adapters will help. Since at some point you will get a collision where 2 or more adapters poll at the same time. -
It there a way to enable debugging to view SQL details for database adapter
The adapter guide seems to allude to the possibility with the following statement:
"To monitor performance, you can enable debug logging and then watch the SQL for various inputs."
There is no information, however, to indicate how to enable this feature. It would be nice to be able to view details in domain.log.
Thanks,
RMThe switch to tab feature is only available when you are typing in the Location (a.k.a. Awesome) bar. Clicking on a bookmark will always open the bookmarked page in either the current tab or a new tab.
-
Multiple stored procedure in Database Adapter
Can I manually create the wsdl for database adapter, which can have multiple operations for different stored procedures?
I tried creating a wsdl as -
<definitions
name="CustomAdapter"
targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/db/CustomAdapter/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/db/CustomAdapter/"
xmlns:db="http://xmlns.oracle.com/pcbpel/adapter/db/xsd/"
xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
xmlns:jca="http://xmlns.oracle.com/pcbpel/wsdl/jca/"
xmlns:hdr="http://xmlns.oracle.com/pcbpel/adapter/db/"
>
<import namespace="http://xmlns.oracle.com/pcbpel/adapter/db/" location="DBAdapterOutboundHeader.wsdl"/>
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://xmlns.oracle.com/pcbpel/adapter/db/xsd/"
schemaLocation="myadapter.xsd" />
</schema>
</types>
<message name="args_in_msg_tscp1">
<part name="InputParameters" element="db:InputParametersTSCP1"/>
</message>
<message name="args_in_msg_sample">
<part name="InputParameters" element="db:InputParametersSAMPLE"/>
</message>
<message name="args_out_msg_sample">
<part name="OutputParameters" element="db:OutputParametersSAMPLE"/>
</message>
<portType name="Proc1_ptt">
<operation name="Proc1">
<input message="tns:args_in_msg_tscp1"/>
</operation>
<operation name="Proc2">
<input message="tns:args_in_msg_sample"/>
<output message="tns:args_out_msg_sample"/>
</operation>
</portType>
<binding name="Proc1_binding" type="tns:Proc1_ptt">
<jca:binding />
<operation name="Proc1">
<jca:operation
InteractionSpec="oracle.tip.adapter.db.DBStoredProcedureInteractionSpec"
SchemaName="SYSTEM"
ProcedureName="TSCP1"
>
</jca:operation>
<input>
<jca:header message="hdr:OutboundHeader_msg" part="outboundHeader"/>
</input>
</operation>
<operation name="Proc2">
<jca:operation
InteractionSpec="oracle.tip.adapter.db.DBStoredProcedureInteractionSpec"
SchemaName="SYSTEM"
ProcedureName="MYSAMPLEPROC"
>
</jca:operation>
<input>
<jca:header message="hdr:OutboundHeader_msg" part="outboundHeader"/>
</input>
<output/>
</operation>
</binding>
<service name="Proc1">
<port name="Proc1_pt" binding="tns:Proc1_binding">
<!--Your runtime connection is declared in
J2EE_HOME/application-deployments/default/DbAdapter/oc4j-ra.xml
These mcf properties here are from your design time connection and
save you from having to edit that file and restart the application server
if eis/DB/System25 is missing.
These mcf properties are safe to remove.-->
<jca:address location="eis/DB/DBConn25" UIConnectionName="System25"
/>
</port>
</service>
<plt:partnerLinkType name="Proc1_plt" >
<plt:role name="Proc1_role" >
<plt:portType name="tns:Proc1_ptt" />
</plt:role>
</plt:partnerLinkType>
</definitions>
Then I copied this wsdl and corresponding xsd to my BPEL process and created a partnerlink for this wsdl.
I added two invoke activities, one for Proc1 operation and other for Proc2 operation.
When I tried testing this BPEL process, the BPEL process manager was invoking only Proc1 operation for both invoke activities and giving me error as-
<Faulthttp://schemas.oracle.com/bpel/extensionhttp://schemas.xmlsoap.org/soap/envelope/>
<faultcode>null:bindingFault</faultcode>
<faultstring>business exception</faultstring>
<faultactor>cx-fault-actor</faultactor>
<detail>
<code>1400</code>
<summary>file:/D:/Morrisons/OracleProducts/product/Oracle_SOA/bpel/domains/TestPOC/tmp/.bpel_MyAdapterTest_1.0_c564165702d743346cadb68bc5bbb594.tmp/CustomAdapter.wsdl [ Proc1_ptt::Proc1(InputParameters) ] - WSIF JCA Execute of operation 'Proc2' failed due to: Error while trying to prepare and execute an API. An error occurred while preparing and executing the SYSTEM.TSCP1 API. Cause: java.sql.SQLException: ORA-01400: cannot insert NULL into ("SYSTEM"."EMPS"."EMPID") ORA-06512: at "SYSTEM.TSCP1", line 4 ORA-06512: at line 1 [Caused by: ORA-01400: cannot insert NULL into ("SYSTEM"."EMPS"."EMPID") ORA-06512: at "SYSTEM.TSCP1", line 4 ORA-06512: at line 1 ] ; nested exception is: ORABPEL-11811 Error while trying to prepare and execute an API. An error occurred while preparing and executing the SYSTEM.TSCP1 API. Cause: java.sql.SQLException: ORA-01400: cannot insert NULL into ("SYSTEM"."EMPS"."EMPID") ORA-06512: at "SYSTEM.TSCP1", line 4 ORA-06512: at line 1 [Caused by: ORA-01400: cannot insert NULL into ("SYSTEM"."EMPS"."EMPID") ORA-06512: at "SYSTEM.TSCP1", line 4 ORA-06512: at line 1 ] Check to ensure that the API is defined in the database and that the parameters match the signature of the API. Contact oracle support if error is not fixable. </summary>
<detail> Internal Exception: java.sql.SQLException: ORA-01400: cannot insert NULL into ("SYSTEM"."EMPS"."EMPID") ORA-06512: at "SYSTEM.TSCP1", line 4 ORA-06512: at line 1 Error Code: 1400</detail>
</detail>
</Fault>
I want to create only one wsdl for all the strored procedures.Can I manually create the wsdl for database adapter, which can have multiple operations for different stored procedures?
I tried creating a wsdl as -
<definitions
name="CustomAdapter"
targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/db/CustomAdapter/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/db/CustomAdapter/"
xmlns:db="http://xmlns.oracle.com/pcbpel/adapter/db/xsd/"
xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
xmlns:jca="http://xmlns.oracle.com/pcbpel/wsdl/jca/"
xmlns:hdr="http://xmlns.oracle.com/pcbpel/adapter/db/"
>
<import namespace="http://xmlns.oracle.com/pcbpel/adapter/db/" location="DBAdapterOutboundHeader.wsdl"/>
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://xmlns.oracle.com/pcbpel/adapter/db/xsd/"
schemaLocation="myadapter.xsd" />
</schema>
</types>
<message name="args_in_msg_tscp1">
<part name="InputParameters" element="db:InputParametersTSCP1"/>
</message>
<message name="args_in_msg_sample">
<part name="InputParameters" element="db:InputParametersSAMPLE"/>
</message>
<message name="args_out_msg_sample">
<part name="OutputParameters" element="db:OutputParametersSAMPLE"/>
</message>
<portType name="Proc1_ptt">
<operation name="Proc1">
<input message="tns:args_in_msg_tscp1"/>
</operation>
<operation name="Proc2">
<input message="tns:args_in_msg_sample"/>
<output message="tns:args_out_msg_sample"/>
</operation>
</portType>
<binding name="Proc1_binding" type="tns:Proc1_ptt">
<jca:binding />
<operation name="Proc1">
<jca:operation
InteractionSpec="oracle.tip.adapter.db.DBStoredProcedureInteractionSpec"
SchemaName="SYSTEM"
ProcedureName="TSCP1"
>
</jca:operation>
<input>
<jca:header message="hdr:OutboundHeader_msg" part="outboundHeader"/>
</input>
</operation>
<operation name="Proc2">
<jca:operation
InteractionSpec="oracle.tip.adapter.db.DBStoredProcedureInteractionSpec"
SchemaName="SYSTEM"
ProcedureName="MYSAMPLEPROC"
>
</jca:operation>
<input>
<jca:header message="hdr:OutboundHeader_msg" part="outboundHeader"/>
</input>
<output/>
</operation>
</binding>
<service name="Proc1">
<port name="Proc1_pt" binding="tns:Proc1_binding">
<!--Your runtime connection is declared in
J2EE_HOME/application-deployments/default/DbAdapter/oc4j-ra.xml
These mcf properties here are from your design time connection and
save you from having to edit that file and restart the application server
if eis/DB/System25 is missing.
These mcf properties are safe to remove.-->
<jca:address location="eis/DB/DBConn25" UIConnectionName="System25"
/>
</port>
</service>
<plt:partnerLinkType name="Proc1_plt" >
<plt:role name="Proc1_role" >
<plt:portType name="tns:Proc1_ptt" />
</plt:role>
</plt:partnerLinkType>
</definitions>
Then I copied this wsdl and corresponding xsd to my BPEL process and created a partnerlink for this wsdl.
I added two invoke activities, one for Proc1 operation and other for Proc2 operation.
When I tried testing this BPEL process, the BPEL process manager was invoking only Proc1 operation for both invoke activities and giving me error as-
<Faulthttp://schemas.oracle.com/bpel/extensionhttp://schemas.xmlsoap.org/soap/envelope/>
<faultcode>null:bindingFault</faultcode>
<faultstring>business exception</faultstring>
<faultactor>cx-fault-actor</faultactor>
<detail>
<code>1400</code>
<summary>file:/D:/Morrisons/OracleProducts/product/Oracle_SOA/bpel/domains/TestPOC/tmp/.bpel_MyAdapterTest_1.0_c564165702d743346cadb68bc5bbb594.tmp/CustomAdapter.wsdl [ Proc1_ptt::Proc1(InputParameters) ] - WSIF JCA Execute of operation 'Proc2' failed due to: Error while trying to prepare and execute an API. An error occurred while preparing and executing the SYSTEM.TSCP1 API. Cause: java.sql.SQLException: ORA-01400: cannot insert NULL into ("SYSTEM"."EMPS"."EMPID") ORA-06512: at "SYSTEM.TSCP1", line 4 ORA-06512: at line 1 [Caused by: ORA-01400: cannot insert NULL into ("SYSTEM"."EMPS"."EMPID") ORA-06512: at "SYSTEM.TSCP1", line 4 ORA-06512: at line 1 ] ; nested exception is: ORABPEL-11811 Error while trying to prepare and execute an API. An error occurred while preparing and executing the SYSTEM.TSCP1 API. Cause: java.sql.SQLException: ORA-01400: cannot insert NULL into ("SYSTEM"."EMPS"."EMPID") ORA-06512: at "SYSTEM.TSCP1", line 4 ORA-06512: at line 1 [Caused by: ORA-01400: cannot insert NULL into ("SYSTEM"."EMPS"."EMPID") ORA-06512: at "SYSTEM.TSCP1", line 4 ORA-06512: at line 1 ] Check to ensure that the API is defined in the database and that the parameters match the signature of the API. Contact oracle support if error is not fixable. </summary>
<detail> Internal Exception: java.sql.SQLException: ORA-01400: cannot insert NULL into ("SYSTEM"."EMPS"."EMPID") ORA-06512: at "SYSTEM.TSCP1", line 4 ORA-06512: at line 1 Error Code: 1400</detail>
</detail>
</Fault>
I want to create only one wsdl for all the strored procedures. -
Database Adapter Wizard does not show accessible table
HI guys,
in the wizard I am unable to see the tables which I need to use for database adapter.
But I do have access to those tables, and able to select from them in SQL worksheet from with in Jdev.
I dont own the tables, but my user id have readable access to those tables.
Any help is appreciated.
P.S. If I didnt explain it properly, plz let me know. It really creates lot of access issues if I can only create DB adapter on My owned tables.
:)Hi there,
please see the answer to your duplicate post on the BPEL forum:
DB Adapter does not show selectable tables
In general BPEL forum gets a lot more traffic but I will try to address questions on both equally.
Thanks
Steve -
Password indirection using password-manager
Hi
I'm trying to set up password indirection for my connection to our data source.
The documentation states that you should add the <password-manager> element in the system-application.xml file.
However, the xsd doesn't allow this! It has the password-manager element defined, but not referenced from within the orion-application element.
Am I missing a trick here? Where is it meant to go?!?
Thanks
PaulPaul -- that wasn't required the last time I used our PW indirection.
http://download-west.oracle.com/docs/cd/B14099_19/web.1012/b14012/datasrc.htm#sthref533
The 10.1.3 doc looks quite similar:
http://download-west.oracle.com/docs/cd/B31017_01/web.1013/b28958/datasrc.htm#CHDJGJFE
As far as I recall, all you needed to do was to ensure the same username was entered as an OC4J JAAS username in the user manager that the application was using. And then in the data-source (or CP nowadays) definition, specify "->username" as the password field. The container would follow the link and work out what the password was.
Can you post the doc link you are reading this in here so I can have a look at what's written? It may be talking about the general jazn-user-manager applied to the application. Which you don't need to muck with to make this work in most cases.
cheers
-steve- -
OC4J data-source password indirection LDAP
Hi all,
I'm trying to set up password indirection for my OC4J data-sources. If I choose my user manager as JAZN XML UserManager then it works fine using encrypted passwords from the jazn-data.xml file. However using LDAP I cannot get it to work. I get an exception (pasted below) when the container starts up. Does anyone have experience with this?
Regards.
Anton.
Exception:
06/01/05 14:26:38 java.lang.UnsupportedOperationException
06/01/05 14:26:38 at oracle.security.jazn.oc4j.RealmUserAdaptor.getPassword(Unknown Source)
06/01/05 14:26:38 at oracle.security.jazn.oc4j.FilterUser.getPassword(Unknown Source)
06/01/05 14:26:38 at com.evermind.security.SecuritySensitive.lookup(SecuritySensitive.java:217)
06/01/05 14:26:38 at com.evermind.security.SecuritySensitive.decode(SecuritySensitive.java:114)
06/01/05 14:26:38 at com.evermind.security.SecuritySensitive.decode(SecuritySensitive.java:131)
06/01/05 14:26:38 at com.evermind.server.DataSourceConfig.getPassword(DataSourceConfig.java:530)
06/01/05 14:26:38 at com.evermind.server.Application.initDataSource(Application.java:1674)
06/01/05 14:26:38 at com.evermind.server.Application.initDataSources(Application.java:2077)
06/01/05 14:26:38 at com.evermind.server.Application.preInit(Application.java:517)
06/01/05 14:26:38 at com.evermind.server.Application.setConfig(Application.java:166)
06/01/05 14:26:38 at com.evermind.server.Application.setConfig(Application.java:145)
06/01/05 14:26:38 at com.evermind.server.ApplicationServer.initializeApplications(ApplicationServer.java:1756)Hi Toby,
Passsword indirection with jazn-ldap is not supported please review this link
Cheers,
Deepak -
Use of current time for polling Database Adapter query
I am writing a simple BPEL process with a Polling Database Adapter and a Recieve. The idea is that we are polling an XE database for any entries in a TRIP table which have an expiration date/time field that has passed.
The Adapter was build using JDeveloper 10.1.3.2 (with Oracle Application Server patched to 10.1.3.3.0) as a "Poll for New Changed Records in a Table" Operation type with a STATUS field (0 for live, 1 for expired) as the Logical Delete Field.
I was unable to find a way to generate a SELECT query expression with the wizard that would allow me to use current/system time as an attribute, so I finished the wizard and edited the Toplink Descriptor to use a custom SQL expression for the query. This resulted in the following code in the toplink_mappings.xml file:
<?xml version="1.0" encoding="UTF-8"?>
<toplink:object-persistence version="Oracle TopLink - 10g Release 3 (10.1.3.1.0) (Build 061004)"
xmlns:opm="http://xmlns.oracle.com/ias/xsds/opm" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:toplink="http://xmlns.oracle.com/ias/xsds/toplink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<opm:name>ExpiredTripPoller</opm:name>
<opm:class-mapping-descriptors>
<opm:class-mapping-descriptor xsi:type="toplink:relational-class-mapping-descriptor">
<opm:class>ExpiredTripPoller.Trip</opm:class>
<opm:alias>Trip</opm:alias>
<opm:primary-key>
<opm:field table="TRIP" name="ID" xsi:type="opm:column"/>
</opm:primary-key>
<opm:events xsi:type="toplink:event-policy"/>
<opm:querying xsi:type="toplink:query-policy">
<opm:queries>
<opm:query name="ExpiredTripPoller" xsi:type="toplink:read-all-query">
<toplink:timeout>0</toplink:timeout>
<toplink:call xsi:type="toplink:sql-call">
<toplink:sql>SELECT ID, LPN, START_TIME, EXPIRY_TIME, STATUS FROM TRIP WHERE ((STATUS = '0') AND (EXPIRY_TIME < SYSDATE)) ORDER BY EXPIRY_TIME ASC</toplink:sql>
</toplink:call>
<toplink:reference-class>ExpiredTripPoller.Trip</toplink:reference-class>
<toplink:cache-usage>primary-key</toplink:cache-usage>
<toplink:lock-mode>none</toplink:lock-mode>
<toplink:container xsi:type="toplink:list-container-policy">
<toplink:collection-type>java.util.Vector</toplink:collection-type>
</toplink:container>
</opm:query>
<opm:query name="findAllTrip" xsi:type="toplink:read-all-query">
<toplink:timeout>0</toplink:timeout>
<toplink:reference-class>ExpiredTripPoller.Trip</toplink:reference-class>
<toplink:cache-usage>primary-key</toplink:cache-usage>
<toplink:lock-mode>none</toplink:lock-mode>
<toplink:container xsi:type="toplink:list-container-policy">
<toplink:collection-type>java.util.Vector</toplink:collection-type>
</toplink:container>
</opm:query>
</opm:queries>
<toplink:does-exist-query xsi:type="toplink:does-exist-query">
<toplink:existence-check>check-database</toplink:existence-check>
</toplink:does-exist-query>
<toplink:read-all-query xsi:type="toplink:read-all-query">
<toplink:reference-class>ExpiredTripPoller.Trip</toplink:reference-class>
<toplink:container xsi:type="toplink:list-container-policy">
<toplink:collection-type>java.util.Vector</toplink:collection-type>
</toplink:container>
</toplink:read-all-query>
</opm:querying>
<opm:attribute-mappings>
<opm:attribute-mapping xsi:type="toplink:direct-mapping">
<opm:attribute-name>id</opm:attribute-name>
<opm:field table="TRIP" name="ID" xsi:type="opm:column"/>
<opm:attribute-classification>java.math.BigDecimal</opm:attribute-classification>
</opm:attribute-mapping>
<opm:attribute-mapping xsi:type="toplink:direct-mapping">
<opm:attribute-name>lpn</opm:attribute-name>
<opm:field table="TRIP" name="LPN" xsi:type="opm:column"/>
<opm:attribute-classification>java.lang.String</opm:attribute-classification>
</opm:attribute-mapping>
<opm:attribute-mapping xsi:type="toplink:direct-mapping">
<opm:attribute-name>startTime</opm:attribute-name>
<opm:field table="TRIP" name="START_TIME" xsi:type="opm:column"/>
<opm:attribute-classification>java.sql.Timestamp</opm:attribute-classification>
</opm:attribute-mapping>
<opm:attribute-mapping xsi:type="toplink:direct-mapping">
<opm:attribute-name>expiryTime</opm:attribute-name>
<opm:field table="TRIP" name="EXPIRY_TIME" xsi:type="opm:column"/>
<opm:attribute-classification>java.sql.Timestamp</opm:attribute-classification>
</opm:attribute-mapping>
<opm:attribute-mapping xsi:type="toplink:direct-mapping">
<opm:attribute-name>status</opm:attribute-name>
<opm:field table="TRIP" name="STATUS" xsi:type="opm:column"/>
<opm:attribute-classification>java.math.BigDecimal</opm:attribute-classification>
</opm:attribute-mapping>
</opm:attribute-mappings>
<toplink:descriptor-type>independent</toplink:descriptor-type>
<toplink:caching>
<toplink:cache-type>weak-reference</toplink:cache-type>
<toplink:always-refresh>true</toplink:always-refresh>
</toplink:caching>
<toplink:remote-caching>
<toplink:cache-type>weak-reference</toplink:cache-type>
</toplink:remote-caching>
<toplink:instantiation/>
<toplink:copying xsi:type="toplink:instantiation-copy-policy"/>
<toplink:change-policy xsi:type="toplink:deferred-detection-change-policy"/>
<toplink:tables>
<toplink:table name="TRIP"/>
</toplink:tables>
</opm:class-mapping-descriptor>
</opm:class-mapping-descriptors>
</toplink:object-persistence>
To test I used the above custom SQL at the command line and it filtered the records by EXPIRY_TIME as expected.
When deployed, the polling process updates the STATUS file dof table entries, but all entries with status 0 regardless of EXPIRY_DATE. My modification appears to be being ignored. I was unsure as to whether the QUERY was being determined in some other way so I modified the descriptor (with the toplink expression editor) to compare against a literal time value, producing the following modified toplink_mappings.xml:
<?xml version="1.0" encoding="UTF-8"?>
<toplink:object-persistence version="Oracle TopLink - 10g Release 3 (10.1.3.1.0) (Build 061004)"
xmlns:opm="http://xmlns.oracle.com/ias/xsds/opm" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:toplink="http://xmlns.oracle.com/ias/xsds/toplink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<opm:name>ExpiredTripPoller</opm:name>
<opm:class-mapping-descriptors>
<opm:class-mapping-descriptor xsi:type="toplink:relational-class-mapping-descriptor">
<opm:class>ExpiredTripPoller.Trip</opm:class>
<opm:alias>Trip</opm:alias>
<opm:primary-key>
<opm:field table="TRIP" name="ID" xsi:type="opm:column"/>
</opm:primary-key>
<opm:events xsi:type="toplink:event-policy"/>
<opm:querying xsi:type="toplink:query-policy">
<opm:queries>
<opm:query name="ExpiredTripPoller" xsi:type="toplink:read-all-query">
<opm:criteria operator="lessThan" xsi:type="toplink:relation-expression">
<toplink:left name="expiryTime" xsi:type="toplink:query-key-expression">
<toplink:base xsi:type="toplink:base-expression"/>
</toplink:left>
<toplink:right xsi:type="toplink:constant-expression">
<toplink:value xsi:type="xsd:date">2007-07-30</toplink:value>
</toplink:right>
</opm:criteria>
<toplink:timeout>0</toplink:timeout>
<toplink:reference-class>ExpiredTripPoller.Trip</toplink:reference-class>
<toplink:cache-usage>primary-key</toplink:cache-usage>
<toplink:lock-mode>none</toplink:lock-mode>
<toplink:container xsi:type="toplink:list-container-policy">
<toplink:collection-type>java.util.Vector</toplink:collection-type>
</toplink:container>
</opm:query>
<opm:query name="findAllTrip" xsi:type="toplink:read-all-query">
<toplink:timeout>0</toplink:timeout>
<toplink:reference-class>ExpiredTripPoller.Trip</toplink:reference-class>
<toplink:cache-usage>primary-key</toplink:cache-usage>
<toplink:lock-mode>none</toplink:lock-mode>
<toplink:container xsi:type="toplink:list-container-policy">
<toplink:collection-type>java.util.Vector</toplink:collection-type>
</toplink:container>
</opm:query>
</opm:queries>
<toplink:does-exist-query xsi:type="toplink:does-exist-query">
<toplink:existence-check>check-database</toplink:existence-check>
</toplink:does-exist-query>
<toplink:read-all-query xsi:type="toplink:read-all-query">
<toplink:reference-class>ExpiredTripPoller.Trip</toplink:reference-class>
<toplink:container xsi:type="toplink:list-container-policy">
<toplink:collection-type>java.util.Vector</toplink:collection-type>
</toplink:container>
</toplink:read-all-query>
</opm:querying>
<opm:attribute-mappings>
<opm:attribute-mapping xsi:type="toplink:direct-mapping">
<opm:attribute-name>id</opm:attribute-name>
<opm:field table="TRIP" name="ID" xsi:type="opm:column"/>
<opm:attribute-classification>java.math.BigDecimal</opm:attribute-classification>
</opm:attribute-mapping>
<opm:attribute-mapping xsi:type="toplink:direct-mapping">
<opm:attribute-name>lpn</opm:attribute-name>
<opm:field table="TRIP" name="LPN" xsi:type="opm:column"/>
<opm:attribute-classification>java.lang.String</opm:attribute-classification>
</opm:attribute-mapping>
<opm:attribute-mapping xsi:type="toplink:direct-mapping">
<opm:attribute-name>startTime</opm:attribute-name>
<opm:field table="TRIP" name="START_TIME" xsi:type="opm:column"/>
<opm:attribute-classification>java.sql.Timestamp</opm:attribute-classification>
</opm:attribute-mapping>
<opm:attribute-mapping xsi:type="toplink:direct-mapping">
<opm:attribute-name>expiryTime</opm:attribute-name>
<opm:field table="TRIP" name="EXPIRY_TIME" xsi:type="opm:column"/>
<opm:attribute-classification>java.sql.Timestamp</opm:attribute-classification>
</opm:attribute-mapping>
<opm:attribute-mapping xsi:type="toplink:direct-mapping">
<opm:attribute-name>status</opm:attribute-name>
<opm:field table="TRIP" name="STATUS" xsi:type="opm:column"/>
<opm:attribute-classification>java.math.BigDecimal</opm:attribute-classification>
</opm:attribute-mapping>
</opm:attribute-mappings>
<toplink:descriptor-type>independent</toplink:descriptor-type>
<toplink:caching>
<toplink:cache-type>weak-reference</toplink:cache-type>
<toplink:always-refresh>true</toplink:always-refresh>
</toplink:caching>
<toplink:remote-caching>
<toplink:cache-type>weak-reference</toplink:cache-type>
</toplink:remote-caching>
<toplink:instantiation/>
<toplink:copying xsi:type="toplink:instantiation-copy-policy"/>
<toplink:change-policy xsi:type="toplink:deferred-detection-change-policy"/>
<toplink:tables>
<toplink:table name="TRIP"/>
</toplink:tables>
</opm:class-mapping-descriptor>
</opm:class-mapping-descriptors>
</toplink:object-persistence>
On deployment, this version of the BPEL process behaved as expected - only modifying the records with EXPIRY_TIME less thatn the literal time specified. (Also, I can't really pass in the time as a parameter as this is a polling model).
Can anyone shed any light on what is happening or suggest how I might go about polling in the desired way?
CheersPlease take a look at this article which states SYSDATE is not supported in a
where clause.
http://www.oracle.com/technology/pub/articles/bpel_cookbook/qualcomm-bpel.html
Excerpt from the article:
Here are three important things you should do in implementing the above design:
Have the status of the record being processed stored in the database. The status includes the process state, next process attempt time, and processing attempt count.
Create an updatable view that exposes only records that are ready to be processed. A view is needed because the database adapter cannot handle a where clause that compares against SYSDATE.
Design logic that determines if a process instance that has faulted should be retried and when the retry should occur. This information will be updated in the database by use of a stored procedure. This can also be done with an update partner link and additional logic in BPEL.
mahalo,
a iii -
I want to know how to set the password encrytacion a database. Accdb from Visual Basic 2010 for a report. Rpl
You have to connect via ODBC, then use code along the lines of what is described here:
http://scn.sap.com/thread/3526924
by me on March 28 and Jan on March 29.
Also see KBA: 1686419 - SAP Crystal Reports designer does not recognize Access *.accdb file
- Ludek
Senior Support Engineer AGS Product Support, Global Support Center Canada
Follow us on Twitter -
Dynamic UserID/Password for file Adapter
Hi,
How to use dynamic UserId/Password for file adapter ?
(Sender/Receiver)
In our case the Id/Pwd of FTP Site changes freguently.
Can anyone help.
Thanks in Advance
Regards
ChemmanzHi Chemmanz,
>>>>In our case the Id/Pwd of FTP Site changes freguently.
but do you have those passwords in the message payload?
if not then you will still have to fill it somewhere right?
BTW
the only way would be to use java proxies and write a simple ftp adapter inside it (or your own adapter)
but this is not possible in standard I believe
Regards,
michal
Maybe you are looking for
-
A New Year, a New Challenge! Become the FIRST SSIS Guru of 2015!
Happy New Year! "Guru 2014" is so 'last year'! The real glory is to be the first Guru of 2015! :D The birth of a new year, and a new hero? Or the stamp of authority from long established Guru leaders? The challenge is on, all eyes are watching, anyon
-
Getting text to wrap in a form field
How do I get text to wrap in a form field instead of shrinking in size as I type?
-
Error when i fetch the external table in oracle 9i ?
External table is created. But, when i select the external table , it is thrwing the following error. I have given READ and WRITE permission to the oracle directory. And, i having the flat file with comma delimited data. SQL> create table mohan_ext (
-
I have tried putting music onto it, and it puts it on the playlist, but when I disconnect, it isn't there. I have also tried creating a new user, and still get the error. Please Help!!! Thanx!
-
Unable to send messages from IS to AE.
Hi, I am getting 401 Unauthorized error in "Call Adapter" of the IS pipeline its a simple FIle-to-File scenario. I did search on the SDN but unable to find a answer. The user "PIISUSER" is not locked, I checked in SU01 transaction. The J2EE port m