directory-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Yiannis Mavroukakis <imavrouka...@gameaccount.com>
Subject Re: [ApacheDS] Using LdifEntry with a ModifyOperationContext
Date Wed, 18 Mar 2009 18:07:49 GMT
I am a fool, I should have googled this a bit further..it's the Change 
Sequence Number..

Yiannis Mavroukakis wrote:
> Or maybe there is!..Almost a result, I am doing this now,
>
>  List<Modification> modItems = ServerEntryUtils.toServerModification(
>                                ldifEntry.getModificationItemsArray( ) ,
>                                directoryService.getRegistries( 
> ).getAttributeTypeRegistry( ) );
>                       modOp.modify( ldifEntry.getDn( ) , modItems 
> ,clusterBypass );
>
> Modification: replace
> , attribute :     entryCSN: '0x32 0x30 0x30 0x39 0x30 0x33 0x31 0x31 
> 0x31 0x37 0x33 0x31 0x33 0x31 0x2E 0x30 ...'
>
> It now blows up with the following exception,
>
> javax.naming.NoPermissionException: Cannot modify the attribute 
> 'entryCSN']
>
> Why is it not possible to modify this? Is this a per-server unique 
> value? And if so I assume it won't hurt if I don't include it in the 
> Modification List in ldifEntry?
>
> Thanks guys,
>
> Yiannis.
>
> Yiannis Mavroukakis wrote:
>> Ouch I just realised this won't really ever 
>> work..ModifyOperationContext requires a ServerModification item for 
>> it to work, which in turns requires ServerAttribute to be constructed 
>> and I can't get any of them out of an Ldif object in the context of a 
>> Modify operation...double damn!
>>
>> Y.
>>
>> Yiannis Mavroukakis wrote:
>>>
>>>
>>> Emmanuel Lecharny wrote:
>>>> Yiannis Mavroukakis wrote:
>>>>>
>>>>> Hello everyone :-)
>>>>>
>>>>> I've got a problem trying to use LdifEntry with 
>>>>> ModifyOperationContext. If you remember from
>>>>> previous emails, I'm using LdifEntry because it can be serialized. 
>>>>> I'm stuffing my Modification
>>>>> objects in the LdifEntry object like so
>>>>>
>>>>>        for( AttributeType attributeType : list )
>>>>>        {
>>>>>            EntryAttribute entryAttribute = ( (ServerAttribute) entry
>>>>>                    .get( attributeType ) ).toClientAttribute( );
>>>>>            ldiff.addAttribute( entryAttribute );
>>>>>            if( changeType.equals( ChangeType.Modify ) )
>>>>>            {
>>>>>                ClientModification mod = new ClientModification(
>>>>>                        ModificationOperation.REPLACE_ATTRIBUTE ,
>>>>>                        entryAttribute );
>>>>>                ldiff.addModificationItem( mod );
>>>>>            }
>>>>>        }
>>>>>
>>>>> This serializes fine, however ModifyOperationContext.modify() 
>>>>> gives me a
>>>>>
>>>>> java.lang.ClassCastException: 
>>>>> org.apache.directory.shared.ldap.entry.client.DefaultClientAttribute

>>>>> cannot be cast to 
>>>>> org.apache.directory.server.core.entry.ServerAttribute
>>>>>
>>>>> when I pass the LdifEntry object modification list to it because 
>>>>> it expects ServerAttributes and not ClientAttributes and as far as 
>>>>> I can remember, ServerAttributes are not serializable (?). Is 
>>>>> there any way I can get around this requirement?
>>>> Just store the initial entry.getAttribute() into the modification :
>>>>
>>>>       for( AttributeType attributeType : list )
>>>>       {
>>>>           EntryAttribute entryAttribute = ( (ServerAttribute) entry
>>>>                   .get( attributeType ) ).toClientAttribute( );
>>>>           ldiff.addAttribute( entryAttribute );
>>>>           if( changeType.equals( ChangeType.Modify ) )
>>>>           {
>>>>               ClientModification mod = new ClientModification(
>>>>                       ModificationOperation.REPLACE_ATTRIBUTE ,
>>>>                       entry.get( attributeType ) 
>>>> );                  <----------------------
>>>>               ldiff.addModificationItem( mod );
>>>>           }
>>>>       }
>>>>
>>>> It should work.
>>>>
>>>>
>>> Whoops :-)
>>>
>>> 81d:36
>>> java.lang.IllegalStateException: Cannot use standard serialization 
>>> for a ServerAttribute
>>>        at 
>>> org.apache.directory.server.core.entry.DefaultServerAttribute.writeExternal(DefaultServerAttribute.java:1190)

>>>
>>>        at 
>>> java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1421) 
>>>
>>>

Mime
View raw message