JWS, Web Services and Hibernate...

This is design question rather than an implementation question. I am building a web start application that will obtain it's data from web service calls. The web service calls will access the database via hibernate. I'm wondering if other people have done this and how they have solved the issue of passing the hibernate objects across the wire as XML. I wrote a prototype that makes the web service call which accesses the database via hibernate and I created DTO's and used the dozer library to populate the DTO's and pass them across the wire to my JWS client. This seems to work, but is fairly burdensome, in particular maintaining the DTO's and the dozer mapping is tedious as well as the fact that if I don't clip my hibernate object graph dozer will cause hibernate to dereference every relationship in the object graph and pass them all across the wire. Does anyone have a good solution for this problem? Has anyone successfully detached the hibernate objects themselves and passed them directly across the wire to the JWS client? Is there an accepted way of passing the data across the wire? Does anyone know of any white papers on such a subject? Thanks for any information you can provide.

Yes, as part of the jar files that make up the client, I have spring.jar, hibernate.jar, cglib.jar and asm.jar. The spring jar file contains the classes you need in order to call the methods on the server using HTTPInvoker. The hibernate, cglib and asm jar files are needed so that you don't get class not found exceptions when your hibernate enhanced classes are transmitted to the client. Obviously, you also need the same bean classes that you persist on the server to be on the client as well.
The client can then create new beans, modify them, and modify the "hibernate" collections so that when you send them to the server, hibernate will know their dirty state accordingly. All you need to do is get a session in your server method and hibernate will take care of the rest. Here is a snippet of a typical server method in my code that will create or update a Document object coming from the client. It's as simple as that. To return collections is as simple as returning the result of a criteria or hql query.
public Document saveDocument(Document document) throws RepositoryException
    Session session = getSession();
    try
        Date now = new Date();
        if (document.getId() == 0)
            document.setCreated(now);
        document.setLastModified(now);
        session.saveOrUpdate(document);
        return document;
    catch (HibernateException ex)
        throw convertHibernateAccessException(ex);
}You must take care about objects that have references to other objects that are not loaded. If you send them to the client and the client tries to access them, you will get an exception so you must either be aware of this or preload your objects with the related objects that you think you will need on the client. On the server, you don't need to worry about that because hibernate loads them as required (in the same session).
I suggest you read the spring docs on the HttpInvoker. There's a whole chapter on it and it's very easy to use. Just create an interface and an implementation. The client must include this interface so that it knows what methods it can call.
As I mentioned earlier, you need only change a couple of config lines to expose your methods via RMI, SOAP etc.

