Orika Objektmapping

Gast #3125743
Lesenswert?

Hallo,

kennt sich jemand von euch mit Orika in Java aus ?
Bei mir gibts leider einen großen Fehler:

Exception in thread "main" java.lang.NoClassDefFoundError: 
com/googlecode/concurrentlinkedhashmap/ConcurrentLinkedHashMap$Builder

kann mir vlt. jemand helfen.

Ein paar Informationen zum Projekt:

Ich lese mittels Hibernate Daten aus einer MySQL Datenbank aus und 
möchte diese mit Orika in die Domänenschicht abbilden.

Code:
1
public class DatabaseFacadeOrika {
2

3
    private Session _session;
4
    private HashMap<Class, Class> mappers;
5
    private static DatabaseFacadeOrika _instance;
6

7
    private DatabaseFacadeOrika() {
8
        _session = HibernateUtil.getInstance().getSession().openSession();
9
        mappers = new HashMap<Class, Class>();
10
        mappers.put(RightPoa.class, Rights.class);
11
        mappers.put(PersonPers.class, Person.class);
12
    }
13

14
    public static DatabaseFacadeOrika getInstance() {
15
        if (_instance == null) {
16
            _instance = new DatabaseFacadeOrika();
17
        }
18
        return _instance;
19
    }
20

21
    public <T> T getByID(Class<T> c, int id) {
22
        MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
23
        mapperFactory.classMap(_session.get(mappers.get(c).getClass(), id).getClass(), c.getClass())
24
                .byDefault()
25
                .register();
26
        MapperFacade mapper = mapperFactory.getMapperFacade();
27
        // map the fields of 'source' onto a new instance of PersonDest
28
        return mapper.map(_session.get(mappers.get(c).getClass(), id), c);
29
    }
30
}
31

32
 public static void main(String[] args) {
33
    DatabaseFacadeOrika dbFacade = DatabaseFacadeOrika.getInstance();
34
    
35
    try {
36
      PersonPers ri = dbFacade.getByID(PersonPers.class, 1);
37
      System.out.println(ri.getComposerCollection());
38
    } catch (Exception ex) {
39
      Logger.getLogger(InitialiseApp.class.getName()).log(Level.SEVERE, null, ex);
40
    }
41
  }
Gast #3126010
Lesenswert?

Vielen Dank für die schnellen Antworten.
Ich habe nun GUAVA in mein Java Projekt eingebunden, jedoch kommt immer 
noch der gleiche Fehler :/

Ich habe anschließend versucht nur das File: 
concurrentlinkedhashmap-lru-1.3.2.jar einzubinden, dabei ist folgender 
Fehler gekommen:
1
Exception in thread "main" java.lang.NoSuchMethodError: com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap$Builder.maximumWeightedCapacity(I)Lcom/googlecode/concurrentlinkedhashmap/ConcurrentLinkedHashMap$Builder;

Ich habe leider keine Idee wie ich diesen Fehler beheben könnte, bitte 
um Hilfe; die Suche im Internet hat mir leider bisher nicht viel 
gebracht.
Gast #3126216
Lesenswert?

Nein leider nicht.

Ich habe nachgelesen:

    javassist (v 3.12.0+)
    slf4j (v 1.5.6+)
    paranamer (v 2.0+)

Und anschließend die Libs:
    javassist-3.15.0-GA.jar
    slf4j-site-1.7.5.jar
    paranamer-2.3.jar

sowie die vorher erwähnte:
    guava-14.0.1.jar

eingebunden ...

Falls ein Fehler auffählt bitte sofort sagen :)

Kennt ihr sonst vlt. eine andere Möglichkeit des Klassenmappings in Java 
?
Dozer versuche ich momentan ebenfalls, es hat zwar funktioniert ist 
jedoch um einiges langsamer als Orika, laut Internet.
Gast #3126297
Lesenswert?

Nach mehrerem herumprobieren bin ich auf folgende libs gekommen, mit 
deren Hilfe ein kleines Testprogramm läuft:

concurrentlinkedhashmap-lru-1.2_jdk5.jar
javassist-3.15.0-GA.jar
log4j-1.2.17.jar
orika-core-1.4.1.jar
paranamer-2.3.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar

Es kommen zwar kleine Warnungen aber ich glaube dies hat eher mit dem 
Logfile zu tun.

log4j:WARN No appenders could be found for logger 
(ma.glasnost.orika.metadata.ClassMapBuilder).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for 
more info.

Ich habe gelesen, dass diese Meldung kommt, wenn das log4j.properties 
File nicht richtig gesetzt ist. Da es sich jedoch um ein dll File 
handelt kann ich es nicht richten oder ?

Test Code:
1
import java.util.Date;
2

3
public class BasicPerson {
4

5
    private String name;
6
    private int age;
7
    private Date birthDate;
8

9
    // getters/setters 
10
    public String getName() {
11
        return name;
12
    }
13

14
    public void setName(String name) {
15
        this.name = name;
16
    }
17

18
    public int getAge() {
19
        return age;
20
    }
21

22
    public void setAge(int age) {
23
        this.age = age;
24
    }
25

26
    public Date getBirthDate() {
27
        return birthDate;
28
    }
29

30
    public void setBirthDate(Date birthDate) {
31
        this.birthDate = birthDate;
32
    }
33
    
34
}
35

36

37
import java.util.Date;
38

39
public class BasicPersonDto {
40

41
    private String fullName;
42
    private int currentAge;
43
    private Date birthDate;
44

45
    // getters/setters 
46
    public String getFullName() {
47
        return fullName;
48
    }
49

50
    public void setFullName(String fullName) {
51
        this.fullName = fullName;
52
    }
53

54
    public int getCurrentAge() {
55
        return currentAge;
56
    }
57

58
    public void setCurrentAge(int currentAge) {
59
        this.currentAge = currentAge;
60
    }
61

62
    public Date getBirthDate() {
63
        return birthDate;
64
    }
65

66
    public void setBirthDate(Date birthDate) {
67
        this.birthDate = birthDate;
68
    }
69
    
70
}
71

72

73
import ma.glasnost.orika.MapperFacade;
74
import ma.glasnost.orika.MapperFactory;
75
import ma.glasnost.orika.impl.DefaultMapperFactory;
76

77
public class MyMapper {
78

79
    MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
80

81
    public void doMapping() {
82
        mapperFactory.classMap(BasicPerson.class, BasicPersonDto.class)
83
                .field("name", "fullName")
84
                .field("age", "currentAge")
85
                .byDefault()
86
                .register();
87
    }
88
    
89
    public BasicPersonDto mapPerson(BasicPerson person) {
90
        MapperFacade mapper = mapperFactory.getMapperFacade();
91
        return mapper.map(person, BasicPersonDto.class);
92
    }
93
}
94

95

96
import java.util.Date;
97

98
public class Test {
99

100
    public static void main(String[] args) {
101
        BasicPerson person = new BasicPerson();
102
        person.setAge(15);
103
        person.setName("martin");
104
        person.setBirthDate(new Date());
105
        
106
       MyMapper mapper = new MyMapper();
107
       mapper.doMapping();
108
       BasicPersonDto dto = mapper.mapPerson(person);
109
        System.out.println(dto.getFullName());
110
        System.out.println(dto.getCurrentAge());
111
    }
112
    
113
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren