[Java] Spring: java.lang.NoClassDefFoundError

Pagina: 1
Acties:
  • 164 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ben bezig om het Spring framework te leren.
Om simpel te beginnen probeer ik dmv een applicationContext.xml file een class te initialiseren. Steeds als ik een class van het spring framework aan spreek krijg ik bij het runnen de volgende foutmelding:
code:
1
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory


Mijn source code is:
code:
1
2
3
4
5
6
7
8
9
10
11
import org.springframework.context.*;
import org.springframework.context.support.*;

public class Main {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        Name n= (Name) ctx.getBean("Name");
    
    }

}


Ik heb gezocht naar java.lang.NoClassDefFoundError gezocht en er moet iets aan het class path worden toegevoegt, maar wat? Wie kan mij helpen?

De IDE die ik gebruik is Eclipse

Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Verwijderd schreef op zaterdag 13 januari 2007 @ 19:37:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
[google=apache commons logging] -> Commons - Logging -> Downloads

[ Voor 35% gewijzigd door Gerco op 13-01-2007 20:37 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

Verwijderd

En aangezien je vind dat "het toch een ondoorzichtelijke rotzooi" is waarvan nergens duidelijk staat uitgelegd welke dependencies je nodig hebt:

In de root van de distributie zip staat een bestand met de naam: "readme.txt"
Meerdere projecten hanteren deze obscure methode om de gebruiker te informeren over eventuele afhankelijkheden ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op zondag 14 januari 2007 @ 15:05:
En aangezien je vind dat "het toch een ondoorzichtelijke rotzooi" is waarvan nergens duidelijk staat uitgelegd welke dependencies je nodig hebt:

In de root van de distributie zip staat een bestand met de naam: "readme.txt"
Meerdere projecten hanteren deze obscure methode om de gebruiker te informeren over eventuele afhankelijkheden ;)
Bedankt voor je antwoord.
Volgens zit je ook op Fok, moest even m'n frustratie kwijt.

Maar ik heb het al aan de praat gekregen. Tot voor kort had ik nog nooit van Spring, JavaBeans of Hibernate gehoord. Op het eerste gezicht lijkt het allemaal onoverzichtelijk en hoogdrempelig, overal moet je tools en libraries vandaan halen die je eerst op een bepaalde manier moet configureren voordat je ze kan gebruiken. Het is denk ik even een zure appel waar je even door heen moet bijten. Maar ik heb het idee dat ik er nu wat in thuis begin te raken.

Voordat ik deze baan kreeg was ik van plan om voor .NET te gaan, dat heeft die nadelen niet. Je installeerd Visual Studio en je kunt aan de slag. En daarbij komt dat ik gewend was om in een Microsoft omgeving te werken. Maar uiteindelijk denk ik dat het niks uitmaakt, als programmeur, waar je mee werkt.

Acties:
  • 0 Henk 'm!

Verwijderd

Als afsplitsing op dit topic (of eigenlijk de bovenastaande post) vraag ik me toch af wat nou een goed (het beste bestaat natuurlijk niet) pad is om te bewandelen nadat je kennis hebt gemaakt met java en wat gekloot en geklooid hebt met databases en webapplicaties, het werd me al vrij snel duidelijk dat ik niet telkesn het geklooi met database mapping wil programmeren, dus zijn er handige tools voor als Hibernate, maar blijf het gevoel houden dat ik een basis van j2ee mis om eigenlijk goed aan de slag te kunnen gaan.
Vraag is dus een soort van logische roadmap, ik word inmiddels om mijn oren gesmeten met termen als ANT, Spring, Hibernate, Struts, JSF etc etc...

Misschien nuttig om eens een lichtje door het bos te doen schijnen door iemand met gedegen ervaring op dit gebied?

Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 10-09 15:12

Nick_S

++?????++ Out of Cheese Error

Voor het builden van je project inclusief dependencies zou je eens kunnen kijken naar maven2. Deze trekt dependencies van een centrale server. Je declareert dat je bijvoorbeeld spring gebruikt en maven2 "weet" dan dat daarbij ook commons logging hoort.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Het hangt natuurlijk allemaal af van welke richting je op wilt. Java is een groot platform, je zou het bijna een virtueel operating system kunnen noemen :). Als je het hebt over ANT, Spring, Hibernate, .. dan lijkt het me dat je richting web en enterprise omgevingen op wil.

Als je eenmaal de Java taal onder de knie hebt, en je wil de JEE richting op, lijkt het me het best om te beginnen Servlets en JSPs. Daar dit de grondbeginselen vormen van de meeste webapplicaties. Er zijn een hele hoop tools en frameworks beschikbaar om het je gemakkelijker te maken om voor de 'enterprise' te programmeren. Ik ga hier even een opsplitsing in maken

