Thanks Tony, 

I tried the same and it works well for me if i am doing all this in rave-core 
itself but not as overlay. Can you share the overlay part of you project pom? 

Raminder

On Feb 17, 2012, at 9:36 AM, Carlucci, Tony wrote:

> Hi Raminder, we've been working on extending the User for our internal 
> implementation.  It's still in the early stages but here is what I've done so 
> far (all code is done in our overlay):
> 
> 1) Create a Custom user:
> 
> package org.custom.portal.model;
> 
> @Entity
> public class CustomUser extends org.apache.rave.model.User {
>       @Transient
>                private String employeeNumber; 
>       @Transient
>       private String jobTitle;
>       @Transient
>       private String building;
>       ...
>                // other custom user attributes
> }
> 
> Our custom fields are marked Transient as they are populated from a read-only 
> data source (LDAP) and we don't plan on allowing updates to them via Rave.
> 
> 
> 2) Create a new CustomUserRepository interface:
> 
> public interface CustomUserRepository { 
>        CustomUser getByEmployeeNumber(String employeeNumber);
>        // ...  other custom function signatures
> }
> 
> 3) Create a new DefaultCustomUserRepository class with "userRepository" as 
> the bean name that is marked as @Primary to override the default Rave 
> userRepository implemenation (DefaultUserRepository).  This custom class will 
> get injected into any Spring Bean that needs a "userRepository" like 
> UserService. 
> 
> @Repository(value="userRepository")
> @Primary
> @Transactional
> public class DefaultCustomUserRepository extends JpaUserRepository implements 
> CustomUserRepository {
> 
>       @Override
>       public CustomUser getByEmployeeNumber(String employeeNumber) {
>            ...
>       }
> 
>       // custom code that fetches the new user data fields from our LDAP 
> server
>       private CustomUser getCustomUserFromLDAP(String employeeNumber) {
>            ...
>       }
> }
> 
> 4) Overlay core-applicationContext.xml with our version that includes 
> component scans of our custom packages:
> ...
>    <!-- component scan custom code -->
>    <context:component-scan base-package="org.custom.portal.repository"/>
> ...
> 
> 5) Overlay applicationContext.xml to reference our 
> core-applicationContext.xml file:
> ...
>    <import 
> resource="classpath*:org/custom/portal/core-applicationContext.xml"/>
>    <import resource="classpath*:org/apache/rave/web-applicationContext.xml"/>
>    <import 
> resource="classpath*:org/apache/rave/opensocial-provider-applicationContext.xml"/>
>    <import 
> resource="classpath*:org/apache/rave/w3c-provider-applicationContext.xml"/>
> ...
> 
> Again we are still in the early stages of this work so things may change over 
> time but this should give you enough of a starting point.
> 
> Tony
> 
> 
>> -----Original Message-----
>> From: Raminderjeet Singh [mailto:[email protected]]
>> Sent: Thursday, February 16, 2012 3:30 PM
>> To: [email protected]
>> Subject: Extend Person model as Rave-Extension
>> 
>> Hi Devs,
>> 
>> I am trying to extend the person object to add new data fields using rave-
>> vanilla-extension. War overlay works fine for new services like
>> (CustomUserService) and web components but it does not overlay
>> dependency artifact jars. I tried to overlay rave-core jar only in a separate
>> project but was not successful to extend user model. I can add my code to
>> rave-core itself and it works well. Any ideas how can i make this work from
>> rave-extensions? I think this use case will be true for any custom portals
>> based on Rave. I added my sample code in rave-vanilla-extension sandbox. I
>> created RAVE-447 for this also.
>> 
>> Thanks
>> Raminder

Reply via email to