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/