web frameworks: Struts, Spring MVC, JSF, Echo2, Wicket, ...
build tools: ANT, Maven
enterprise frameworks: EJB3, Spring
persistence frameworks: JPA, Hibernate, IBatis, ...

Op web framework niveau kan je nog eens een opsplitsing maken tussen request-based en component frameworks. Struts, Spring MVC zijn request based frameworks en JSF, Wicket zijn component frameworks (volledig object oriented).

Er zijn 2 grote frameworks beschikbaar om je applicatie te builden (compileren, jarren, ..), zonder daarvoor afhankelijk te moeten zijn van batch files of IDE's. Hiervoor werd in het verleden veel ANT gebruikt, maar tegenwoordig komt Maven meer en meer in de picture.

Ik weet dat ik eigenlijk niet de rechtstreekse vergelijking zou mogen maken tussen EJB3 en Spring, daar deze maar een klein deel overlappen, maar ik doe het toch. Wat bedoel ik dan met enterprise framework? Wel, deze frameworks vereenvoudigen het werken met globale transacties, security, lifecycles van uw objecten, ... etc. Verder voorziet Spring bijvoorbeeld in een aantal abstracties naar andere frameworks, zodat het gebruik ervan ook makkelijker wordt.

Op vlak van persistentie is er sinds kort een algemene standard, JPA (Java Persistence of EJB3 persistence wordt het ook nog vaak genoemd). Dit is een specificatie, die onder andere door Hibernate geïmplementeerd wordt. Als we gebruik maken van deze specificatie, gebruiken we eigenlijk ook Hibernate, maar we gebruiken dan alleen maar de functies die in deze specificatie beschreven staan. Als we mee willen evolueren met de laatste nieuwe technieken en features, ga je er in de toekomst niet onderuit kunnen om toch gewoon Hibernate specifieke features te gebruiken.

Daar waar JPA een specificatie is, is JSF (standaard voor web) ook een specificatie.

Het is niet makkelijk om een pad uit te stippelen voor iemand die nog nooit iets met deze frameworks gedaan heeft. Maar mijn advies zou zijn om het gradueel in te faseren. Start met Servlets en JSPs en werk een kleine applicatie uit, bvb een eshop. Ga dan bijvoorbeeld een Struts of Spring MVC gebruiken om te zien hoe dit je werk kan vergemakkelijken. Ik raad Struts vaak aan voor beginners omdat hier erg veel documentatie en antwoorden voor te vinden zijn op het internet. Het is immers tot op vandaag nog altijd het meest gebruikte web framework, ook al is het een beetje voorbijgestreefd qua technologie.

Ga eerst lekker met JDBC aan de slag, map je objecten op je resultssets. Snel zal je zien dat dit veel boilerplate code in de hand werkt. Zo kan je Hibernate er eens bij betrekken om te zien welk werk dit je uit handen neemt. Of begin eerst eens met de Spring JDBC abstracties...

Het is inderdaad een feit dat afstudeerders die met Java willen beginnen een enorme hoop moeten verwerken eer ze nog maar een beeld kunnen vormen van wat er allemaal beschikbaar is. .NET heeft 1 entry point, en dat is Visual Studio. Gelijkertijd ook de grote kracht van .NET!

Acties:
  • 0 Henk 'm!

Verwijderd

Het afstuderen ben ik nog niet aan begonnen, na de zomervakantie begin ik mijn laatste jaar aan de HRO in Rotterdam met als afstudeerrichting Webtechnologie, de EE kant trekt mij dus wel, maar er staan verschrikkelijk veel bomen in het bos :)

Acties:
  • 0 Henk 'm!

  • Sv3n
  • Registratie: Mei 2002
  • Laatst online: 09:42
Begin er gewoon eens mee, een half jaar geleden kende ik het ook allemaal niet en op mn stage moest ik er mee aan het werk, nu een half jaar later kan ik met al die frameworks(Spring, hibernate en wicket in mijn geval) prima overweg :)

Het kost je in het begin een verschrikkelijke hoop tijd en moeite maar met tutorials, beetje uitproberen enzo kom je er vanzelf

Last.fm
Films!


Acties:
  • 0 Henk 'm!

Verwijderd

Mjah, ben op het moment zelf bezig Hibernate onder de knie te krijgen, voornamelijk omdat ik een punthoofd krijg van de a-compatibiliteit van het relationele database model en het object model van Java, maar het lijkt wel hoe meer ik me erin verdiep hoe meer vragen er naar boven schieten :)

Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Tegelijkertijd krijg ik ook een punthoofd van dat hele Hibernate. Vooral als mensen beslissen om het voor van alles en nog wat in te zetten waar het niet voor geschikt is en dan nog op de verkeerde manier ook.