Similar Messages

  • Java Studio Creator -- web service -- spring -- hibernate -- database

    Hello,
    Has somebody already worked on an architecture 3 tier including : hibernate, spring, a deployment of the classes "spring" in wsdl (Web service).
    With Tomcat and Axis i deploy some web services (classes --> wsdl), with java studio creator i call the web service and the methods ...
    I would know if it possible to deploy some "spring" classes to have finally (wsdl) ?
    Thanks

    Heh heh heh....welcome to the club.
    There are <b>many</b> of us wanting to integrate Spring with JSC.
    I am working on doing this now, and plan to submit a quick tutorial on the subject to this forum once (if) I get it working.
    To start you off in the right direction though, here are some things I <b>think</b> you need to do.
    1) Make JSC Spring aware by adding the Spring.jar file in the Project Navigator (right click...Create New Library Reference).
    2) Add the package structure you need in Project Manager
    3) Add you Spring configuration file (application-context) in web/WEB-INF
    4) Add your ContextLoaderListener to web.xml.
    5) Get a servlet context and use it to get a WebApplicationContext
    6) Use that to retrieve the bean you need to work with

  • Web services and control characters

    Hi,
    We are using JAXWS and JAXB to create web services. We have a problem with our current data because it sometimes contains "bad" characters, such as control characters. Is there a nice way for us to remove these characters when creating the messages or when retrieving the data from the database? We use java persistence / hibernate to retrieve the data from the database.
    I would prefer a method that doesn't include having to "clean" each string manually...
    Thanks!

    hi, i�m doing something like you but in jbuilder that is another IDE, i don�t know if it is useful for you but i entered to the help of jbuilder and i wrote in the index "web services" and then i found a topic called : "export classes as webservices" and in that place i can see some steps to follow, may be in eclipse you can find something like this.

  • Web services and EJB3 @resource annotation

    This block of code works fine when NetworkViewBean is left as a @Stateless session bean.
    Once I have JDeveloper 10.1.3 production expose it as a web service, I can no longer call the Entity Manager @Resource.
    I always get a java.lang.NullPointerException returned.
    Any ideas?? thanks for your help!
    @WebService(name = "NetworkViewWS", serviceName = "NetworkViewWS")
    public class NetworkViewBean {
    @Resource
    private EntityManager em;
    public NetworkViewBean() { }
    public String getDeviceVendorModel(String name) {
    if (name == null || name.length()== 0) return "Null Input Parameter Specified";
    NetDevice N= null;
    try {
    N= (NetDevice)em.createNamedQuery("findByDeviceName").setParameter(0, name).getSingleResult();
    catch(Exception E) { E.printStackTrace();  return null; }
    return "Vendor= "+ N.getVendor()+ ", Model= "+ N.getModelNumber();

    Hi Joshua,
    The problem is that you are using a regular Java web service and in 10.1.3.0.0 we do not have support for dependency injection in the container in the web container i.e. you cannot use annotations such as EJB, Resource in any classes in the web container.
    You have two options:
    1. Lookup an EJB from regular Java web service (JSR-181)
    or
    2. Make your Web service as a EJB 3.0 web service
    Here what you can do to create an EJB 3.0 web service from JDev
    1. Create an EJB 3.0 Session bean with remote interface
    2. Change your remote interface to a web service end-point change @Remote to @WebService (import javax.jws.WebService)
    3. You do not have to use @WebMethod, we automatically expose all methods in the end-point interface in the web service
    4. You can inject EJB using @EJB
    5. Create a deployment profile for the EJB-jar and deploy the ejb-jar and the EJB will be exposed as a web service. The context-uri for the web service will be /ejb-jarName
    Hope this helps!
    -Debu Panda
    OC4J Product Management
    blog: http://debupanda.com
    -Debu

  • Diff b/w Web service and window service

    What is the difference between web service and window service, whether the both are same or not, Give some explain about that each one and give some examples also.

    An XML Web service is a component that implements program
    logic and provides functionality for diseparate
    applications. These applications use standard protocols,
    such as HTTP, XML, and SOAP, to access the functionality.
    XML Web services use XML-based messaging to send and
    receive data, which enables heterogeneous applications to
    interoperate with each other. You can use XML Web services
    to integrate applications that are written in different
    programming languages and deployed on different platforms.
    In addition, you can deploy XML Web services within an
    intranet as well as on the Internet. While the Internet
    brings users closer to organizations, XML Web services
    allow organizations to integrate their applications.
    A Windows service starts much before any user logs in to
    the system (if it has been setup to start at boot up
    process). A Windows service can also be setup in such a way
    that it requires a user to start it manually ? the ultimate
    customization!
    Windows services run as background processes. These
    applications do not have a user interface, which makes them
    ideal for tasks that do not require any user interaction.
    You can install a Windows service on any server or computer
    that is running Windows 2000, Windows XP, or Windows NT.
    You can also specify a Windows service to run in the
    security context of a specific user account that is
    different from the logged on user account or the default
    computer account. For example, you can create a Windows
    service to monitor performance counter data and react to
    threshold values in a database.

  • Pl/Sql web service and collections not working

    Hello
    I'm trying to create a web service from a function in a package which returns a collection. The creation of the web service and its deployment seem to work correctly. I do get the following warning :
    WARNING: OWS-00077 The Value Type class: pxWsLang.PamLanguagerecordBase does not have a valid JAVA Bean pattern
    but I don't think this is the source of the problem.
    When I try to test the web service using the endpoint in the wsdl I get the following answer in the browser:
    <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Header/><env:Body><env:Fault xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><faultcode>env:Server</faultcode><faultstring>Error creating target: pxWsLang.WsLangUser</faultstring><faultactor></faultactor></env:Fault></env:Body></env:Envelope>
    In the DOS window for the OC4J I get the following error :
    2006-11-15 09:21:25.852 ERROR OWS-04005 An error occurred for port: {http://pxWs
    Lang/WsLang.wsdl}wsLangSoapHttpPort: javax.xml.rpc.JAXRPCException: Error creati
    ng target: pxWsLang.WsLangUser.
    The PL/SQL code is as follows :
    Object:
    CREATE OR REPLACE TYPE PAM_LanguageRecord as OBJECT
    NR NUMBER(3),
    SYMBOL VARCHAR2(2)
    Collection:
    CREATE OR REPLACE Type PAM_LanguageTable as Table of PAM_LanguageRecord;
    Package body :
    create or replace package body PAM_TEST is
    function CursorTest return Pam_LanguageTable is
    Res_LangTable PAM_LanguageTable;
    cursor cur is select * from stc_languages;
    begin
    Res_LangTable := new PAM_LanguageTable();
    for Rec in cur loop
    Res_LangTable.Extend(1);
    Res_LangTable(cur%ROWCOUNT) := new PAM_LanguageRecord
    (Rec.NR,
    Rec.SYMBOL
    end loop;
    Return Res_LangTable;
    end;
    end;
    I'm using JDeveloper version 10.1.3.1.0.3984
    How can I get this to work ? (without using Apache Axis or other tools :-)
    Is it supposed to work ?
    Many Thanks
    Paul

    Hi,
    for the "error creating target" problem I found the solution here:
    [WS from a PL/SQL package]: Error creating target
    Hope this helps.
    Regards,
    Patrik

  • Web service and servlets in the same project...web.xml?

    Hello, I have a problem with my web service.
    I have a server, which displays a web service. I programmed this service with JAXRPC.
    I have a client, in another directory. I succeded in compiling, deploying and running the web service.
    The problem is that after I tried to integrate this service in an existing project. This project contains servlets. In these servlets, I'm using sessions.
    These servlets are on the same side as the server of the web service. Because of the implementation of my code, I'd like to use in the class that represents the server of the service, the same session as the one I'm using in the servlets.
    But of course, it's not working by itself. I know there's something to do with the web.xml files.
    The thing is that I created a web.xml file for the service, and another for the servlets.
    I was thinking of joining both of them in one xml file, but everything crashes then...
    Could someone tell me how to create a project with a web service and servlets, and mostly how to configure the xml file??
    Thanks for any help
    Philippe

    Hello, I have a problem with my web service.
    I have a server, which displays a web service. I programmed this service with JAXRPC.
    I have a client, in another directory. I succeded in compiling, deploying and running the web service.
    The problem is that after I tried to integrate this service in an existing project. This project contains servlets. In these servlets, I'm using sessions.
    These servlets are on the same side as the server of the web service. Because of the implementation of my code, I'd like to use in the class that represents the server of the service, the same session as the one I'm using in the servlets.
    But of course, it's not working by itself. I know there's something to do with the web.xml files.
    The thing is that I created a web.xml file for the service, and another for the servlets.
    I was thinking of joining both of them in one xml file, but everything crashes then...
    Could someone tell me how to create a project with a web service and servlets, and mostly how to configure the xml file??
    Thanks for any help
    Philippe

  • Quick questions on the topic of Web Services and EJB POJOs

    I have been reading about Web Services and the data types that are aloud as operation parameters and return types. I was wondering what the standard practice for return types; is it to use the Entity classes straight and customize the WSDL instead of letting the EE container do it (avoid cyclic problems in the schema that can occur when using entity 1-to-many and many-to-1 mappings) or; is it to off load the data into a DTO/VO/Bean and let the EE container take care of all the schema mapping for the WSDL? I look at the EE tutorial and bought a EE book both use very basic examples that do not include connecting to a database or using EJB3 for the data store.
    Thanks for any information

    bump

  • ASMX web service and The remote server returned an error: (500) Internal Server Error issue

    i have developed a very small web service and which is hosted along with our web site. our webservice url is
    http://www.bba-reman.com/Search/SearchDataIndex.asmx
    web service code
    namespace WebSearchIndex
    #region SearchDataIndex
    /// <summary>
    /// SearchDataIndex is web service which will call function exist in another library for part data indexing
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
    // [System.Web.Script.Services.ScriptService]
    public class SearchDataIndex : System.Web.Services.WebService
    //public AuthHeader ServiceAuth=null;
    public class AuthHeader : SoapHeader
    public string Username;
    public string Password;
    #region StartIndex
    /// <summary>
    /// this function will invoke CreateIndex function of SiteSearch module to reindex the data
    /// </summary>
    [WebMethod]
    public string StartIndex(AuthHeader auth)
    string strRetVal = "";
    if (auth.Username == "Admin" && auth.Password == "Admin")
    strRetVal = SiteSearch.CreateIndex(false);
    else
    SoapException se = new SoapException("Failed : Invalid credentials",
    SoapException.ClientFaultCode,Context.Request.Url.AbsoluteUri,new Exception("Invalid credentials"));
    throw se;
    return strRetVal;
    #endregion
    #endregion
    when i was calling that web service from my win apps using
    HttpWebRequest
    class then getting error The remote server returned an error: (500) Internal Server Error
    here is code of my win apps from where i am calling web service
    string strXml = "";
    strXml = "<s:Envelope xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'><s:Body><StartIndex xmlns='http://tempuri.org/' xmlns:i='http://www.w3.org/2001/XMLSchema-instance'><auth><Username>joy</Username><Password>joy</Password></auth></StartIndex></s:Body></s:Envelope>";
    string url = "http://www.bba-reman.com/Search/SearchDataIndex.asmx";
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
    req.Method = "POST";
    req.ContentType = "text/xml";
    req.KeepAlive = false;
    req.ContentLength = strXml.Length;
    StreamWriter streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
    streamOut.Write(strXml);
    streamOut.Close();
    StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream());
    string strResponse = streamIn.ReadToEnd();
    streamIn.Close();
    i am just not being able to understand when this line execute
    StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream());
    then getting the error The remote server returned an error: (500) Internal Server Error
    not being able to understand where i made the mistake. mistake is in the code of web service end or in calling code?
    help me to fix this issue. thanks

    Hi Mou,
    I just tried your win app code about calling web service, but failed. I got the 500 error after I called your service:
    The error message I quoted from Fiddler:
    <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><soap:Fault><faultcode>soap:Client</faultcode><faultstring>System.Web.Services.Protocols.SoapException: Failed : Invalid credentials ---&gt; System.Exception: Invalid credentials
    --- End of inner exception stack trace ---
    at BBAReman.WebSearchIndex.SearchDataIndex.StartIndex(AuthHeader auth)</faultstring><faultactor>http://www.bba-reman.com/Search/SearchDataIndex.asmx</faultactor><detail /></soap:Fault></soap:Body></soap:Envelope>
    I am not totally sure that error occurred by the authentication. But I suggest you can try to add this service into your project using this method below:
    1.right click the Reference and select Add Service Reference
    2.input your service link and click "Go"
    And you can use this service as the following:
    private async void callService()
    ServiceReference1.SearchDataIndexSoapClient client =new ServiceReference1.SearchDataIndexSoapClient();
    var Str= await client.StartIndexAsync(new ServiceReference1.AuthHeader { Username = "Admin", Password = "Admin" });
    Please try it.
    Regards,
    Will
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • How to connect to external web service and convert XML to a table

    Hi experts,
      I need to connect to external/non-SAP web service and convert XML in that site to a SAP table?
    Is there a function call(SE37) to do this? Is it a must for me to install AS JAVA or PI and configure enterprise service? Please provide a link for me to retrieve relevant infomation, thx.

    No, you don't need PI or the Java stack for this.  You can create an ABAP proxy using the WSDL file for the web service and call the web service using the proxy class in an ABAP program.  You can transform the XML response to internal tables/structures/variables using a transformation template that you create.

  • SQL Server 2008 Reporting Project - Invoke/Consume Web Service and Return Dataset in C# Code-Behind

    Hello,
    I have a Visual Studio 2010 C# class with a method that invokes/consumes a web service and returns an XML dataset. I am traversing through the parent/child nodes and parsing out the data then inserting it into a SQL Server 2008 R2 table for a join within
    another stored procedure. 
    Instead of using a 3rd party API to generate the PDF for this data, I am creating an SSRS report. The formatting will be easier and I can do a RenderFormat directly to PDF.
    Can I expect to be able to transfer the code-behind method to this report and have it be able to work with the web service the same way? It is a SOAP-based web service returning parent nodes and two levels of nested child nodes.
    I have also been researching the approach of calling the web service in the same stored procedure that is currently querying the physical tables (which is used to populate a gridview and PDF) but it looks like it may only be possible with a CLR stored procedure.
    Is it possible to implement a CLR stored procedure within an SSRS report? 
    Hope this makes sense. Any help, suggestion or point in the right direction would be greatly appreciated.
    Thanks,
    Buster

    Hi Buster,
    SSRS supports web service data source, we can call the SOAP-based web service in SSRS report directly. Then, we can use custom code in SSRS to parse the XML data. However, we won’t be able to join another data in SQL Server database.
    Reference:http://technet.microsoft.com/en-us/library/aa964129(v=sql.90).aspx#repservxmlds_topic3
    We cannot implement a CLR stored procedure within an SSRS report directly. In order to execute the CLR store procedure in a SSRS report, we have to execute it as text using the following code:
    Exec <stored procedure name>
    Reference:
    http://dotnetslackers.com/Community/blogs/bmains/archive/2009/01/15/executing-a-clr-stored-procedure-in-reporting-services.aspx
    Hope this helps.
    Regards,
    Alisa Tang
    Alisa Tang
    TechNet Community Support

  • Need advice about web services and Java beans

    Hi
    I am very new to web services and to Java beans as well.
    I am trying to understand if and how a web service can use functionality I have in a Java bean. I couldn't find any documentation I can use.
    For example:
    InitialContext ic = new InitialContext();
    Adder adder = (Adder) ic.lookup("ejb/AdderJNDI");In a EJB client project (I'm working with Eclipse) if I add the EJB project to the build path, the Adder interface is recognized.
    Theoritacally I thought I can do the same in a web service server project, but the Adder interface is not recognized.
    Is there something I can read to understand how I need to use the EJB or implement the web service?
    Many thanks
    Sigal

    Okay....I think I made some errors with the original scenario:
    It basically comes down to this....I think. OCS Calendar has a set of Java classes and methods that provide an abstraction for their web services interface. I know how to create something to use these classes using an IDE like JDeveloper, but I'm not sure how that would work with HTML DB.
    I've noticed that the SQL Workshop has a place for Java sources and classes, and I've heard mentions of PL/SQL wrapping. Is there a way to import classes into an HTML DB workspace, wrap 'em up, and access them via PL/SQL?
    Thanks again,
    Jonathan

  • Load balancing SMA web service and SMA end point URL

    Hi,
    We have set up the recommended 3 servers with Azure Pack, SMA Web Service and Runbook Worker.  We are now wanting to configure the Azure pack portal to setup the SMA endpoint url for the web service.  Before we do that, we are assuming we should
    load balance the web services to answer on 1 url (ie, smaws.domainname.com).
    1. Is there any guidance or things to consider when load balancing the 3 web services to answer to 1 url.  We will probably use f5 since that is what we use.
    2. The end point url that we configure for Azure Pack automation should be this load balanced URL correct?
    3. Should we have the Azure pack installed on just one of the servers or all 3.  We did all 3 but it seems like server2 and 3 just redirect to 1 anyway so I am assuming the URL for Azure pack is stored in a db somewhere.
    4. Are there any other components of SMA/Azure Pack that should also be load balanced?
    Thanks
    Thanks Lance

    So in this case you need to register the SMA Runbook Workers (do this on machine 1):
    $webService
    = "https://localhost"
    $workers
    = (Get-SmaRunbookWorkerDeployment
    -WebServiceEndpoint
    $webService).ComputerName
    if($workers
    -isnot [system.array]) {$workers
    = @($workers)}
    $workers
    += "MachineName2"
    $workers += "MachineName3"
    New-SmaRunbookWorkerDeployment
    -WebServiceEndpoint
    $webService -ComputerName
    $workers

  • [jaxrpc] defining web services and WSDL spec

    Greetings,
    I'm starting in JAXRPC web service's concepts and its WSDL specification. After I tested some samples from the jaxrpc tutorial, I tried to make my custom web service, but, I have problems when I deploy the web service and I tried to see in my browser the endpoint url - I got a internal server exception! I pick up the hello sample, I added to it my custom core sample web service functionality - using the same operations, the same signatures methods - and it worked fine!!
    So, what' is wrong? The main difference between them is that I have differents configuration files for xrpcc that will give a wsdl files for each one. Whats changes? The service name? The interface/package name? Is there some kind of limitation in the package name convention with the service names beyound the basic ones in the xrpcc (jaxrpc) specification?
    thanks,
    Pedro Salazar.

    I upgraded webservices developer pack to 1.0 version (final) and I solved my problems!
    Pedro Salazar

  • Web Services and Internal Tables.

    Hi.
    In the next days I will need to create a program to consume a Web Service that is going to return data like an internal table, I mean...
    Field1a | Field2a | Field3a
    Field1b | Field2b | Field3b
    Field1c | Field2c | Field3c
    Do you have any ABAP example of consuming a Web Service and receiving data into an internal table?
    Thanx in advanced.
    Edited by: urjose on Jun 19, 2008 8:47 PM

    Hello,
    Maybe this links will give you a hint.
    /people/thomas.jung3/blog/2005/01/05/develop-a-web-service-that-sends-an-email--in-abap
    http://help.sap.com/saphelp_nw04/helpdata/en/e9/ae1b9a5d2cef4ea4b579f19d902871/content.htm
    Bye
    Gabriel P.-

Maybe you are looking for