Forum: PC-Programmierung Orika Objektmapping


von jack (Gast)


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
  }

von Markus V. (Gast)


Lesenswert?

Hast Du das jar-File, das 
com/googlecode/concurrentlinkedhashmap/ConcurrentLinkedHashMap$Builder 
enthält, beim Starten der Applikation in den classpath aufgenommen?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Du benötigst google-guava im Klassenpfad. (dafür muss man sich aber 
nicht mit Orika auskennen...)

von jack (Gast)


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.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

jack schrieb:
> Ich habe leider keine Idee wie ich diesen Fehler beheben könnte

Gibt es den bei dem Projekt kein lib Ordner wo die passenden Version 
der Abhängigkeiten enthalten sind?

von jack (Gast)


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.

von jack (Gast)


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
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.