Krijg je een vraag waarom een scherm traag is en kijk je ff in de code, wordt er in een for loop 1000 keer een collection opgehaald met lazy loading... |:(
En het stomme is dat je het de gene die het gemaakt heeft vaak niet eens kwalijk kan nemen, want in de code zelf gebeurt niets vreemds, er wordt gewoon een getter aangeroepen.

Maar als je een leerpad wilt hebben, zou ik vooral kijken naar waar je momenteel al ervaring mee hebt. Heb je al jaren met PHP ofzo gewerkt, dan zijn Servlets en JSP's niet zo moeilijk om mee te beginnen. Daarna Struts, daarna JSF. Eventueel als je echt haast hebt, meteen JSF, maar dat is niet makkelijk.

Als je thuis bent in databases, dan zou ik met Hibernate beginnen.

Met Spring/EJB moet je NOOIT beginnen tenzij je bovenstaande technieken al kent en al een beetje ervaring hebt. Dat zijn speeltjes voor meer ervaren ontwikkelaars/architecten en hebben vooral nut om zaken als transacties, security en zo gemakkelijk te realiseren.

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

Verwijderd

De meeste technieken zijn een oplossing voor een bepaald (veel voorkomend) probleem. Een OR mapper zoals Hibernate is slechts een oplossing voor het veel voorkomende probleem van de vertaling van database naar objecten en terug. Een oplossing als hibernate pak je er dan ook alleen maar bij op het moment als je ook daadwerkelijk het probleem ondervind.
En op die manier zou je wat mij betreft ook je volgende stap in framework land moeten zetten, vanuit de probleem stelling dus. Dus niet bijvoorbeeld Spring inzetten om Spring. Je maakt het jezelf dan enkel moeilijker omdat je niet weet waar de knelpunten zitten die Spring voor je oplost.

Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Precies. En ik merk in de praktijk vaak genoeg dat niet iedereen er zo over denkt, maar liever trendy meedoet met nieuwe technologieen zonder enig idee te hebben waarom. Het enige wat dan geroepen wordt, zijn buzzwords zoals onderhoudbaarheid, uitbreidbaarheid, en nog meer ***heid.
Vragen waarom dat dan zoveel ***heid oplevert dan gewoon zelf programmeren is zinloos, want dat levert alleen quotes op van een willekeurige site.

Begrijpen waarom een framework nuttig is en het goed kunnen inzetten kan daarom in mijn optiek alleen als je zelf de redenen begrijpt waarom dat framework bestaat. En dat is een kwestie van zelf eerst ondervinden in mijn optiek.

Nou is Hibernate vrij eenvouding op dit gebied, bij de eerste JDBC app die je maakt merk je namelijk al de problemen, zoals de CRUD operaties die je steeds uit moet programmeren en de try-catch-finally's.
Hetzelfde geldt voor Struts, daar zie je ook snel resultaat, maar Spring is op dit gebied veel abstracter vind ik.

Ook voor dit probleem van de TS geldt dat je gewoon eerst de basics moet kennen. Een NoClassDefFoundError is namelijk niet iets van Spring, maar gewoon plain Java en overkomt je waarschijnlijk ook wel een keer als je gewoon een JSP/Servlet/JDBC app maakt voor Tomcat. En je kunt het beter in zo'n gemakkelijke context ondervinden dan wanneer je meteen allemaal frameworks erbij zoekt.

Kortom, eerst de basics... :)

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor alle reacties, heb nu ff geen tijd om er uitgebreid op te gaan reageren. Ben druk aan het studeren :)

Acties:
  • 0 Henk 'm!

  • flowerp
  • Registratie: September 2003
  • Laatst online: 11-09 18:20
-FoX- schreef op zondag 14 januari 2007 @ 18:45:
web frameworks: Struts, Spring MVC, JSF, Echo2, Wicket, ...
build tools: ANT, Maven
enterprise frameworks: EJB3, Spring
persistence frameworks: JPA, Hibernate, IBatis, ...

Op web framework niveau kan je nog eens een opsplitsing maken tussen request-based en component frameworks. Struts, Spring MVC zijn request based frameworks en JSF, Wicket zijn component frameworks (volledig object oriented).
Een mooie opsomming :)

Wat ik nog wel wil toevoegen, en wat in bovenstaande opsomming niet helemaal uit de verf komt, is dat je eigenlijk JSF en JPA niet zomaar willekeurig in deze rijtjes kan zetten. Beide zijn namelijk een standaard onderdeel van Java EE sinds versie 5.

