We have discussed in another post some possibilities to create a scheduler in SOA Suite. They are all very complicated.
A cheap and dirty way to trigger a BPEL process at regular intervals is creating a TRIGGERME table with a field STATUS, and using a DBAdapter in the Exposed Services lane with a "Poll for new or updated rows" option, and using the same value for UNREAD and READ value in the STATUS field.
You can set the frequency of the polling to anything you want.
This pattern is valid only for regular scheduling with no control on the starting time, so it's really a raw scheduler.
Saturday, January 29, 2011
Friday, January 28, 2011
oracle.fabric.common.FabricDeploymentException: Unable to register service. {rootCauses=[]}
You get this message when trying to deploy a composite to the SOAServer, and there is no way to get more info from the log...
If you go up in the stdout, you finally find the reason:
28-Jan-2011 12:17:27 o'clock WET Error oracle.integration.platform SOA-20003 Unable to register service.
oracle.webservices.provider.ProviderException: oracle.webservices.provider.ProviderException: No service {http://instantlink.inwi.com}BookCallbackService_2 defined in the WSDL
at oracle.j2ee.ws.server.provider.ProviderConfigImpl.addService(Provider
In fact the service name in the WSDL is BookCallbackService, and the _2 has been added by JDeveloper unbeknown to me. I had this problem countless times, and I really believe this can be handled better.
This is what you find in the log files:
Caused By: oracle.fabric.common.FabricDeploymentException: Unable to register service. {rootCauses=[]}
at oracle.integration.platform.blocks.soap.WebServiceEntryBindingComponent.load(WebServiceEntryBindingComponent.java:227)
at oracle.integration.platform.blocks.soap.WebServiceEntryBindingComponent.load(WebServiceEntryBindingComponent.java:98)
at oracle.integration.platform.blocks.deploy.CompositeDeploymentConnection.deployServices(CompositeDeploymentConnection.java:160)
at oracle.integration.platform.blocks.deploy.CompositeDeploymentConnection.deploy(CompositeDeploymentConnection.java:91)
at oracle.integration.platform.blocks.deploy.CompositeDeploymentManagerImpl.initDeployment(CompositeDeploymentManagerImpl.java:149)
at oracle.integration.platform.blocks.deploy.CompositeDeploymentManagerImpl.load(CompositeDeploymentManagerImpl.java:62)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
If you go up in the stdout, you finally find the reason:
28-Jan-2011 12:17:27 o'clock WET Error oracle.integration.platform SOA-20003 Unable to register service.
oracle.webservices.provider.ProviderException: oracle.webservices.provider.ProviderException: No service {http://instantlink.inwi.com}BookCallbackService_2 defined in the WSDL
at oracle.j2ee.ws.server.provider.ProviderConfigImpl.addService(Provider
In fact the service name in the WSDL is BookCallbackService, and the _2 has been added by JDeveloper unbeknown to me. I had this problem countless times, and I really believe this can be handled better.
This is what you find in the log files:
Caused By: oracle.fabric.common.FabricDeploymentException: Unable to register service. {rootCauses=[]}
at oracle.integration.platform.blocks.soap.WebServiceEntryBindingComponent.load(WebServiceEntryBindingComponent.java:227)
at oracle.integration.platform.blocks.soap.WebServiceEntryBindingComponent.load(WebServiceEntryBindingComponent.java:98)
at oracle.integration.platform.blocks.deploy.CompositeDeploymentConnection.deployServices(CompositeDeploymentConnection.java:160)
at oracle.integration.platform.blocks.deploy.CompositeDeploymentConnection.deploy(CompositeDeploymentConnection.java:91)
at oracle.integration.platform.blocks.deploy.CompositeDeploymentManagerImpl.initDeployment(CompositeDeploymentManagerImpl.java:149)
at oracle.integration.platform.blocks.deploy.CompositeDeploymentManagerImpl.load(CompositeDeploymentManagerImpl.java:62)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Labels:
SOASuite
Thursday, January 27, 2011
Web Service Service in a SOA Composite with SOA Suite
Interestingly, you must call the exposed service the same way you call the service in the WSLD - the published service name will match the name you give to the component, and should match the service name in the WSDL.
I have discovered that if you change the name later, Jdeveloper doesn't adjust the "binding.ws port" clause in the service definition inside the composite.xml. You must fix it manually otherwise you will never be able to deploy your composite (you can build the SAR file but not deploy.... :o( )
I have discovered that if you change the name later, Jdeveloper doesn't adjust the "binding.ws port" clause in the service definition inside the composite.xml. You must fix it manually otherwise you will never be able to deploy your composite (you can build the SAR file but not deploy.... :o( )
Labels:
SOASuite
weblogic.security.SecurityInitializationException: Authentication denied: Boot identity not valid
in reality, not necessarily the username/passowrd in the boot.properties are wrong..... it could either be that the MS cannot connect to the Admin to verify the identity, or that the MS own LDAP files are corrupted or obsolete. Removing the LDAP files of the MS can help.
this is the complete message:
<Jan 27, 2011 10:30:03 AM GMT> <Critical> <WebLogicServer> <BEA-000386> <Server subsystem failed. Reason: weblogic.security.SecurityInitializationException: Authentication denied: Boot identity not valid; The user name and/or password from the boot identity file (boot.properties) is not valid. The boot identity may have been changed since the boot identity file was created. Please edit and update the boot identity file with the proper values of username and password. The first time the updated boot identity file is used to start the server, these new values are encrypted.
weblogic.security.SecurityInitializationException: Authentication denied: Boot identity not valid; The user name and/or password from the boot identity file (boot.properties) is not valid. The boot identity may have been changed since the boot identity file was created. Please edit and update the boot identity file with the proper values of username and password. The first time the updated boot identity file is used to start the server, these new values are encrypted.
at weblogic.security.service.CommonSecurityServiceManagerDelegateImpl.doBootAuthorization(CommonSecurityServiceManagerDelegateImpl.java:959)
at weblogic.security.service.CommonSecurityServiceManagerDelegateImpl.initialize(CommonSecurityServiceManagerDelegateImpl.java:1050)
at weblogic.security.service.SecurityServiceManager.initialize(SecurityServiceManager.java:873)
at weblogic.security.SecurityService.start(SecurityService.java:141)
at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64)
Truncated. see log file for complete stacktrace
Caused By: javax.security.auth.login.FailedLoginException: [Security:090303]Authentication Failed: User weblogic weblogic.security.providers.authentication.LDAPAtnDelegateException: [Security:090295]caught unexpected exception
at weblogic.security.providers.authentication.LDAPAtnLoginModuleImpl.login(LDAPAtnLoginModuleImpl.java:251)
at com.bea.common.security.internal.service.LoginModuleWrapper$1.run(LoginModuleWrapper.java:110)
at java.security.AccessController.doPrivileged(AccessController.java:251)
at com.bea.common.security.internal.service.LoginModuleWrapper.login(LoginModuleWrapper.java:106)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Truncated. see log file for complete stacktrace
>
<Jan 27, 2011 10:30:03 AM GMT> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to FAILED>
<Jan 27, 2011 10:30:03 AM GMT> <Error> <WebLogicServer> <BEA-000383> <A critical service failed. The server will shut itself down>
As found elsewhere, the recipe is:
Follow the following steps:
1: remove the boot.properties file completely from the managed server directory.
2: remove the ManagedServerDir/data/ldap directory completely.
3: Always keep backup of files before removing it.
4: Now try to start the server from the command prompt and provide the username/password used to login to the Admin Console.
Remember also - if you use nodemanager - to change the encrypted password in ./servers/myserver/data/nodemanager/boot.properties
this is the complete message:
<Jan 27, 2011 10:30:03 AM GMT> <Critical> <WebLogicServer> <BEA-000386> <Server subsystem failed. Reason: weblogic.security.SecurityInitializationException: Authentication denied: Boot identity not valid; The user name and/or password from the boot identity file (boot.properties) is not valid. The boot identity may have been changed since the boot identity file was created. Please edit and update the boot identity file with the proper values of username and password. The first time the updated boot identity file is used to start the server, these new values are encrypted.
weblogic.security.SecurityInitializationException: Authentication denied: Boot identity not valid; The user name and/or password from the boot identity file (boot.properties) is not valid. The boot identity may have been changed since the boot identity file was created. Please edit and update the boot identity file with the proper values of username and password. The first time the updated boot identity file is used to start the server, these new values are encrypted.
at weblogic.security.service.CommonSecurityServiceManagerDelegateImpl.doBootAuthorization(CommonSecurityServiceManagerDelegateImpl.java:959)
at weblogic.security.service.CommonSecurityServiceManagerDelegateImpl.initialize(CommonSecurityServiceManagerDelegateImpl.java:1050)
at weblogic.security.service.SecurityServiceManager.initialize(SecurityServiceManager.java:873)
at weblogic.security.SecurityService.start(SecurityService.java:141)
at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64)
Truncated. see log file for complete stacktrace
Caused By: javax.security.auth.login.FailedLoginException: [Security:090303]Authentication Failed: User weblogic weblogic.security.providers.authentication.LDAPAtnDelegateException: [Security:090295]caught unexpected exception
at weblogic.security.providers.authentication.LDAPAtnLoginModuleImpl.login(LDAPAtnLoginModuleImpl.java:251)
at com.bea.common.security.internal.service.LoginModuleWrapper$1.run(LoginModuleWrapper.java:110)
at java.security.AccessController.doPrivileged(AccessController.java:251)
at com.bea.common.security.internal.service.LoginModuleWrapper.login(LoginModuleWrapper.java:106)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Truncated. see log file for complete stacktrace
>
<Jan 27, 2011 10:30:03 AM GMT> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to FAILED>
<Jan 27, 2011 10:30:03 AM GMT> <Error> <WebLogicServer> <BEA-000383> <A critical service failed. The server will shut itself down>
As found elsewhere, the recipe is:
Follow the following steps:
1: remove the boot.properties file completely from the managed server directory.
2: remove the ManagedServerDir/data/ldap directory completely.
3: Always keep backup of files before removing it.
4: Now try to start the server from the command prompt and provide the username/password used to login to the Admin Console.
Remember also - if you use nodemanager - to change the encrypted password in ./servers/myserver/data/nodemanager/boot.properties
Labels:
boot.properties
XSL transformation: source parts or variables are either simple type or complex type, thus cannot be used to create mapper file
some hint on this here
I was trying to use a variable
variable name="currentLine" type="ns1:Preactivation"
with ns1:Preactivation defined in a XSD. This is not accepted (don't ask me why,
SOA has reasons that the reason itself doesn't have).
If you change a WSDL and add an element of that type:
xs:element name="Preactivation" type="Preactivation"
and you declare the variable as of "element" type:
variable name="currentLine" element="ns1:Preactivation"
then the XSL mapping is happy to accept it.
WARNING: if you change the File Adapter that generated that WSDL, your element will be gone....
I was trying to use a variable
variable name="currentLine" type="ns1:Preactivation"
with ns1:Preactivation defined in a XSD. This is not accepted (don't ask me why,
SOA has reasons that the reason itself doesn't have).
If you change a WSDL and add an element of that type:
xs:element name="Preactivation" type="Preactivation"
and you declare the variable as of "element" type:
variable name="currentLine" element="ns1:Preactivation"
then the XSL mapping is happy to accept it.
WARNING: if you change the File Adapter that generated that WSDL, your element will be gone....
XML allergy
My frustration towards anything which is built on XML is growing to incommensurable height.
I could appreciate in the last few years an immense loss in productivity and maintainability in any project who - in one way or the other - has ended up using XML for its internal representation of data, rules, logic, dependencies etc.
Loose coupling means, basically, no control on your data; you lose the capacity to refactor your code; if you change anything you end up having to recode everything from scratch. Everything you do becomes throwaway code, there is no way to reuse, refactor, recycle, encapsulate.
We have been struggling for 2 months to accomplish something that, in pure Java, would have taken not more than 2 days. Using SOAP, XPaths and all the bloody associated technologies, we are not able to put together anything which can even vaguely match our client requirements. If you do something very basic, fine; as soon as you deviate a little from standard patterns, the complexity and difficulty grows exponentially.
XML reminds me of Superciuk, Alan Ford's anti-hero, running on Barbera wine and putting his enemies out of combat with his super-alcoholic breath. Let XML enter your organization, and you will be soon crawling on your knees.
I could appreciate in the last few years an immense loss in productivity and maintainability in any project who - in one way or the other - has ended up using XML for its internal representation of data, rules, logic, dependencies etc.
Loose coupling means, basically, no control on your data; you lose the capacity to refactor your code; if you change anything you end up having to recode everything from scratch. Everything you do becomes throwaway code, there is no way to reuse, refactor, recycle, encapsulate.
We have been struggling for 2 months to accomplish something that, in pure Java, would have taken not more than 2 days. Using SOAP, XPaths and all the bloody associated technologies, we are not able to put together anything which can even vaguely match our client requirements. If you do something very basic, fine; as soon as you deviate a little from standard patterns, the complexity and difficulty grows exponentially.
XML reminds me of Superciuk, Alan Ford's anti-hero, running on Barbera wine and putting his enemies out of combat with his super-alcoholic breath. Let XML enter your organization, and you will be soon crawling on your knees.
Labels:
xmlsucks
Wednesday, January 26, 2011
SOA Suite enable xsl automapping
It is DEFINITELY a good idea to do it:
Tools/Preferences/XLS Maps/Auto Map/Enable auto map
For some funny reason it's not enabled by default...
Tools/Preferences/XLS Maps/Auto Map/Enable auto map
For some funny reason it's not enabled by default...
Labels:
SOASuite
Failed to execute countNodes() function : oracle.xml.parser.v2.XMLNodeList cannot be cast to java.lang.String.
An error occurs while processing the XPath expression; the expression is ora:countNodes($inputVariable.payload/ns1:BookLot).
The XPath expression failed to execute; the reason was: Failed to execute countNodes() function : oracle.xml.parser.v2.XMLNodeList cannot be cast to java.lang.String.
the BPEL was:
copy
from ora:countNodes($inputVariable.payload/ns1:BookLot) /from
to $countLots /to
/copy
this http://forums.oracle.com/forums/thread.jspa?threadID=632140 tells me that the instructions should have been rather of this type:
ora:countNodes('Receive_Data_receive_InputVariable','EmpCollection','/ns2:EmpCollection/ns2:Emp')
ora:countNodes documentation:
This function returns size of elements as an integer.The signature of this function is ora:countNodes(variableName, partName?, locationPath?). The arguments are: 1) variableName - the source variable for the data, 2) partName - the part to select from the variable (optional), 3)locationPath - provides an absolute location path (with / meaning the root of the document fragment representing the entire part) to identify the root of a subtree within the document fragment representing the part (optional).
If I use
ora:countNodes('inputVariable', 'payload', '/ns1:BookLot')
I get always 0 in the result.
So I use count($inputVariable.payload/ns1:BookLot)
and I still get 0.
AFTER I put a Mediator between the File Adapter and the BPEL process, the result of count() is correct. Apparently there was some namespace mismatch if I go directly from FileAdapter to BPEL.
The XPath expression failed to execute; the reason was: Failed to execute countNodes() function : oracle.xml.parser.v2.XMLNodeList cannot be cast to java.lang.String.
the BPEL was:
copy
from ora:countNodes($inputVariable.payload/ns1:BookLot) /from
to $countLots /to
/copy
this http://forums.oracle.com/forums/thread.jspa?threadID=632140 tells me that the instructions should have been rather of this type:
ora:countNodes('Receive_Data_receive_InputVariable','EmpCollection','/ns2:EmpCollection/ns2:Emp')
ora:countNodes documentation:
This function returns size of elements as an integer.The signature of this function is ora:countNodes(variableName, partName?, locationPath?). The arguments are: 1) variableName - the source variable for the data, 2) partName - the part to select from the variable (optional), 3)locationPath - provides an absolute location path (with / meaning the root of the document fragment representing the entire part) to identify the root of a subtree within the document fragment representing the part (optional).
If I use
ora:countNodes('inputVariable', 'payload', '/ns1:BookLot')
I get always 0 in the result.
So I use count($inputVariable.payload/ns1:BookLot)
and I still get 0.
AFTER I put a Mediator between the File Adapter and the BPEL process, the result of count() is correct. Apparently there was some namespace mismatch if I go directly from FileAdapter to BPEL.
Labels:
BPEL,
countNodes
Adding a new Source to the BPEL XSL Transformation in SOA Suite doesn't reflect in the oracle-xsl-mapper mapSources
you must delete from XSL and recreate it from scratch.
:o(
:o(
select count from multiple table
Select
(Select Count(*) From table1),
(Select Count(*) From table2)
from dual;
it works!
(Select Count(*) From table1),
(Select Count(*) From table2)
from dual;
it works!
Labels:
sql
Tuesday, January 25, 2011
Its increment does not match its pre-allocation size
25-Jan-2011 19:17:44 o'clock WET Error oracle.soa.bpel.engine.dispatch BEA-000000 failed to handle message
com.oracle.bpel.client.BPELFault: faultName: {{http://schemas.oracle.com/bpel/extension}bindingFault}
messageType: {{http://schemas.oracle.com/bpel/extension}RuntimeFaultMessage}
parts: {{summary= summary Exception occured when binding was invoked.
Exception occured during invocation of JCA binding: "JCA Binding execute of Reference operation 'insert' failed due to: DBWriteInteractionSpec Execute Failed Exception.
insert failed. Descriptor name: [BOOK_LOT.BOOKLot].
Caused by Exception [EclipseLink-7027] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.ValidationException
Exception Description: The sequence named [BOOK_LOT_SEQUENCE] is setup incorrectly. Its increment does not match its pre-allocation size..
Please see the logs for the full DBAdapter logging output prior to this exception. This exception is considered not retriable, likely due to a modelling mistake.
".
The invoked JCA adapter raised a resource exception.
Please examine the above error message carefully to determine a resolution.
/summary
,detail= detail
Exception Description: The sequence named [BOOK_LOT_SEQUENCE] is setup incorrectly. Its increment does not match its pre-allocation size. /detail ,code= code null /code }
the or-mapping file specifies:
here
http://wiki.eclipse.org/Introduction_to_Relational_Projects_%28ELUG%29#Sequencing_and_Preallocation_Size
some more (useless) info on the OR-MAPPING file.
after hours of googling, I found out the solution:
http://forums.oracle.com/forums/thread.jspa?threadID=1006099&tstart=0
you must change the DBAdapter properties in WebLogic deployments console, make the preallocationSize same as the one used for the sequence (Increment By field):
Create Sequence Book_Lot_Sequence Start With 1 Increment By 1 Nominvalue Nomaxvalue Nocycle Nocache;
http://forums.oracle.com/forums/thread.jspa?threadID=1006099&tstart=0
com.oracle.bpel.client.BPELFault: faultName: {{http://schemas.oracle.com/bpel/extension}bindingFault}
messageType: {{http://schemas.oracle.com/bpel/extension}RuntimeFaultMessage}
parts: {{summary= summary Exception occured when binding was invoked.
Exception occured during invocation of JCA binding: "JCA Binding execute of Reference operation 'insert' failed due to: DBWriteInteractionSpec Execute Failed Exception.
insert failed. Descriptor name: [BOOK_LOT.BOOKLot].
Caused by Exception [EclipseLink-7027] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.ValidationException
Exception Description: The sequence named [BOOK_LOT_SEQUENCE] is setup incorrectly. Its increment does not match its pre-allocation size..
Please see the logs for the full DBAdapter logging output prior to this exception. This exception is considered not retriable, likely due to a modelling mistake.
".
The invoked JCA adapter raised a resource exception.
Please examine the above error message carefully to determine a resolution.
/summary
,detail= detail
Exception Description: The sequence named [BOOK_LOT_SEQUENCE] is setup incorrectly. Its increment does not match its pre-allocation size. /detail ,code= code null /code }
the or-mapping file specifies:
sequencing sequence-name BOOK_LOT_SEQUENCE /sequence-name sequence-field table="BOOK_LOT" name="ID_BOOK_LOT"/ /sequencing
here
http://wiki.eclipse.org/Introduction_to_Relational_Projects_%28ELUG%29#Sequencing_and_Preallocation_Size
some more (useless) info on the OR-MAPPING file.
after hours of googling, I found out the solution:
http://forums.oracle.com/forums/thread.jspa?threadID=1006099&tstart=0
you must change the DBAdapter properties in WebLogic deployments console, make the preallocationSize same as the one used for the sequence (Increment By field):
Create Sequence Book_Lot_Sequence Start With 1 Increment By 1 Nominvalue Nomaxvalue Nocycle Nocache;
http://forums.oracle.com/forums/thread.jspa?threadID=1006099&tstart=0
Labels:
DBAdapter
com.oracle.bpel.client.BPELFault selectionFailure
the entire error message was:
25-Jan-2011 18:54:26 o'clock WET Error oracle.soa.bpel.engine.xml BEA-000000
com.oracle.bpel.client.BPELFault: faultName: {{http://schemas.xmlsoap.org/ws/200
3/03/business-process/}selectionFailure}
messageType: {{http://schemas.oracle.com/bpel/extension}RuntimeFaultMessage}
at com.collaxa.cube.engine.ext.bpel.common.BPELWMPHelper.evalFromValue(BPELWMPHelper.java:368)
at com.collaxa.cube.engine.ext.bpel.v1.wmp.BPEL1AssignWMP.__executeStatements(BPEL1AssignWMP.java:137)
at com.collaxa.cube.engine.ext.bpel.common.wmp.BaseBPELActivityWMP.perform(BaseBPELActivityWMP.java:158)
going in the BPEL Instance flow trace, the actual error is traced:
Error in evaluate from expression at line "151". The result contains 5 nodes for the XPath expression : "/ns7:Root-Element/ns7:Books/ns7:BOOK_NO".
basically I had to specify an index in the XPath to return only 1 element....
If you don't provide a fault handler, the actual cause is not logged in the logs...
25-Jan-2011 18:54:26 o'clock WET Error oracle.soa.bpel.engine.xml BEA-000000
com.oracle.bpel.client.BPELFault: faultName: {{http://schemas.xmlsoap.org/ws/200
3/03/business-process/}selectionFailure}
messageType: {{http://schemas.oracle.com/bpel/extension}RuntimeFaultMessage}
at com.collaxa.cube.engine.ext.bpel.common.BPELWMPHelper.evalFromValue(BPELWMPHelper.java:368)
at com.collaxa.cube.engine.ext.bpel.v1.wmp.BPEL1AssignWMP.__executeStatements(BPEL1AssignWMP.java:137)
at com.collaxa.cube.engine.ext.bpel.common.wmp.BaseBPELActivityWMP.perform(BaseBPELActivityWMP.java:158)
going in the BPEL Instance flow trace, the actual error is traced:
Error in evaluate from expression at line "151". The result contains 5 nodes for the XPath expression : "/ns7:Root-Element/ns7:Books/ns7:BOOK_NO".
basically I had to specify an index in the XPath to return only 1 element....
If you don't provide a fault handler, the actual cause is not logged in the logs...
Labels:
BPEL
OSB Stubs implementing asynchronous callback
I needed to implement a stub acting as follows:
1) request-reply (the reply sends back an ACK)
2) asynchronous callback 10 seconds later to send the response to the request made in point 1
Of course there are zillion of solutions... Citrus Framework, Asynchronous BPEL, a WS with a separate thread to process the callback, a JMS queue...
I decided the - for me - simplest solution: in the main PS, publish to a Callback PS which does a Java Callout to a Thread.sleep(10000), then routes the callback.
Publish is a non blocking operation (in most circumstances, unless you do HTTP with a QoS "exactly once").
It works like a charm. I don't know how OSB implements this non-blocking operation internally, nor which impact a Thread.sleep() has on the bus.... time will tell.... anyway it doesn't go to production, so it doesn't have to be a robust solution.
1) request-reply (the reply sends back an ACK)
2) asynchronous callback 10 seconds later to send the response to the request made in point 1
Of course there are zillion of solutions... Citrus Framework, Asynchronous BPEL, a WS with a separate thread to process the callback, a JMS queue...
I decided the - for me - simplest solution: in the main PS, publish to a Callback PS which does a Java Callout to a Thread.sleep(10000), then routes the callback.
Publish is a non blocking operation (in most circumstances, unless you do HTTP with a QoS "exactly once").
It works like a charm. I don't know how OSB implements this non-blocking operation internally, nor which impact a Thread.sleep() has on the bus.... time will tell.... anyway it doesn't go to production, so it doesn't have to be a robust solution.
Labels:
stub
Sunday, January 23, 2011
the version of incoming SOAP message does not match the one returned from provider: FabricProvider
The fault code value says "env:VersionMismatch"
The entire stacktrace is:
Error oracle.webservices.service OWS-04086 oracle.j2ee.ws.common.WebServiceException: the version of incoming SOAP message does not match the one returned from provider: FabricProvider
at oracle.j2ee.ws.server.provider.ProviderProcessor.doRequestProcessing(ProviderProcessor.java:602)
at oracle.j2ee.ws.server.WebServiceProcessor.processRequest(WebServiceProcessor.java:232)
at oracle.j2ee.ws.server.WebServiceProcessor.doService(WebServiceProcessor.java:192)
at oracle.j2ee.ws.server.WebServiceServlet.doPost(WebServiceServlet.java:459)
at oracle.integration.platform.blocks.soap.FabricProviderServlet.doPost(FabricProviderServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
http://download.oracle.com/docs/cd/E12839_01/core.1111/e10113/chapter_ows_messages.htm
OWS-04086: {0}
Cause: An unexpected error occured
Action: None
Level: 1
Type: ERROR
Impact: Configuration
I have literally NO CLUE. Probably I am passing a SOAP 1.2 to SOA Suite, and it returns me a SOAP 1.1. I will figure this out...
Here http://www.w3.org/TR/soap12-part1/ it says:
If a SOAP node receives a message whose version is not supported it MUST generate a fault (see 5.4 SOAP Fault) with a Value of Code set to "env:VersionMismatch".
Also here http://www.w3.org/TR/soap12-part1/#version it says:
A SOAP/1.1 node receiving a SOAP Version 1.2 message will according to SOAP/1.1 generate a version mismatch SOAP fault based on a SOAP/1.1 message construct.
The oracle.j2ee.ws.server.provider.ProviderProcessor class is in C:\Oracle1\Middleware\oracle_common\modules\oracle.webservices_11.1.1\wsserver.jar
Unfortunately, by looking at the code of this class, there is no way to set a debug flag to trace the message returned.
SOAP1.1 uses http://schemas.xmlsoap.org/soap/envelope/
SOAP1.2 uses http://www.w3.org/2003/05/soap-envelope
If I change the NS of my message to http://schemas.xmlsoap.org/soap/envelope/
I get:
oracle.fabric.common.FabricException: oracle.j2ee.ws.saaj.soap.SOAPVersionMismatchException: Mime Header Content-Type: application/soap+xml requires SOAP envelope namespace: http://www.w3.org/2003/05/soap-envelope: Mime Header Content-Type: application/soap+xml requires SOAP envelope namespace: http://www.w3.org/2003/05/soap-envelope
which makes sense since the WSDL is a SOAP 1.2 and hence the WebService uses 1.2 headers - which are not compatible with 1.1
We have a real issue here for support of SOAP 1.2 services in SOA Suite- evidently come internal component is only SOAP 1.1 compliant and doesn't recognize SOAP 1.2 messages.
The entire stacktrace is:
Error oracle.webservices.service OWS-04086 oracle.j2ee.ws.common.WebServiceException: the version of incoming SOAP message does not match the one returned from provider: FabricProvider
at oracle.j2ee.ws.server.provider.ProviderProcessor.doRequestProcessing(ProviderProcessor.java:602)
at oracle.j2ee.ws.server.WebServiceProcessor.processRequest(WebServiceProcessor.java:232)
at oracle.j2ee.ws.server.WebServiceProcessor.doService(WebServiceProcessor.java:192)
at oracle.j2ee.ws.server.WebServiceServlet.doPost(WebServiceServlet.java:459)
at oracle.integration.platform.blocks.soap.FabricProviderServlet.doPost(FabricProviderServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
http://download.oracle.com/docs/cd/E12839_01/core.1111/e10113/chapter_ows_messages.htm
OWS-04086: {0}
Cause: An unexpected error occured
Action: None
Level: 1
Type: ERROR
Impact: Configuration
I have literally NO CLUE. Probably I am passing a SOAP 1.2 to SOA Suite, and it returns me a SOAP 1.1. I will figure this out...
Here http://www.w3.org/TR/soap12-part1/ it says:
If a SOAP node receives a message whose version is not supported it MUST generate a fault (see 5.4 SOAP Fault) with a Value of Code set to "env:VersionMismatch".
Also here http://www.w3.org/TR/soap12-part1/#version it says:
A SOAP/1.1 node receiving a SOAP Version 1.2 message will according to SOAP/1.1 generate a version mismatch SOAP fault based on a SOAP/1.1 message construct.
The oracle.j2ee.ws.server.provider.ProviderProcessor class is in C:\Oracle1\Middleware\oracle_common\modules\oracle.webservices_11.1.1\wsserver.jar
Unfortunately, by looking at the code of this class, there is no way to set a debug flag to trace the message returned.
SOAP1.1 uses http://schemas.xmlsoap.org/soap/envelope/
SOAP1.2 uses http://www.w3.org/2003/05/soap-envelope
If I change the NS of my message to http://schemas.xmlsoap.org/soap/envelope/
I get:
oracle.fabric.common.FabricException: oracle.j2ee.ws.saaj.soap.SOAPVersionMismatchException: Mime Header Content-Type: application/soap+xml requires SOAP envelope namespace: http://www.w3.org/2003/05/soap-envelope: Mime Header Content-Type: application/soap+xml requires SOAP envelope namespace: http://www.w3.org/2003/05/soap-envelope
which makes sense since the WSDL is a SOAP 1.2 and hence the WebService uses 1.2 headers - which are not compatible with 1.1
We have a real issue here for support of SOAP 1.2 services in SOA Suite- evidently come internal component is only SOAP 1.1 compliant and doesn't recognize SOAP 1.2 messages.
Labels:
soap1.2
oracle.adf.rc.exception.MissingParameterException: required parameter [base] is missing or null
oracle.adf.rc.exception.MissingParameterException: required parameter [base] is missing or null at oracle.adf.rc.util.CatalogUtils.checkNotNull
This SOA Suite 11.1.1.4 runs me crazy.... Everything seems to be running fine, but I am unable to connect to the Application Server and deploy stuff from JDeveloper....
This SOA Suite 11.1.1.4 runs me crazy.... Everything seems to be running fine, but I am unable to connect to the Application Server and deploy stuff from JDeveloper....
Labels:
JDeveloper
Saturday, January 22, 2011
Wonderful Morocco
Here at JMA we don't spend all the time coding or reading IT books or swearing against SOAP, XML and WSDL. Once in a while we remember that there is a wonderful world out there.
I have spent my last 2 months in Morocco. It's a wonderful country and the people here are very open minded, friendly and helpful. Almost everybody here can speak fluent French, so no communication issues. Probably with Spanish you can also get by. English is less common.
I live in Casablanca Medina and I love the atmosphere. It's a bit like living in the Middle Ages, I think little has changed in the last 100 years here. Plenty of life in the street until late, bars are fully packed with people socializing and watching together TV, cars are NOT allowed (and this is my favorite spot, I hate cars).
The rest of Casablanca is simply appalling, too modern, a concrete jungle, and extremely polluted. I would suggest seeing Hassan II Mosque - very inspiring, next to the ocean, the waves have a soothing effect on my soul.
Also the Houbous quarter is nice, with Palais Royal and the traditional street market.
Rabat is much more quiet, don't miss:
Kasbah of the Udayas,
Chellah,
Archaeological Museum
Marrakesh is a very enjoyable city, although you will be stopped continuously in the street by street sellers. Remember to always bargain the price, the first price is always at least 3 times the regular price. You can walk for hours in its narrow streets without feeling bored.
A trip to Meknes is very rewarding, particularly nice its Medina full of Berber traditions, the impressive Bab Mansour gate, the immense Royal stables;
at 30 minutes by taxi there is
Volubilis, definitely worth a visit both for the Roman Ruins and for the beautiful view on the hills.
Fes is extraordinary city, there you can admire many Madrassas and Temples. Its tanneries are very impressive, you can admire the entire industrial process and feel lucky your profession is not the tanner.
Ifrane was definitely disappointing, the High Atlas is no competitor for Italian Alps, the mountains are more like highlands and the landscape quite boring, forests are small and sparse, and Ifrane city very modern and dull. I walked 10 minutes in its street and run away.
Some travelling tips:
inside the Casablanca Medina there are many cheap (10 Euros or less) hotels: the IH Youth Hostel, Hotel Des Amis, La Victoire, Candide.... they are decent, comfortable, the only problem is no hot water - but you can get a hot shower in some Hammam for 1 Euro.
In Medinas, often rooms have no electricity plugs.
Trains are excellent (see www.oncf.ma) and VERY cheap.
Many buses are run by CTM - I have never taken them.
In Casablanca you can find "petit taxis" and "grand taxis", the former are RED and more expensive, the latter are Mercedes, collective (6 people) and less expensive.
From Meknes to Volubilis you can take a collective taxi for 2.5 Euros. Same price from Meknes to Ifrane (60 Km).
A few taxi drivers will try to overcharge you - react firmly and invoke the meter. In the worst case say that you want a policeman to settle the case.
I have spent my last 2 months in Morocco. It's a wonderful country and the people here are very open minded, friendly and helpful. Almost everybody here can speak fluent French, so no communication issues. Probably with Spanish you can also get by. English is less common.
I live in Casablanca Medina and I love the atmosphere. It's a bit like living in the Middle Ages, I think little has changed in the last 100 years here. Plenty of life in the street until late, bars are fully packed with people socializing and watching together TV, cars are NOT allowed (and this is my favorite spot, I hate cars).
The rest of Casablanca is simply appalling, too modern, a concrete jungle, and extremely polluted. I would suggest seeing Hassan II Mosque - very inspiring, next to the ocean, the waves have a soothing effect on my soul.
Also the Houbous quarter is nice, with Palais Royal and the traditional street market.
Rabat is much more quiet, don't miss:
Kasbah of the Udayas,
Chellah,
Archaeological Museum
Marrakesh is a very enjoyable city, although you will be stopped continuously in the street by street sellers. Remember to always bargain the price, the first price is always at least 3 times the regular price. You can walk for hours in its narrow streets without feeling bored.
A trip to Meknes is very rewarding, particularly nice its Medina full of Berber traditions, the impressive Bab Mansour gate, the immense Royal stables;
at 30 minutes by taxi there is
Volubilis, definitely worth a visit both for the Roman Ruins and for the beautiful view on the hills.
Volubilis Ruins
Fes is extraordinary city, there you can admire many Madrassas and Temples. Its tanneries are very impressive, you can admire the entire industrial process and feel lucky your profession is not the tanner.
Ifrane was definitely disappointing, the High Atlas is no competitor for Italian Alps, the mountains are more like highlands and the landscape quite boring, forests are small and sparse, and Ifrane city very modern and dull. I walked 10 minutes in its street and run away.
Some travelling tips:
inside the Casablanca Medina there are many cheap (10 Euros or less) hotels: the IH Youth Hostel, Hotel Des Amis, La Victoire, Candide.... they are decent, comfortable, the only problem is no hot water - but you can get a hot shower in some Hammam for 1 Euro.
In Medinas, often rooms have no electricity plugs.
Trains are excellent (see www.oncf.ma) and VERY cheap.
Many buses are run by CTM - I have never taken them.
In Casablanca you can find "petit taxis" and "grand taxis", the former are RED and more expensive, the latter are Mercedes, collective (6 people) and less expensive.
From Meknes to Volubilis you can take a collective taxi for 2.5 Euros. Same price from Meknes to Ifrane (60 Km).
A few taxi drivers will try to overcharge you - react firmly and invoke the meter. In the worst case say that you want a policeman to settle the case.
Labels:
morocco
Friday, January 21, 2011
How to repair a broken Ethernet RJ45 plug
this
http://www.instructables.com/id/Repair-a-Broken-Ethernet-Plug/
seems to be the universal reference on this topic, the Zen Master of Plug fixing...
I will practice soon myself this new art... I can't stand losing connection every time someone touches my cable....
On the other hand, it's really sad how most companies that do IT don't even bother to buy a 10 Euros crimper and some wireless routers... I keep noticing that even a 15 years old kid has better IT equipment at home than most IT development premises. This is one of the many, many sad sides of our profession.
http://www.instructables.com/id/Repair-a-Broken-Ethernet-Plug/
seems to be the universal reference on this topic, the Zen Master of Plug fixing...
I will practice soon myself this new art... I can't stand losing connection every time someone touches my cable....
On the other hand, it's really sad how most companies that do IT don't even bother to buy a 10 Euros crimper and some wireless routers... I keep noticing that even a 15 years old kid has better IT equipment at home than most IT development premises. This is one of the many, many sad sides of our profession.
Labels:
RJ45
package body "DEV_MDS.MDS_INTERNAL_SHREDDED" has errors
after upgrading from 11.1.1.3 to 11.1.1.4, I get this error:
oracle.mds.exception.MDSExceptionList: MDS-01329: unable to load element "persistence-config"
MDS-01370: MetadataStore configuration for metadata-store-usage "OWSM_TargetRepos" is invalid.
ORA-04063: package body "DEV_MDS.MDS_INTERNAL_SHREDDED" has errors
ORA-06508: PL/SQL: could not find program unit being called: "DEV_MDS.MDS_INTERNAL_SHREDDED"
ORA-06512: at line 1
even if I drop the schemas and create again, I still have the problem. I tried reinstalling SOASuite, nothing.
I have uninstalled OracleXE, reinstalled it, before I run RCU I do:
set RCU_JDBC_TRIM_BLOCKS=TRUE
and :
run SQLPlus
conn system/oracle (or whatever password)
show parameter processes
by default “processes” should be 40. We should make it 300:
alter system set processes=300 scope=spfile;
conn / as sysdba
shutdown immediate
startup
conn / as sysdba
show parameter sga
(sga_target should be 768MB)
alter system set sga_target=350M scope=spfile;
alter system set sga_max_size=350M scope=spfile;
shutdown immediate
startup
and it works....
If you still get errors, open the 3 MDS packages in Oracle SQL Developer and recompile them, you should get rid of the MDS SHREDDED bla error message
Lesson learned:
a) always wait a couple of weeks from a software release before you install the product yourself
b) choose a volunteer to perform the installation, and give the green light to the others only after he has successfully tested the product
oracle.mds.exception.MDSExceptionList: MDS-01329: unable to load element "persistence-config"
MDS-01370: MetadataStore configuration for metadata-store-usage "OWSM_TargetRepos" is invalid.
ORA-04063: package body "DEV_MDS.MDS_INTERNAL_SHREDDED" has errors
ORA-06508: PL/SQL: could not find program unit being called: "DEV_MDS.MDS_INTERNAL_SHREDDED"
ORA-06512: at line 1
even if I drop the schemas and create again, I still have the problem. I tried reinstalling SOASuite, nothing.
I have uninstalled OracleXE, reinstalled it, before I run RCU I do:
set RCU_JDBC_TRIM_BLOCKS=TRUE
and :
run SQLPlus
conn system/oracle (or whatever password)
show parameter processes
by default “processes” should be 40. We should make it 300:
alter system set processes=300 scope=spfile;
conn / as sysdba
shutdown immediate
startup
conn / as sysdba
show parameter sga
(sga_target should be 768MB)
alter system set sga_target=350M scope=spfile;
alter system set sga_max_size=350M scope=spfile;
shutdown immediate
startup
and it works....
If you still get errors, open the 3 MDS packages in Oracle SQL Developer and recompile them, you should get rid of the MDS SHREDDED bla error message
Lesson learned:
a) always wait a couple of weeks from a software release before you install the product yourself
b) choose a volunteer to perform the installation, and give the green light to the others only after he has successfully tested the product
Labels:
SOASuite
Oracle Drop Database
this should do the job:
sqlplus "sys as sysdba"
shutdown abort;
startup mount exclusive restrict;
drop database;
exit
sqlplus "sys as sysdba"
shutdown abort;
startup mount exclusive restrict;
drop database;
exit
Labels:
db
WSM-06219 oracle.wsm.policymanager.accessor.BeanAccessor warning
oracle.wsm.resources.policyaccess WSM-06219 A task scheduler was not available for configuring the oracle.wsm.policymanager.accessor.BeanAccessor repository accessor for the default context.
this warning appears during startup of WLS/OSB/SOASuite 11.1.1.4 server
After the server goes in RUNNING state, it disappears.
For the time being I will simply ignore it.
this warning appears during startup of WLS/OSB/SOASuite 11.1.1.4 server
After the server goes in RUNNING state, it disappears.
For the time being I will simply ignore it.
Labels:
WSM-06219
RCU 11.1.1.4 : failing prerequisites creating ESS schema
oracle.sysman.assistants.rcu.backend.validation.PrereqException: RCU-6083:Failed - Check prerequisites requirement for selected component:ESS
Please refer to RCU log at C:\temp\rcuHome\rcu\log\logdir.2011-01-21_09-53\rcu.log for details.
at oracle.sysman.assistants.rcu.backend.validation.PrereqEvaluator.executePrereqTask(PrereqEvaluator.java:642)
at oracle.sysman.assistants.rcu.backend.task.PrereqTask.execute(PrereqTask.java:68)
at oracle.sysman.assistants.rcu.backend.task.ActualTask.run(TaskRunner.java:306)
at java.lang.Thread.run(Thread.java:619)
the funny thing is that the log says to refer to itself for details.... but provides no details!
I see here other people struggling with this issue.
Luckily I don't need ESS, so I simply removed it and RCU worked....
Please refer to RCU log at C:\temp\rcuHome\rcu\log\logdir.2011-01-21_09-53\rcu.log for details.
at oracle.sysman.assistants.rcu.backend.validation.PrereqEvaluator.executePrereqTask(PrereqEvaluator.java:642)
at oracle.sysman.assistants.rcu.backend.task.PrereqTask.execute(PrereqTask.java:68)
at oracle.sysman.assistants.rcu.backend.task.ActualTask.run(TaskRunner.java:306)
at java.lang.Thread.run(Thread.java:619)
the funny thing is that the log says to refer to itself for details.... but provides no details!
I see here other people struggling with this issue.
Luckily I don't need ESS, so I simply removed it and RCU worked....
Labels:
rcu
Thursday, January 20, 2011
Property setBatchSize is not defined for oracle.tip.adapter.file.inbound.FileActivationSpec
Invalid JCA transport endpoint configuration, exception: javax.resource.ResourceException: BINDING.JCA-12532 Cannot set JCA WSDL Property. Error while setting JCA WSDL Property. Property setBatchSize is not defined for oracle.tip.adapter.file.inbound.FileActivationSpec Please verify the spelling of the property.
Unfortunately in OSB 11.1.1.3 BatchSize is not supported (unlike in SOA Suite).
I think in 11.1.1.4 it is.
Unfortunately in OSB 11.1.1.3 BatchSize is not supported (unlike in SOA Suite).
I think in 11.1.1.4 it is.
Labels:
BatchSize,
FileAdapter,
OSB
OSB parsing a file into XML with FileAdapter: memory consumption
this is the behaviour of memory every time we parse a 5MB file into XML.
Basically 5MB of info generates a 500 MB spike in the heap memory - luckily garbage collected quite soon.
A 10000% increase in memory occupation in not such a great idea.
The believers that XML is the next best thing after sex should probably change their mind. And not in the sense that XML is better than sex.
BEA-000337 StuckThreadMaxTime with OSB FileAdapter
20-Jan-2011 10:57:20 o'clock WET Error WebLogicServer BEA-000337 [STUCK] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "602" seconds working on the request "weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl@57134e4b", which is more than the configured time (StuckThreadMaxTime) of "600" seconds. Stack trace:
java.lang.Object.wait(Native Method)
oracle.tip.adapter.file.inbound.FilesToProcess.dequeueToProcess(FilesToProcess.java:101)
oracle.tip.adapter.file.inbound.ProcessWork.run(ProcessWork.java:269)
weblogic.work.ContextWrap.run(ContextWrap.java:41)
weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)
weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
I keep getting this error.
Besides, the number of Stuck Threads increases with time, all of them are weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl@blablabla
Another stack trace is:
oracle.tip.adapter.file.inbound.PollWork.run(PollWork.java:369)
weblogic.work.ContextWrap.run(ContextWrap.java:41)
weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)
weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
Here it solves the problem:
http://blog.easyteam.fr/2010/10/18/osb-%C2%AB-stuck-threads-%C2%BB-sur-la-consommation-de-fichiers/
basically it suggests to create a WorkManager "FilesPollingWorkManager" for the FileAdapter polling thread and setting "Ignore Stuck Threads" to true, and assigning this FilesPollingWorkManager as "Dispatch-Policy" to the File Polling Proxy Service
java.lang.Object.wait(Native Method)
oracle.tip.adapter.file.inbound.FilesToProcess.dequeueToProcess(FilesToProcess.java:101)
oracle.tip.adapter.file.inbound.ProcessWork.run(ProcessWork.java:269)
weblogic.work.ContextWrap.run(ContextWrap.java:41)
weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)
weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
I keep getting this error.
Besides, the number of Stuck Threads increases with time, all of them are weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl@blablabla
Another stack trace is:
oracle.tip.adapter.file.inbound.PollWork.run(PollWork.java:369)
weblogic.work.ContextWrap.run(ContextWrap.java:41)
weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)
weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
Here it solves the problem:
http://blog.easyteam.fr/2010/10/18/osb-%C2%AB-stuck-threads-%C2%BB-sur-la-consommation-de-fichiers/
basically it suggests to create a WorkManager "FilesPollingWorkManager" for the FileAdapter polling thread and setting "Ignore Stuck Threads" to true, and assigning this FilesPollingWorkManager as "Dispatch-Policy" to the File Polling Proxy Service
Labels:
FileAdapter
FileAdapter claiming that a message is malformed
20-Jan-2011 10:10:32 o'clock WET warning jca_framework_and_adapter BEA-000000 onReject: The resource adapter 'File Adapter' requested handling of a malformed inbound message. However, the following activation property has not been defined: 'rejectedMessageHandlers'. Please define it and redeploy. Will use the default Rejection Directory file://jca\Read\rejectedMessages for now.
20-Jan-2011 10:10:32 o'clock WET warning jca_framework_and_adapter BEA-000000 onReject: Sending invalid inbound message to Rejection Handler:
This happens when processing a 40000 lines file (5 MB of info).
The funny thing is that if I halve the number of lines, it works. And the second half of the file is exactly the same as the first. So I am sure it's NOT a problem with the data format, but rather with the message size.
No further clue is provided by the adapter.
Here look at 25.1.5 Logging for how to turn on debug flag (go to
C:\Oracle1\Middleware\user_projects\domains\soadev\alsbdebug.xml and set
alsb-jca-framework-adapter-debug to true, then restart the server)
but to no avail.
Where is file://jca\Read\rejectedMessages defined?
Here they give some clues, like setting
property name="rejectedMessageHandlers" to file://C:/orabpel/samples/test/errorTest
/rejectedMessages
but it's not accepted by FileAdapter.
see also here the official Oracle doc.
The adapter implementation is oracle.tip.adapter.file.inbound.FileActivationSpec
See here for a list of properties for the Adapter.
Here http://niallcblogs.blogspot.com/2010/09/oracle-file-adapter-osb-11g-debatching.html an interesting post on the OSB/Batch Reading topic.
At last I use these settings:
and I get a beautiful OutOfMemoryException :
JCA_FRAMEWORK_AND_ADAPTER BEA-000000 InboundTranslatorDelegate caught Generic Exception , the Resource Adapter will ignore this
java.lang.OutOfMemoryError: Java heap space
20-Jan-2011 10:10:32 o'clock WET warning jca_framework_and_adapter BEA-000000 onReject: Sending invalid inbound message to Rejection Handler:
This happens when processing a 40000 lines file (5 MB of info).
The funny thing is that if I halve the number of lines, it works. And the second half of the file is exactly the same as the first. So I am sure it's NOT a problem with the data format, but rather with the message size.
No further clue is provided by the adapter.
Here look at 25.1.5 Logging for how to turn on debug flag (go to
C:\Oracle1\Middleware\user_projects\domains\soadev\alsbdebug.xml and set
alsb-jca-framework-adapter-debug to true, then restart the server)
but to no avail.
Where is file://jca\Read\rejectedMessages defined?
Here they give some clues, like setting
property name="rejectedMessageHandlers" to file://C:/orabpel/samples/test/errorTest
/rejectedMessages
but it's not accepted by FileAdapter.
see also here the official Oracle doc.
The adapter implementation is oracle.tip.adapter.file.inbound.FileActivationSpec
See here for a list of properties for the Adapter.
Here http://niallcblogs.blogspot.com/2010/09/oracle-file-adapter-osb-11g-debatching.html an interesting post on the OSB/Batch Reading topic.
At last I use these settings:
<adapter-config name="MyFileReader" adapter="File Adapter" wsdlLocation="MyFileReader.wsdl" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata"> <connection-factory location="eis/FileAdapter" UIincludeWildcard="*.txt" adapterRef=""/> <endpoint-activation portType="Read_ptt" operation="Read"> <activation-spec className="oracle.tip.adapter.file.inbound.FileActivationSpec"> <property name="UseHeaders" value="false"/> <property name="PhysicalDirectory" value="C:/acmepoc/myFiles/in"/> <property name="Recursive" value="true"/> <property name="PublishSize" value="200"/> <property name="DeleteFile" value="true"/> <property name="IncludeFiles" value=".*\.txt"/> <property name="PollingFrequency" value="10"/> <property name="MinimumAge" value="0"/> </activation-spec> </endpoint-activation> </adapter-config>
and I get a beautiful OutOfMemoryException :
JCA_FRAMEWORK_AND_ADAPTER BEA-000000 InboundTranslatorDelegate caught Generic Exception , the Resource Adapter will ignore this
java.lang.OutOfMemoryError: Java heap space
Labels:
FileAdapter
Wednesday, January 19, 2011
JDeveloper File Adapter working in OSB
We imported in OSB the .jca, .wsdl and .xsd files generated by the File Adapter Wizard and Native Format Language in JDeveloper.
Once imported in Eclipse (Import/Import/File System), right click on the JCA file, and "generate service": this will generate a Proxy Service based on JCA.
You can choose to keep your setting in the JCA file, or to customize them in the Proxy Service.
The beautiful thing is that the nxsd extension are recognized and the XML generated exactly as it was run in SOA Suite. I prefer by far NFL than MFL.
Here the official 11.1.1.4 doc for FileAdapter
Once imported in Eclipse (Import/Import/File System), right click on the JCA file, and "generate service": this will generate a Proxy Service based on JCA.
You can choose to keep your setting in the JCA file, or to customize them in the Proxy Service.
The beautiful thing is that the nxsd extension are recognized and the XML generated exactly as it was run in SOA Suite. I prefer by far NFL than MFL.
Here the official 11.1.1.4 doc for FileAdapter
Got minus one from a read call
weblogic.common.resourcepool.ResourceDeadException: 0:weblogic.common.ResourceException: Could not create pool connection. The DBMS driver exception was: Got minus one from a read call
here
they suggest:
I also had this kind of error. I suppose that the root cause was the leak of available sessions on the oracle side. My glassfish server had 400-connection jdbc pool size and Oracle 10g had following parameters:
processes = 420
sessions = 467
transactions = 514
Every request to the DB failed with "IO Exception: Got minus one from a read call".
Increasing Oracle values (processes = 450; sessions = 500; transactions = 550) fixed the problem.
here
they suggest:
I also had this kind of error. I suppose that the root cause was the leak of available sessions on the oracle side. My glassfish server had 400-connection jdbc pool size and Oracle 10g had following parameters:
processes = 420
sessions = 467
transactions = 514
Every request to the DB failed with "IO Exception: Got minus one from a read call".
Increasing Oracle values (processes = 450; sessions = 500; transactions = 550) fixed the problem.
Labels:
db
Tuesday, January 18, 2011
wls1034 and 11.1.1.4 is out
here
http://guidoschmutz.wordpress.com/category/soa/oracle-soa-suite-soa-2/oracle-service-bus-osb/
a great post on the whole upgrade
Here is WebLogic + OEPE, JDeveloper
http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html
Here the whole download page.
http://guidoschmutz.wordpress.com/category/soa/oracle-soa-suite-soa-2/oracle-service-bus-osb/
a great post on the whole upgrade
Here is WebLogic + OEPE, JDeveloper
http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html
Here the whole download page.
Labels:
SOASuite
oracle.sysman.emSDK.webservices.wsdlparser.OperationInfoImpl.getHttpResponseMessage
Server Exception during PPR, #6[[ javax.el.ELException: oracle.sysman.emSDK.webservices.wsdlapi.SoapTestException: null at javax.el.BeanELResolver.getValue(BeanELResolver.java:266) at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143) at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72) at com.sun.el.parser.AstValue.getValue(AstValue.java:118) at com.sun.el.parser.AstNotEqual.getValue(AstNotEqual.java:41) at com.sun.el.parser.AstAnd.getValue(AstAnd.java:46) .... caused by: java.lang.NullPointerException at oracle.sysman.emSDK.webservices.wsdlparser.OperationInfoImpl.getHttpResponseMessage(OperationInfoImpl.java:1508) at oracle.sysman.emas.model.wsmgt.PortName.getResponse(PortName.java:635)
Testing a Business Rules based composite proves to be quite challenging...
the Enterprise Manager console seems to have difficulties handling it.
A second attempt gives:
A Decision Service of the given name doesnt exist.[[ The component OracleRules1 in composite OBRPerfTest does not expose a service . Check the services that are exposed by component OracleRules1. If the error persists, contact Oracle Support Services.
Labels:
OBR
Monday, January 17, 2011
SOA Suite, exposing a Decision Service as a Web Service
Drop your Business Rule in the Components lane, code it, then simply click on its handle, drag it to the "Exposed Services" lane and release it. The Web Service interface is magically created.
Here is some doc.
The problem is that when you test it through the EM console, it requires some additional parameters:
I think the Decision Service assumes it's running into a BPEL instance, so you must "simulate" all the parameters of a BPEL instance.... :o(
Whatever I enter, I keep getting an exception:
Here is some doc.
The problem is that when you test it through the EM console, it requires some additional parameters:
The test was not run. Invalid input arguments for the following fields: name value required processId value required processVersion value required domainId value required processURL value required instanceId value required
I think the Decision Service assumes it's running into a BPEL instance, so you must "simulate" all the parameters of a BPEL instance.... :o(
Whatever I enter, I keep getting an exception:
java.lang.Exception: oracle.sysman.emSDK.webservices.wsdlapi.SoapTestException: null at oracle.sysman.emas.model.wsmgt.WSTestModel.invokeOperation(WSTestModel.java:575) at oracle.sysman.emas.view.wsmgt.WSView.invokeOperation(WSView.java:381) at oracle.sysman.emas.view.wsmgt.WSView.invokeOperation(WSView.java:298) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.sun.el.parser.AstValue.invoke(AstValue.java:157) at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:283) at org.apache.myfaces.trinidadinternal.taglib.util.MethodExpressionMethodBinding.invoke(MethodExpressionMethodBinding.java:53) at org.apache.myfaces.trinidad.component.UIXComponentBase.broadcastToMethodBinding(UIXComponentBase.java:1259) at org.apache.myfaces.trinidad.component.UIXCommand.broadcast(UIXCommand.java:183) at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$1.run(ContextSwitchingComponent.java:90) at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent._processPhase(ContextSwitchingComponent.java:309) at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast(ContextSwitchingComponent.java:94) at oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:97) at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$1.run(ContextSwitchingComponent.java:90) at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent._processPhase(ContextSwitchingComponent.java:309) at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast(ContextSwitchingComponent.java:94) at oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:91) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756) at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._invokeApplication(LifecycleImpl.java:698) at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:285) at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:177) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265) at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300) at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:97) at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:420) at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60) at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:420) at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:247) at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:157) at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) at oracle.help.web.rich.OHWFilter.doFilter(Unknown Source) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) at oracle.sysman.emSDK.license.LicenseFilter.doFilter(LicenseFilter.java:101) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:191) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) at oracle.sysman.emas.fwk.MASConnectionFilter.doFilter(MASConnectionFilter.java:41) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) at oracle.adf.library.webapp.LibraryFilter.doFilter(LibraryFilter.java:159) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) at oracle.sysman.eml.app.AuditServletFilter.doFilter(AuditServletFilter.java:179) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) at oracle.sysman.eml.app.EMRepLoginFilter.doFilter(EMRepLoginFilter.java:203) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) at oracle.sysman.core.app.perf.PerfFilter.doFilter(PerfFilter.java:141) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) at oracle.sysman.eml.app.ContextInitFilter.doFilter(ContextInitFilter.java:542) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) at oracle.dms.wls.DMSServletFilter.doFilter(DMSServletFilter.java:330) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.doIt(WebAppServletContext.java:3684) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3650) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121) at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2268) at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2174) at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1446) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201) at weblogic.work.ExecuteThread.run(ExecuteThread.java:173) Caused by: oracle.sysman.emSDK.webservices.wsdlapi.SoapTestException: null at oracle.sysman.emSDK.webservices.wsdlapi.dispatch.DispatchUtil.invoke(DispatchUtil.java:260) at oracle.sysman.emSDK.webservices.wsdlparser.OperationInfoImpl.invokeWithDispatch(OperationInfoImpl.java:985) at oracle.sysman.emas.model.wsmgt.PortName.invokeOperation(PortName.java:729) at oracle.sysman.emas.model.wsmgt.WSTestModel.invokeOperation(WSTestModel.java:569) ... 69 more Caused by: javax.xml.ws.soap.SOAPFaultException at oracle.j2ee.ws.client.jaxws.DispatchImpl.throwJAXWSSoapFaultException(DispatchImpl.java:955) at oracle.j2ee.ws.client.jaxws.DispatchImpl.invoke(DispatchImpl.java:750) at oracle.j2ee.ws.client.jaxws.OracleDispatchImpl.synchronousInvocationWithRetry(OracleDispatchImpl.java:234) at oracle.j2ee.ws.client.jaxws.OracleDispatchImpl.invoke(OracleDispatchImpl.java:105) at oracle.sysman.emSDK.webservices.wsdlapi.dispatch.DispatchUtil.invoke(DispatchUtil.java:256) ... 72 more
Labels:
OBR
InteractionSpec parameter has invalid value of oracle.tip.adapter.file.outbound.ChunkedInteractionSpec
I get this error message when I open this FileAdapter:
WTF???
Here it seems like oracle.tip.adapter.file.outbound.ChunkedInteractionSpec is a perfectly valid value...
The funny thing is that it deploys just fine.... it MIGHT be a problem in the JDev version number, the application was developed by another developer...
Anyway here it says that in 11.1.1.4 the ChunkSize property has been added to the File Adapter, so that you can be fed morcels of file without actually having to pull the info in chunked mode.
WTF???
Here it seems like oracle.tip.adapter.file.outbound.ChunkedInteractionSpec is a perfectly valid value...
The funny thing is that it deploys just fine.... it MIGHT be a problem in the JDev version number, the application was developed by another developer...
Anyway here it says that in 11.1.1.4 the ChunkSize property has been added to the File Adapter, so that you can be fed morcels of file without actually having to pull the info in chunked mode.
Labels:
chunkread,
FileAdapter
Thursday, January 13, 2011
BEA-395133: XQuery expression evaluates to an invalid XQuery resource name
see here for message catalogue
You were trying to use Dynamic XQuery invocation and you got this message.
Yet the XQuery exists. What can be wrong.
The doc is here.
In fact, the problem was that one should specify the XQuery WITHOUT the .xq at the end :o) - idiot me.
You were trying to use Dynamic XQuery invocation and you got this message.
Yet the XQuery exists. What can be wrong.
The doc is here.
In fact, the problem was that one should specify the XQuery WITHOUT the .xq at the end :o) - idiot me.
Labels:
DynamicXQuery
Designing and Modelling vs Coding
This is my 2 cents wisdom on the oldest topic on IT: should you DESIGN AND MODEL everything upfront, or should you just CODE IT and refactor it as you progress in the task?
I have no doubt that IT work is like LIFE - in the biological sense of it:
a LOT of microchoices made IN ACTION, a continuous adaptation to an EVER CHANGING WORLD, but with a few important principles to guide us: ROBUSTNESS, ABILITY TO REFACTOR AND RECYCLE, AGILITY IN CHANGE, ABSOLUTE CLARITY IN INTERFACES AND CONTRACTS.
Any living creature is designed with these same principles. Some strange creatures do live without any agility (PANDAS), but often they are doomed for extinction as the environment changes. The key to the success of human as living creatures is their ADAPTABILITY.
Emotions play en enormous role in a project. Enthusiastic people achieve so much more that bored, 9-5 workers waiting only for Friday 5pm to come. And NOTHING motivates people more than SEEING ACTUAL WORKING CODE, and being able to model it and improve it.
So my motto is:
I have no doubt that IT work is like LIFE - in the biological sense of it:
a LOT of microchoices made IN ACTION, a continuous adaptation to an EVER CHANGING WORLD, but with a few important principles to guide us: ROBUSTNESS, ABILITY TO REFACTOR AND RECYCLE, AGILITY IN CHANGE, ABSOLUTE CLARITY IN INTERFACES AND CONTRACTS.
Any living creature is designed with these same principles. Some strange creatures do live without any agility (PANDAS), but often they are doomed for extinction as the environment changes. The key to the success of human as living creatures is their ADAPTABILITY.
Emotions play en enormous role in a project. Enthusiastic people achieve so much more that bored, 9-5 workers waiting only for Friday 5pm to come. And NOTHING motivates people more than SEEING ACTUAL WORKING CODE, and being able to model it and improve it.
So my motto is:
while (not (dead or retired) ) { analyze a little; design a little; code a little; test a little; thread.sleep(8 hours); randomly enjoy your life outside the computer world; }
Labels:
agile
java.util.ConcurrentModificationException
I get this while iterating on a collection (a regular java.lang.Vector) and at the same time changing it:
for (PreactivationCallbackTask task : tasks) {
....
tasks.remove(task); // changing the collection while you iterate is not allowed
}
I get this:
java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
here the javadoc for java.util.ConcurrentModificationException
The only way out is to change the collection OUTSIDE the for loop.
This post provides an excellent explanation.
for (PreactivationCallbackTask task : tasks) {
....
tasks.remove(task); // changing the collection while you iterate is not allowed
}
I get this:
java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
here the javadoc for java.util.ConcurrentModificationException
The only way out is to change the collection OUTSIDE the for loop.
This post provides an excellent explanation.
Labels:
collections
Tuesday, January 11, 2011
Erik Lynch's Tree of Life
I saw this drawing in 1999, in a Californian school posted on a billboard. I was so fascinated that I took immediately a picture. I find this drawing one of the most brilliant pieces of art I have ever seen in my life.
I hope Erik Lynch doesn't mind if I reproduce here his masterpiece. God bless him.
Something very similar has been drawn by another Northern American artist:
http://thoughtballoonhelium.blogspot.com/2010/12/treehouse-of-adulthood.html
Labels:
artists
SOA-20003 unable to register service
SOA-20003 unable to register service
oracle.webservices.provider.ProviderException: java.lang.NullPointerException
This error occurs while I try to deploy a composite.
http://docs.tpu.ru/docs/oracle/en/owl/E14571_01/core.1111/e10113/chapter_soa_messages.htm
The problem in fact was that I coded by hand the WSDL (naughty me) and I put a service name not matching the Web Service name created in the Composite.
I recreated the WSDL using the JDeveloper wizard associated to the Composite Exposed Services for WS Adapter, and it works.
This wizard doesn't produce a "service" entry in the WSDL - this might be the reason for the failure, the Composite doesn't expect to have a "complete" WSDL, the Engine will take care of generating a true one.
Especially, forget about imposing an Endpoint URL by using the "soap:address location" in the wsdl:service/wsdl:port section: the SOA Composite will generate its endpoint using his own logic.
oracle.webservices.provider.ProviderException: java.lang.NullPointerException
This error occurs while I try to deploy a composite.
http://docs.tpu.ru/docs/oracle/en/owl/E14571_01/core.1111/e10113/chapter_soa_messages.htm
SOA-20003: Unable to register service. Cause: There was an issue during the attempt to create the endpoint for the composite service Action: Make sure that the WSDL either has a service and port that correspond to the values specified in the composite file or that there is no empty service node in the WSDL Level: 1 Type: ERROR Impact: Deployment
The problem in fact was that I coded by hand the WSDL (naughty me) and I put a service name not matching the Web Service name created in the Composite.
I recreated the WSDL using the JDeveloper wizard associated to the Composite Exposed Services for WS Adapter, and it works.
This wizard doesn't produce a "service" entry in the WSDL - this might be the reason for the failure, the Composite doesn't expect to have a "complete" WSDL, the Engine will take care of generating a true one.
Especially, forget about imposing an Endpoint URL by using the "soap:address location" in the wsdl:service/wsdl:port section: the SOA Composite will generate its endpoint using his own logic.
Labels:
SOASuite
Sunday, January 9, 2011
com.collaxa.cube.engine.types.bpel.CXMessageVariable
if you invoke a BPEL process, the inputVariable will be a com.collaxa.cube.engine.types.bpel.CXMessageVariable , and if you do toString you get:
inputVariable={payload=oracle.xml.parser.v2.XMLElement@1e651480}
so it looks like a hashTable kind of thingie. Just get the element with key "payload" and you can work as usual with a XMLElement.
Normally you would get the XmlElement with this function:
bpws:getVariableData('inputVariable','payload')
inputVariable={payload=oracle.xml.parser.v2.XMLElement@1e651480}
so it looks like a hashTable kind of thingie. Just get the element with key "payload" and you can work as usual with a XMLElement.
Normally you would get the XmlElement with this function:
bpws:getVariableData('inputVariable','payload')
Labels:
BPEL
Saturday, January 8, 2011
BPEL how to loop over elements of a collection
In BPEL, if you want to get the value of an indexed variable, like in this XPath:
/ns5:PreactivationCollection/ns5:Preactivation[$lineIndex]
you must do some acrobatics using a "concat" function:
bpws:getVariableData('Invoke_ReadLinesForLot_ReadLinesForLotSelect_OutputVariable','PreactivationCollection',concat('/ns5:PreactivationCollection/ns5:Preactivation[', bpws:getVariableData('lineIndex'), ']'))"
This is the mess you end up entangled with when, instead of using a proper programming language (DSL), you resort to XML to implement your programming needs.
BPEL is yet another EXTREMELY poor implementation of something which otherwise contains powerful programming paradigms.
/ns5:PreactivationCollection/ns5:Preactivation[$lineIndex]
you must do some acrobatics using a "concat" function:
bpws:getVariableData('Invoke_ReadLinesForLot_ReadLinesForLotSelect_OutputVariable','PreactivationCollection',concat('/ns5:PreactivationCollection/ns5:Preactivation[', bpws:getVariableData('lineIndex'), ']'))"
This is the mess you end up entangled with when, instead of using a proper programming language (DSL), you resort to XML to implement your programming needs.
BPEL is yet another EXTREMELY poor implementation of something which otherwise contains powerful programming paradigms.
Labels:
BPEL
Friday, January 7, 2011
oracle.xml.parser.v2.XMLElement, debugging and logging in BPEL
oracle.xml.parser.v2.XMLElement is the result of any XPath operation on a variable. Obvious, it's the way SOA Suite internally represents the payload and complex variables.
You can embed a Java activity like this:
If you want to print the XML, here is how:
See also here for more on logging in BPEL.
You can embed a Java activity like this:
oracle.xml.parser.v2.XMLElement currentLine = (oracle.xml.parser.v2.XMLElement)getVariableData("currentLine"); System.out.println("currentLine=" + currentLine);
If you want to print the XML, here is how:
oracle.xml.parser.v2.XMLElement currentLine = (oracle.xml.parser.v2.XMLElement)getVariableData("currentLine"); System.out.println("currentLine=" + currentLine); addAuditTrailEntry("currentLine is: " + currentLine); java.io.StringWriter writer = new java.io.StringWriter(); try { currentLine.print(writer); String payloadAsString = writer.toString(); System.out.println("currentLine=" + payloadAsString); } catch (Exception e) { e.printStackTrace(); }
See also here for more on logging in BPEL.
Labels:
BPEL,
XmlElement
SOAP: the S stands for Simple
http://harmful.cat-v.org/software/xml/soap/simple
hahaha this is really hilarious. The people who have invented SOAP should be crucified by their balls - assuming they have 2 - and hung with their guts - sure they have, it takes guts to impose to the world such a pathetic underspecified underperforming ball of mud.
hahaha this is really hilarious. The people who have invented SOAP should be crucified by their balls - assuming they have 2 - and hung with their guts - sure they have, it takes guts to impose to the world such a pathetic underspecified underperforming ball of mud.
Labels:
SOAP
Failed to compile bpel generated classes
Error(38,37): Failed to compile bpel generated classes.
failure to compile the generated BPEL classes for BPEL process "BPELProcess3" of composite "default/PVPreactivationPhase2!1.0"
The class path setting is incorrect.
Ensure that the class path is set correctly. If this happens on the server side, verify that the custom classes or jars which this BPEL process is depending on are deployed correctly. Also verify that the run time is using the same release/version.
here some other people facing a similar issue
I do this:
ant -verbose -f ant-sca-compile.xml -Dscac.input=C:/
JDeveloper/mywork/PVPreactivation/PVPreactivationPhase2/composite.xml
the classpath is a monster:
C:\JDeveloper\mywork\PVPreactivation\PVPreactivationPhase2\SCA-INF\classes
C:\Oracle1\Middleware\jdeveloper\bin
C:\Oracle1\Middleware\jdeveloper\soa\modules\fabric-url-handler_11.1.1.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.client_11.1.1\oracle.bpm.bpm-services.interface.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.client_11.1.1\oracle.bpm.web-resources.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.project_11.1.1\oracle.bpm.project.catalog.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.project_11.1.1\oracle.bpm.project.compile.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.project_11.1.1\oracle.bpm.project.io.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.project_11.1.1\oracle.bpm.project.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.project_11.1.1\oracle.bpm.project.model.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle-bpm.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.analytics.actions.ejb.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.analytics.common.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.analytics.dashboard.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.analytics.measurement.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.analytics.persistence.ejb.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.boot.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.bpm-services.implementation.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.bpm-services.internal.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.bpmobject.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.bpmobject.runtime.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.compiler.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.compiler.xpath.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.core.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.fdi.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.fusion.repository.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.fusion.sca.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.fusion.scac.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.fusion.soa.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.lib.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.metadata.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.papi.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.parser.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.pml.service.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.runtime.bpmn-engine.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.runtime.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.vfilesystem.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.bpm.runtime_11.1.1\oracle.bpm.xml.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.rules_11.1.1\rl.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.rules_11.1.1\rulesdk2.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.bpel_11.1.1\orabpel-common.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.bpel_11.1.1\orabpel-thirdparty.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.bpel_11.1.1\orabpel-validator.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.bpel_11.1.1\orabpel.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.fabric_11.1.1\fabric-runtime.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.fabric_11.1.1\soa-infra-tools.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.fabric_11.1.1\testfwk-xbeans.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.mediator_11.1.1\mediator_client.jar
C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.workflow_11.1.1\bpm-services.jar
C:\Oracle1\Middleware\jdeveloper\uddi\lib\builtin_serialization.jar
C:\Oracle1\Middleware\jdeveloper\uddi\lib\core_services_client.jar
C:\Oracle1\Middleware\jdeveloper\uddi\lib\jaxm.jar
C:\Oracle1\Middleware\jdeveloper\uddi\lib\jaxrpc.jar
C:\Oracle1\Middleware\jdeveloper\uddi\lib\saaj.jar
C:\Oracle1\Middleware\jdeveloper\uddi\lib\security-ng.jar
C:\Oracle1\Middleware\jdeveloper\uddi\lib\security2-ng.jar
C:\Oracle1\Middleware\jdeveloper\uddi\lib\security_providers_client.jar
C:\Oracle1\Middleware\jdeveloper\uddi\lib\taxonomy_client_v3.jar
C:\Oracle1\Middleware\jdeveloper\uddi\lib\uddiclient_api_v3.jar
C:\Oracle1\Middleware\jdeveloper\uddi\lib\uddiclient_core.jar
C:\Oracle1\Middleware\jdeveloper\uddi\lib\wasp.jar
C:\Oracle1\Middleware\jdeveloper\uddi\lib\wsdl2uddi_client_v3.jar
C:\Oracle1\Middleware\modules\com.bea.core.apache.commons.collections_3.2.0.jar
C:\Oracle1\Middleware\modules\com.bea.core.apache.commons.lang_2.1.0.jar
C:\Oracle1\Middleware\modules\com.bea.core.weblogic.workmanager_1.8.0.0.jar
C:\Oracle1\Middleware\modules\com.bea.core.xml.xmlbeans_2.2.0.0.jar
C:\Oracle1\Middleware\modules\javax.management.j2ee_1.0.jar
C:\Oracle1\Middleware\modules\javax.servlet_1.0.0.0_2-5.jar
C:\Oracle1\Middleware\modules\javax.xml.rpc_1.2.1.jar
C:\Oracle1\Middleware\oracle_common\modules\commonj.sdo_2.1.0.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.adf.model_11.1.1\adfbcsvc-share.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.adf.model_11.1.1\adfm.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.adf.share.ca_11.1.1\adf-share-base.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.adf.share.ca_11.1.1\adf-share-ca.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.adf.share_11.1.1\adf-share-support.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.adf.share_11.1.1\adflogginghandler.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.adf.share_11.1.1\jsp-el-api.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.bali.share_11.1.1\share.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.classloader_11.1.1.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.dms_11.1.1\dms.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.fabriccommon_11.1.1\fabric-common.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.http_client_11.1.1.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.javacache_11.1.1\cache.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.jmx_11.1.1\jmxframework.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.jmx_11.1.1\jmxspi.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.logging-utils_11.1.1.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.mds_11.1.1\mdsrt.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.mds_11.1.1\oramds.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.nlsrtl_11.1.0\orai18n-mapping.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.odl_11.1.1\ojdl.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.ucp_11.1.0.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.webservices_11.1.1\orawsdl.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.webservices_11.1.1\wsclient.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.wsm.common_11.1.1\wsm-policy-core.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.wsm.common_11.1.1\wsm-secpol.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.xdk_11.1.0\xml.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.xdk_11.1.0\xmlparserv2.jar
C:\Oracle1\Middleware\oracle_common\modules\oracle.xmlef_11.1.1\xmlef.jar
C:\Oracle1\Middleware\oracle_common\modules\org.apache.commons.beanutils_1.6.jar
C:\Oracle1\Middleware\oracle_common\modules\org.apache.commons.digester_1.8.jar
C:\Oracle1\Middleware\oracle_common\modules\org.apache.commons.logging_1.0.4.jar
C:\Oracle1\Middleware\oracle_common\modules\org.springframework_2.0.jar
C:\Oracle1\Middleware\oracle_common\soa\modules\oracle.soa.mgmt_11.1.1\soa-infra-mgmt.jar
C:\Oracle1\Middleware\oracle_common\webservices\wsclient_extended.jar
C:\Oracle1\Middleware\wlserver_10.3\server\ext\jdbc\oracle\11g\ojdbc5.jar
C:\Oracle1\Middleware\wlserver_10.3\server\lib\wldb2.jar
C:\Oracle1\Middleware\wlserver_10.3\server\lib\wlsqlserver.jar
C:\Program Files\Java\jdk1.6.0_21\lib\tools.jar
C:\apps\ant\lib\ant-antlr.jar
C:\apps\ant\lib\ant-apache-bcel.jar
C:\apps\ant\lib\ant-apache-bsf.jar
C:\apps\ant\lib\ant-apache-log4j.jar
C:\apps\ant\lib\ant-apache-oro.jar
C:\apps\ant\lib\ant-apache-regexp.jar
C:\apps\ant\lib\ant-apache-resolver.jar
C:\apps\ant\lib\ant-apache-xalan2.jar
C:\apps\ant\lib\ant-commons-logging.jar
C:\apps\ant\lib\ant-commons-net.jar
C:\apps\ant\lib\ant-jai.jar
C:\apps\ant\lib\ant-javamail.jar
C:\apps\ant\lib\ant-jdepend.jar
C:\apps\ant\lib\ant-jmf.jar
C:\apps\ant\lib\ant-jsch.jar
C:\apps\ant\lib\ant-junit.jar
C:\apps\ant\lib\ant-launcher.jar
C:\apps\ant\lib\ant-netrexx.jar
C:\apps\ant\lib\ant-nodeps.jar
C:\apps\ant\lib\ant-swing.jar
C:\apps\ant\lib\ant-testutil.jar
C:\apps\ant\lib\ant.jar
C:\bea11\jdk160_18\bin
the error message suggests to open C:\Users\pierre\AppData\Local\Temp\out.err
there I find only:
WARNING: CubeProcessor.compileGeneratedClasses() classpath is: C:\JDeveloper\mywork\PVPreactivation\PVPreactivationPhase2\SCA-INF\classes;C:\JDeveloper\mywork\PVPreactivation\PVPreactivationPhase2\SCA-INF\gen-classes;C:\Oracle1\Middleware\jdeveloper\..\oracle_common\modules\commonj.sdo_2.1.0.jar;C:\Oracle1\Middleware\jdeveloper\..\oracle_common\modules\oracle.fabriccommon_11.1.1\fabric-common.jar;C:\Oracle1\Middleware\jdeveloper\..\oracle_common\modules\oracle.xdk_11.1.0\xmlparserv2.jar;C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.bpel_11.1.1\orabpel-common.jar;C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.bpel_11.1.1\orabpel-exts.jar;C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.bpel_11.1.1\orabpel-thirdparty.jar;C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.bpel_11.1.1\orabpel-validator.jar;C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.bpel_11.1.1\orabpel.jar;C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.fabric_11.1.1\fabric-client.jar;C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.fabric_11.1.1\fabric-ext.jar;C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.fabric_11.1.1\fabric-runtime.jar;C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.fabric_11.1.1\oracle.soa.fabric.jar;C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.fabric_11.1.1\soa-infra-tools.jar;C:\Oracle1\Middleware\jdeveloper\soa\modules\oracle.soa.ext_11.1.1\classes/;C:\Oracle1\Middleware\jdeveloper\..\oracle_common\soa\modules\oracle.soa.mgmt_11.1.1\soa-infra-mgmt.jar
and in the same directory, in out.xml, I find:
FATAL_ERROR /ns:composite/ns:component[@name='PreactivateLine'] 38 37
but in fact only in the stdout of the ant console you can find the actual cause of error (a missing variable in a Java scriptlet). Fix the Java Scriptlet compilation problem and the error will go away.
Labels:
BPEL
C:\Oracle1\Middleware\jdeveloper\integration\seed\soa\configuration\bpm-xpath-functions-config.xml (The system cannot find the file specified)
C:\Oracle1\Middleware\jdeveloper\integration\seed\soa\configuration\bpm-xpath-functions-config.xml (The system cannot find the file specified)
wft???? I hope it's not impacting anything....
wft???? I hope it's not impacting anything....
Labels:
SOASuite
A BPEL book for the coming Spring: WS-BPEL 2.0 with Oracle SOA Suite 11g
WS-BPEL 2.0 for SOA Composite Applications with Oracle SOA Suite 11g
https://www.packtpub.com/ws-bpel-2-0-for-soa-with-oracle-soa-suite-11g/book
Many more books on the BPEL topic here
https://www.packtpub.com/books/bpel
Reading this book on "BPEL with SOA Suite" was a major source of inspiration, but it definitely requires some background.
If you are looking for a quick tutorial on how to write your first HelloWorld BPEL process,you might look elsewhere, like "Getting Started With Oracle SOA Suite 11g R1". "BPEL with SOA Suite" goes very deep in the strategic and historical reasons behind the creation of BPEL. It focuses mostly on those programming paradigms missing from traditional languages and which should have driven your company to the adoption of a BPEL engine and of a Service Bus. Compensation, parallel flows, correlation of asynchronous flows are illustrated here to a dizzying technical depth.
In a previous project there was a lot of debate on what should go in our BPEL and what in the SB (OSB) and how to integrate the two: in the chapters on ESB OSB I found clear usage patterns for both.
The usually overlooked subject of Repositories and Registries is covered with attention to the needs of developers and delivery managers.
For the first time I understood the differences between orchestration and choreography, how to approach fault handling and compensation,
how to apply the interoperability between BPMN and BPEL.
There are several example illustrating correlation,compensation,joins, which are advanced enough to make a BPEL guru out of you once you have understood them.
On the whole I felt that this books is a good compromise between an academic conceptual approach of integration issues - very useful from an architectural standpoint - and a more hands-on, let's-play-with-the-tool approach very appreciated by developers. It's an immense source of "pearls of wisdom" and it adopts a very refined technical vocabulary. Master the concepts illustrated in this book and you will be top notch.
https://www.packtpub.com/ws-bpel-2-0-for-soa-with-oracle-soa-suite-11g/book
Many more books on the BPEL topic here
https://www.packtpub.com/books/bpel
Reading this book on "BPEL with SOA Suite" was a major source of inspiration, but it definitely requires some background.
If you are looking for a quick tutorial on how to write your first HelloWorld BPEL process,you might look elsewhere, like "Getting Started With Oracle SOA Suite 11g R1". "BPEL with SOA Suite" goes very deep in the strategic and historical reasons behind the creation of BPEL. It focuses mostly on those programming paradigms missing from traditional languages and which should have driven your company to the adoption of a BPEL engine and of a Service Bus. Compensation, parallel flows, correlation of asynchronous flows are illustrated here to a dizzying technical depth.
In a previous project there was a lot of debate on what should go in our BPEL and what in the SB (OSB) and how to integrate the two: in the chapters on ESB OSB I found clear usage patterns for both.
The usually overlooked subject of Repositories and Registries is covered with attention to the needs of developers and delivery managers.
For the first time I understood the differences between orchestration and choreography, how to approach fault handling and compensation,
how to apply the interoperability between BPMN and BPEL.
There are several example illustrating correlation,compensation,joins, which are advanced enough to make a BPEL guru out of you once you have understood them.
On the whole I felt that this books is a good compromise between an academic conceptual approach of integration issues - very useful from an architectural standpoint - and a more hands-on, let's-play-with-the-tool approach very appreciated by developers. It's an immense source of "pearls of wisdom" and it adopts a very refined technical vocabulary. Master the concepts illustrated in this book and you will be top notch.
Thursday, January 6, 2011
Event Delivery Network
I love the concept of an Event-Driven SOA. Events decouple producers and consumers, they allow multiple consumers, they allow asynchronous interaction etc.
here an entire chapter on the EDN topic
here how to create an Event with a PL-SQL procedure.
The mystery so far is how to generate an Event from Java....apart the horrendous command line interface.... probably for JMS based events there is another way....
here an entire chapter on the EDN topic
here how to create an Event with a PL-SQL procedure.
The mystery so far is how to generate an Event from Java....apart the horrendous command line interface.... probably for JMS based events there is another way....
Labels:
EDN
Sunday, January 2, 2011
A book for 2011 : The TCP/IP Guide by Kozierok
http://www.tcpipguide.com/buybook.htm
Fascinating quote: "the future of information technology lies not so much in bigger and faster computers, but in better ways of exchanging information between them".
The book seems to be really an awesome resource for Network Specialists, but it's 1600 pages.... more than what average developer is actually ready to read....probably a version "ad usum delphini" would be helpful...
Fascinating quote: "the future of information technology lies not so much in bigger and faster computers, but in better ways of exchanging information between them".
The book seems to be really an awesome resource for Network Specialists, but it's 1600 pages.... more than what average developer is actually ready to read....probably a version "ad usum delphini" would be helpful...
Subscribe to:
Posts (Atom)