Just an update : The NPE in PassByValueInterceptor seems to be resolved by adding couple missing dependencies such as databinding-sdo.
I'm still having some other issues (looks like classLoader related)... but I should be able to commit a new version of the sample with the spring layer later tonight or early tomorrow. Thanks On Sat, Aug 9, 2008 at 4:18 PM, Luciano Resende <[EMAIL PROTECTED]> wrote: > BTW, the sample is available at : > > https://svn.apache.org/repos/asf/tuscany/sandbox/lresende/sca/samples/organization-das > > On Sat, Aug 9, 2008 at 4:14 PM, Luciano Resende <[EMAIL PROTECTED]> wrote: >> Hi Abraham >> >> From your initial post, looks like you are having two problems : >> >> - Using DAS, a call to applyChanges succedds, but the account >> row does not get updated. >> - When you use SCA to create a DAS component, you are having a >> PassByValueInterceptor exception >> >> I have committed a organization-das sample, all based on the >> application you provided under TUSCANY-2525, under svn revision >> 684376. >> >> Note that I'm building the sample im multiple steps, isolating the >> areas involved in each issue. Also, note that I'm using derby, but >> changing back to Oracle should be easy, just change the >> ConnectionHelper to create the proper Oracle connection. >> >> Right now, I have the DAS piece working ok, and it would be good if >> you could verify this in your Oracle environment by running the >> OrganizationTestCase. While I wait for your feedback, I'm going to >> move to incorporate the SCA into the sample. >> >> Thanks >> >> >> On Mon, Aug 4, 2008 at 12:51 PM, Abraham Washington >> <[EMAIL PROTECTED]> wrote: >>> thanks all for the help. created issue tuscany-2525 >>> >>> ----- Original Message ---- >>> From: Luciano Resende <[EMAIL PROTECTED]> >>> To: [email protected] >>> Sent: Sunday, August 3, 2008 11:09:49 PM >>> Subject: Re: das npe in PassByValueInterceptor >>> >>> On Tue, Jul 29, 2008 at 1:05 PM, Jean Madson <[EMAIL PROTECTED]> wrote: >>>> For sure, it´s really very interesting. >>>> Can you put as an attachment the code from the class that implements >>>> findOrganization and >>>> the class code that implements the testRunner? >>>> Who knows someone else could help us... >>> >>> Yes, please raise a JIRA with your code or a unit test that allows us >>> to reproduce your problem and we can definetly take a look and provide >>> some help. >>> >>>> >>>> -- >>>> Jean Madson >>>> >>>> >>>> >>>> 2008/7/29 Abraham Washington <[EMAIL PROTECTED]> >>>>> >>>>> here's more info. >>>>> >>>>> >>>>> >>>>> this is from findOrganization >>>>> >>>>> findOrganization data graph -> >>>>> [EMAIL PROTECTED] (resourceSet: >>>>> [EMAIL PROTECTED] >>>>> >>>>> [EMAIL PROTECTED] >>>>> uri='root.xml', >>>>> [EMAIL PROTECTED] >>>>> uri='http:///org.apache.tuscany.das.rdb/das', >>>>> [EMAIL PROTECTED] >>>>> uri='http:///org.apache.tuscany.das.rdb/das', >>>>> [EMAIL PROTECTED] >>>>> uri='change-summary.xml']) >>>>> >>>>> findOrganization data graph root -> >>>>> [EMAIL PROTECTED] (eClass: >>>>> [EMAIL PROTECTED] (name: DataGraphRoot) >>>>> (instanceClassName: null) (abstract: false, interface: false)) >>>>> >>>>> >>>>> >>>>> // this debug came from the test runner >>>>> >>>>> data graph -> null >>>>> >>>>> account -> [EMAIL PROTECTED] >>>>> (eClass: [EMAIL PROTECTED] (name: ACCOUNT) >>>>> (instanceClassName: null) (abstract: false, interface: false)) >>>>> >>>>> Testrunner accountName -> TestNode1 >>>>> >>>>> >>>>> >>>>> update account now... >>>>> >>>>> java.lang.NullPointerException >>>>> >>>>> at org.apache.tuscany.das.rdb.impl.ApplyChangesCommandImpl.execute( >>>>> >>>>> ApplyChangesCommandImpl.java:58) >>>>> >>>>> >>>>> the call to: >>>>> >>>>> root. >>>>> >>>>> getDataGraph() >>>>> >>>>> >>>>> >>>>> is what's outputting: data graph -> null >>>>> >>>>> >>>>> >>>>> seems odd that the call works fine in the operation findOrganization, but >>>>> it's null inside the testRunner >>>>> >>>>> >>>>> >>>>> thanks >>>>> >>>>> >>>>> >>>>> ----- Original Message ---- >>>>> From: Jean Madson <[EMAIL PROTECTED]> >>>>> To: [email protected] >>>>> Sent: Tuesday, July 29, 2008 10:16:20 AM >>>>> Subject: Re: das npe in PassByValueInterceptor >>>>> >>>>> It's exactly what you did for dataGraph, showing its internal >>>>> representation. >>>>> -- >>>>> Jean Madson >>>>> >>>>> >>>>> >>>>> 2008/7/29 Abraham Washington <[EMAIL PROTECTED]> >>>>>> >>>>>> what do you mean by dump? >>>>>> >>>>>> ----- Original Message ---- >>>>>> From: Jean Madson <[EMAIL PROTECTED]> >>>>>> To: [email protected] >>>>>> Sent: Tuesday, July 29, 2008 9:04:06 AM >>>>>> Subject: Re: das npe in PassByValueInterceptor >>>>>> >>>>>> Can you dump "account"? So we can see what is inside it... >>>>>> >>>>>> >>>>>> -- >>>>>> Jean Madson >>>>>> http://bit-zen.blogspot.com/ >>>>>> MSN: [EMAIL PROTECTED] >>>>>> ----- >>>>>> HI LI KO KEN TEN >>>>>> Be grass, don't eat grass >>>>>> "É preciso esvaziar a xícara para ver o fundo tal como ele é, caso >>>>>> contrário, >>>>>> o fundo parecerá turvo, e idéias precipitadas acerca do que seja o >>>>>> fundo límpido emergirão." >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> 2008/7/29 Abraham Washington <[EMAIL PROTECTED]> >>>>>>> >>>>>>> this is where it's failing: >>>>>>> >>>>>>> >>>>>>> >>>>>>> if (!root.equals(root.getDataGraph().getRootObject())) { >>>>>>> throw new RuntimeException("'root' argument must be the root >>>>>>> of the datagraph"); >>>>>>> } >>>>>>> >>>>>>> >>>>>>> in org.apache.tuscany.das.rdb.impl.ApplyChangesCommandImpl at line 58 >>>>>>> (looking at the source code). i printed out the same thing and can >>>>>>> reproduce the problem. >>>>>>> >>>>>>> the problem is the call to root.getDataGraph() is returning null, thus >>>>>>> the call to root.getDataGraph().getRootObject() throws the npe. >>>>>>> >>>>>>> when i make the call to find the organization, the dataGraph is null as >>>>>>> well. here's my call to findOrganization: >>>>>>> >>>>>>> >>>>>>> public >>>>>>> >>>>>>> DataObject findOrganization(String id) { >>>>>>> >>>>>>> DataObject root = >>>>>>> >>>>>>> null >>>>>>> ; >>>>>>> >>>>>>> InputStream in = >>>>>>> >>>>>>> getClass().getClassLoader().getResourceAsStream( >>>>>>> >>>>>>> "dasConfiguration.xml"); >>>>>>> >>>>>>> DAS das = DAS. >>>>>>> >>>>>>> FACTORY.createDAS(in, getConnection()); >>>>>>> >>>>>>> Command read = das.getCommand( >>>>>>> >>>>>>> "getAccountByID"); >>>>>>> >>>>>>> read.setParameter(1, Integer.valueOf(id)); >>>>>>> >>>>>>> root = read.executeQuery(); >>>>>>> >>>>>>> DataObject account = root.getDataObject( >>>>>>> >>>>>>> "ACCOUNT[1]"); >>>>>>> >>>>>>> System. >>>>>>> >>>>>>> out.println("account dataGraph -> " + account.getDataGraph()); >>>>>>> >>>>>>> System. >>>>>>> >>>>>>> out.println("account dataObject -> " + >>>>>>> account.getDataGraph().getRootObject()); >>>>>>> >>>>>>> return account; >>>>>>> >>>>>>> } >>>>>>> >>>>>>> >>>>>>> >>>>>>> Output: >>>>>>> >>>>>>> >>>>>>> >>>>>>> data graph -> null >>>>>>> >>>>>>> >>>>>>> then a npe this thrown on the call to: >>>>>>> System.out.println("account dataObject -> " + >>>>>>> account.getDataGraph().getRootObject()); >>>>>>> >>>>>>> >>>>>>> >>>>>>> why would the dataGraph be null ? >>>>>>> >>>>>>> >>>>>>> >>>>>>> thx abe >>>>>>> >>>>>>> >>>>>>> >>>>>>> ----- Original Message ---- >>>>>>> From: Jean Madson <[EMAIL PROTECTED]> >>>>>>> To: [email protected] >>>>>>> Sent: Tuesday, July 29, 2008 7:31:18 AM >>>>>>> Subject: Re: das npe in PassByValueInterceptor >>>>>>> >>>>>>> It throws NullPointerException. >>>>>>> Does the organizationService variable have a valid reference to the >>>>>>> service? >>>>>>> Try to test this. >>>>>>> You can try to do a dump from organizationService. >>>>>>> Perhaps, organizationService can't find an organization with that id, >>>>>>> thus, returning a null reference. >>>>>>> Check this too. >>>>>>> >>>>>>> -- >>>>>>> Jean Madson >>>>>>> >>>>>>> >>>>>>> >>>>>>> 2008/7/28 Abraham Washington <[EMAIL PROTECTED]> >>>>>>>> >>>>>>>> i put the call to das.applyChanges in a try/catch block which gives a >>>>>>>> little more info: >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> java.lang.NullPointerException >>>>>>>> >>>>>>>> at org.apache.tuscany.das.rdb.impl.ApplyChangesCommandImpl.execute( >>>>>>>> >>>>>>>> ApplyChangesCommandImpl.java:58) >>>>>>>> >>>>>>>> at org.apache.tuscany.das.rdb.impl.DASImpl.applyChanges( >>>>>>>> >>>>>>>> DASImpl.java:310) >>>>>>>> >>>>>>>> at org.soa.services.OrganizationDataServiceImpl.updateOrganization( >>>>>>>> >>>>>>>> OrganizationDataServiceImpl.java:188) >>>>>>>> >>>>>>>> at org.soa.services.OrganizationServiceImpl.updateOrganization( >>>>>>>> >>>>>>>> OrganizationServiceImpl.java:60) >>>>>>>> >>>>>>>> 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:585) >>>>>>>> >>>>>>>> at >>>>>>>> org.apache.tuscany.sca.implementation.spring.SpringInvoker.doInvoke( >>>>>>>> >>>>>>>> SpringInvoker.java:100) >>>>>>>> >>>>>>>> at org.apache.tuscany.sca.implementation.spring.SpringInvoker.invoke( >>>>>>>> >>>>>>>> SpringInvoker.java:116) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.apache.tuscany.sca.core.databinding.wire.PassByValueInterceptor.invoke( >>>>>>>> >>>>>>>> PassByValueInterceptor.java:108) >>>>>>>> >>>>>>>> at org.apache.tuscany.sca.binding.sca.impl.SCABindingInvoker.invoke( >>>>>>>> >>>>>>>> SCABindingInvoker.java:61) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.apache.tuscany.sca.core.databinding.wire.PassByValueInterceptor.invoke( >>>>>>>> >>>>>>>> PassByValueInterceptor.java:108) >>>>>>>> >>>>>>>> at org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke( >>>>>>>> >>>>>>>> JDKInvocationHandler.java:286) >>>>>>>> >>>>>>>> at org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke( >>>>>>>> >>>>>>>> JDKInvocationHandler.java:154) >>>>>>>> >>>>>>>> at $Proxy7.updateOrganization(Unknown Source) >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> here's line 63 from my test runner: >>>>>>>> >>>>>>>> >>>>>>>> commonj.sdo.DataObject account = >>>>>>>> organizationService.getOrganization(organizationId >>>>>>>> >>>>>>>> ); >>>>>>>> >>>>>>>> organizationService.updateOrganization(account); >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> line 63 is organizationService.updateOrganization(organizationId); >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> thx...hope this helps...all i'm doing is grabbing the org (just a >>>>>>>> simple find) in getOrganization, then passing that org to update. no >>>>>>>> changes are made. maybe i'm not closing a connection ? >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> ----- Original Message ---- >>>>>>>> From: Jean Madson <[EMAIL PROTECTED]> >>>>>>>> To: [email protected] >>>>>>>> Sent: Monday, July 28, 2008 4:37:34 PM >>>>>>>> Subject: Re: das npe in PassByValueInterceptor >>>>>>>> >>>>>>>> OK, Abraham. >>>>>>>> It seems like an invalid reference object in line 63. >>>>>>>> What is there? >>>>>>>> Can you put here a numbered excerpt of the code around 63 line? >>>>>>>> >>>>>>>> >>>>>>>> 2008/7/28 Abraham Washington <[EMAIL PROTECTED]> >>>>>>>>> >>>>>>>>> hi jean...that is the entire stack trace. i'm running within eclipse >>>>>>>>> and that's all that's given. i'm using oracle if that helps. >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> update account now... >>>>>>>>> >>>>>>>>> Exception in thread "main" >>>>>>>>> >>>>>>>>> java.lang.NullPointerException >>>>>>>>> >>>>>>>>> at >>>>>>>>> >>>>>>>>> org.apache.tuscany.sca.core.databinding.wire.PassByValueInterceptor.copyFault( >>>>>>>>> >>>>>>>>> PassByValueInterceptor.java:125) >>>>>>>>> >>>>>>>>> at >>>>>>>>> >>>>>>>>> org.apache.tuscany.sca.core.databinding.wire.PassByValueInterceptor.invoke( >>>>>>>>> >>>>>>>>> PassByValueInterceptor.java:115) >>>>>>>>> >>>>>>>>> at org.apache.tuscany.sca.binding.sca.impl.SCABindingInvoker.invoke( >>>>>>>>> >>>>>>>>> SCABindingInvoker.java:61) >>>>>>>>> >>>>>>>>> at >>>>>>>>> >>>>>>>>> org.apache.tuscany.sca.core.databinding.wire.PassByValueInterceptor.invoke( >>>>>>>>> >>>>>>>>> PassByValueInterceptor.java:108) >>>>>>>>> >>>>>>>>> at >>>>>>>>> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke( >>>>>>>>> >>>>>>>>> JDKInvocationHandler.java:286) >>>>>>>>> >>>>>>>>> at >>>>>>>>> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke( >>>>>>>>> >>>>>>>>> JDKInvocationHandler.java:154 >>>>>>>>> ) >>>>>>>>> >>>>>>>>> at $Proxy7.updateOrganization(Unknown Source) >>>>>>>>> >>>>>>>>> at helloworld.OrganizationServiceCompositeRunner.main( >>>>>>>>> >>>>>>>>> OrganizationServiceCompositeRunner.java:63) >>>>>>>>> >>>>>>>>> let me know if you need more info...abe >>>>>>>>> >>>>>>>>> ----- Original Message ---- >>>>>>>>> From: Jean Madson <[EMAIL PROTECTED]> >>>>>>>>> To: [email protected] >>>>>>>>> Sent: Monday, July 28, 2008 3:52:49 PM >>>>>>>>> Subject: Re: das npe in PassByValueInterceptor >>>>>>>>> >>>>>>>>> Can you put here all stack trace? >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> 2008/7/28 Abraham Washington <[EMAIL PROTECTED]> >>>>>>>>>> >>>>>>>>>> hi, i'm trying to get DAS to work for my service. i'm able to >>>>>>>>>> query >>>>>>>>>> and get results back no problem. below is my code for updating. if >>>>>>>>>> i take >>>>>>>>>> out the call to account.set(....), then the apply works (but there >>>>>>>>>> were no >>>>>>>>>> changes to the DataObject). with the account.set(...) call, the >>>>>>>>>> exception >>>>>>>>>> is thrown. ideas? thx abe >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Command read = das.getCommand( >>>>>>>>>> >>>>>>>>>> "getAccountByID"); >>>>>>>>>> >>>>>>>>>> read.setParameter(1, Integer.valueOf(organizationId)); >>>>>>>>>> >>>>>>>>>> root = read.executeQuery(); >>>>>>>>>> >>>>>>>>>> DataObject account = root.getDataObject( >>>>>>>>>> >>>>>>>>>> "ACCOUNT[1]"); >>>>>>>>>> >>>>>>>>>> System. >>>>>>>>>> >>>>>>>>>> out.println("accountName before change -> " + >>>>>>>>>> account.getString("ACCOUNT_NAME")); >>>>>>>>>> >>>>>>>>>> account.set( >>>>>>>>>> >>>>>>>>>> "ACCOUNT_NAME", "TestAccount"); >>>>>>>>>> >>>>>>>>>> System. >>>>>>>>>> >>>>>>>>>> out.println("apply changes..."); >>>>>>>>>> >>>>>>>>>> das.applyChanges(root); >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> apply changes... >>>>>>>>>> >>>>>>>>>> Exception in thread "main" >>>>>>>>>> >>>>>>>>>> java.lang.NullPointerException >>>>>>>>>> >>>>>>>>>> at >>>>>>>>>> >>>>>>>>>> org.apache.tuscany.sca.core.databinding.wire.PassByValueInterceptor.copyFault( >>>>>>>>>> >>>>>>>>>> PassByValueInterceptor.java:125) >>>>>>>>>> >>>>>>>>>> at >>>>>>>>>> >>>>>>>>>> org.apache.tuscany.sca.core.databinding.wire.PassByValueInterceptor.invoke( >>>>>>>>>> >>>>>>>>>> PassByValueInterceptor.java:115) >>>>>>>>>> >>>>>>>>>> at org.apache.tuscany.sca.binding.sca.impl.SCABindingInvoker.invoke( >>>>>>>>>> >>>>>>>>>> SCABindingInvoker.java:61) >>>>>>>>>> >>>>>>>>>> at >>>>>>>>>> >>>>>>>>>> org.apache.tuscany.sca.core.databinding.wire.PassByValueInterceptor.invoke( >>>>>>>>>> >>>>>>>>>> PassByValueInterceptor.java:108) >>>>>>>>>> >>>>>>>>>> at >>>>>>>>>> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke( >>>>>>>>>> >>>>>>>>>> JDKInvocationHandler.java:286) >>>>>>>>>> >>>>>>>>>> at >>>>>>>>>> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke( >>>>>>>>>> >>>>>>>>>> JDKInvocationHandler.java:154) >>>>>>>>>> >>>>>>>>>> at $Proxy7.updateOrganization(Unknown Source) >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>> >>>> >>>> >>>> >>>> >>> >>> >>> >>> -- >>> Luciano Resende >>> Apache Tuscany Committer >>> http://people.apache.org/~lresende >>> http://lresende.blogspot.com/ >>> >>> >> >> >> >> -- >> Luciano Resende >> Apache Tuscany Committer >> http://people.apache.org/~lresende >> http://lresende.blogspot.com/ >> > > > > -- > Luciano Resende > Apache Tuscany Committer > http://people.apache.org/~lresende > http://lresende.blogspot.com/ > -- Luciano Resende Apache Tuscany Committer http://people.apache.org/~lresende http://lresende.blogspot.com/