Voor mensen van de 'oude' generatie is JSF mischien inderdaad gevoelsmatig een apart web framework, maar voor de nieuwe generatie die straks met Java EE 5 (en later) zal gaan beginnen, zal JSF net zo vanzelfsprekend zijn als bijvoorbeeld JSP nu is.

Natuurlijk blijven er alternatieven bestaan. In het oude Java EE had je ook alternatieve templating engines, zoals Velocity. Echter, omdat JSP de standaard was in Java begon iedereen gewoon met JSP. Pas als je wat langer met JSP werkte en tegen bepaalde dingen aanliep, kon je voor een alternatief als Velocity kiezen.

Je ziet dit ook op veel andere plekken terug. Er bestaan meerdere grafische toolkits in Java SE, maar elke beginner zet z'n eerste stapjes op GUI gebied met Swing. Ook als is SWT beter, sneller EN makkelijker, alleen het feit dat Swing de default is in Java maakt dat beginners daar als eerste mee aan de slag gaan.

It's shocking to find how many people do not believe they can learn, and how many more believe learning to be difficult.


Acties:
  • 0 Henk 'm!

  • Antediluvian
  • Registratie: Maart 2002
  • Laatst online: 18-06 17:42
JKVA schreef op zondag 14 januari 2007 @ 21:02:
Krijg je een vraag waarom een scherm traag is en kijk je ff in de code, wordt er in een for loop 1000 keer een collection opgehaald met lazy loading... |:(
En het stomme is dat je het de gene die het gemaakt heeft vaak niet eens kwalijk kan nemen, want in de code zelf gebeurt niets vreemds, er wordt gewoon een getter aangeroepen.
Hibernate gaat niet 1000 keer met lazy loading dezelfde collectie uit de DB ophalen omdat er iemand 1000 maal een getter aanroept.
flowerp schreef op dinsdag 16 januari 2007 @ 23:22:
Je ziet dit ook op veel andere plekken terug. Er bestaan meerdere grafische toolkits in Java SE, maar elke beginner zet z'n eerste stapjes op GUI gebied met Swing. Ook als is SWT beter, sneller EN makkelijker, alleen het feit dat Swing de default is in Java maakt dat beginners daar als eerste mee aan de slag gaan.
Je moet eens kijken wat er allemaal op gebied van swing in de nieuwe Java SE 6 is veranderd. SWT is old en kan swing totaal niet meer bijhouden (zowel qua ontwikkelingen als performance).

Acties:
  • 0 Henk 'm!

  • flowerp
  • Registratie: September 2003
  • Laatst online: 11-09 18:20
Antediluvian schreef op woensdag 17 januari 2007 @ 17:34:
Je moet eens kijken wat er allemaal op gebied van swing in de nieuwe Java SE 6 is veranderd. SWT is old en kan swing totaal niet meer bijhouden (zowel qua ontwikkelingen als performance).
Whatever ;) Wat ik bedoelde, ook al zou SWT beter, sneller, makkelijker etc zijn. Men kijkt toch altijd initieel naar het geen standaard in Java zit. Voor JSF geldt ook zoiets, dat is momenteel handsdown het beste web framework. Ook al zou het echter niet het beste framework zijn, dan nog zou men (=de nieuwe generatie dus) deze als eerste bekijken.

It's shocking to find how many people do not believe they can learn, and how many more believe learning to be difficult.


Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Antediluvian schreef op woensdag 17 januari 2007 @ 17:34:
[...]
Hibernate gaat niet 1000 keer met lazy loading dezelfde collectie uit de DB ophalen omdat er iemand 1000 maal een getter aanroept.
[...]
Nou, in ons project gebeurde dat toen dus wel. Niet omdat steeds dezelfde collectie wordt opgehaald, dat niet nee, maar wel omdat er wat dieper door de object graph gelopen wordt. En ik kan je vertellen, het oplossen door er een query met joins van te maken heeft het scherm van minuten naar nog geen seconde geholpen.
flowerp schreef op woensdag 17 januari 2007 @ 22:24:
[...]
Whatever ;) Wat ik bedoelde, ook al zou SWT beter, sneller, makkelijker etc zijn. Men kijkt toch altijd initieel naar het geen standaard in Java zit. Voor JSF geldt ook zoiets, dat is momenteel handsdown het beste web framework. Ook al zou het echter niet het beste framework zijn, dan nog zou men (=de nieuwe generatie dus) deze als eerste bekijken.
Dat denk ik ook, al is het maar omdat je als nieuweling dan niet allemaal jars hoeft te zoeken en installeren, maar gewoon een appserver met bijbehorende toolkit download en kunt gaan met de spreekwoordelijke banaan.

Fat Pizza's pizza, they are big and they are cheezy

Pagina: 1