Sunday, June 3, 2007

Web Services and Oracle TopLink

If you are Oracle TopLink developer and want to access persistence layer through Web Service interface, hopefully you will find an answer in this post. Developed sample - WSTopLink.zip, doesn't provide user interface, it will be tested on Oracle Application Server. I will post how to use Web Services in Oracle ADF Faces in my future posts. Current sample is based on standard HR schema and provides functionality of querying for all or one particular country. Below I will provide main aspects I have noticed, when developing access to TopLink persistence layer through Web Service.

1. You should create Oracle TopLink entity objects in the same way, like you create them always. But, when creating EJB Session Bean don't forget to include Web Service Endpoint interface.


2. When creating Java Web Service, don't check 'Autogenerate Service Endpoint Interface'. It's because endpoint interface is already generated and is represented by EJB Session Bean.


3. In the step 5 of 8 in Java Web Service dialog you can select methods accessible through Web Service. In developed sample I have enabled access only to two methods - findAllCountries and findCountryByName.


4. Finally, JDeveloper generates all needed files. Generated WSDL document should look similar in Design view:


5. Developed application structure in Application navigator window:


6. One important thing - WAR Deployment Profile Properties dialog. Deployment profile for Web Service is generated automatically, but Oracle TopLink configuration files aren't included into it by default. So, don't forget to include them.


7. Access to persistence layer through Web Service is done, it's time to test it. I have deployed developed application to Oracle Application Server and have tested using standard interface provided by AS.


8. Let's press 'Invoke' button - information about all countries available in database table will be returned.


9. I have defined two operations to be available. Second operation accepts parameter and provides information only for country specified in that parameter. For example, if parameter value is set to Albania and 'Invoke' button is pressed, information only for that country will be returned.


Result:

3 comments:

Anonymous said...

Hey,

Nice clean post, thanks for that. I work in the JDeveloper Webservices team and would be interested in any feedback, good or bad, you might have.

It would be interesting to try this example using the JDeveloper 11 preview and an annotation only webservice for comparison. Since you were using 10.1.3 of course you were using the oc4j tester but did you know in 11 we have one built into the JDeveloper? Have you had time to play with the preview?

Thanks,

Gerard Davison
Gerard.Davison@oracle.com

Andrej Baranovskij said...

Hi Gerard,

Thanks for feedback. Yes I have played with JDeveloper 11 and it's Web Services development features. And I have some good and bad feedback to provide. I will send it to you during this week.

Regards,
Andrejus

Anonymous said...

Hello Andrejus!
Please help me.

I created webservice from ejb session bean as yours (but with message type - documnet literal), it works good. And i created webservice(message format - document literal) from WSDL file (based on my XSD file) in JDEV 11g.
Both webservie are JAX-RCP.

I neet to have type from XSD file in my EJB based webservie (like yours, but with message type - document literal).

How to do it correctly?

Sorry my english is not very good.
Thanks for your blog, it's very helpful.
Help me i really need it.