Archief - Java: Verwijzen naar JPA project

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

sanzo

Legacy Member
Hey,

Ik ben al drie dagen met deze oefening bezig waar ik vanuit mijn huidig project een JPA moet oproepen om zaken te persisteren. Ik volg hiervoor een stap voor stap tutorial van de docent maar ik krijg telkens een fout eens ik vanuit mijn sessionbean een entitymanager instantieer en PersistenceContext gebruik. (de lijnen waar probleem achter geschreven staat)

Code:
@Stateless
public class Bibliotheek implements BibliotheekLocal {
	@PersistenceContext(unitName = "BibliotheekJPA")
	private EntityManager em;
    /**
     * Default constructor. 
     */
    public Bibliotheek() {
        // TODO Auto-generated constructor stub
    }

	@Override
	public String helloWorld() {
		return "dag wereld, oud is beter.";
	}

	@Override
	public void addBoek() {
		Boeken boek = new Boeken();
		boek.setAuteur("rowling");
		boek.setTitel("harry potter");
		em.persist(boek);
	}

}

In console krijg ik deze fout:

Code:
DEPLOYMENTS IN ERROR:
  Deployment "persistence.unit:unitName=BibliotheekEAR.ear/BibliotheekJPA.jar#BibliotheekJPA" is in error due to the following reason(s): java.lang.RuntimeException: Specification violation [EJB3 JPA 6.2.1.2] - You have not defined a jta-data-source for a JTA enabled persistence context named: BibliotheekJPA

Als iemand enig idee heeft, zou echt geweldig zijn want ik probeer dit al ongeloofelijk lang op te lossen. Indien nodig kan ik ook de tutorial die ik volg via PM ofzo sturen. Nu ben ik meermaals herbegonnen zonder resultaat.

metalleke

Legacy Member
Edit jpa-deployers-jboss-beans.xml in <server profile>\deployers\ejb3.deployer\META-INF en zet volgende beans in commentaar:
- PersistenceParsingDeployer
- PersistenceDeployer
- PersistenceUnitDeployer

Ofwel hernoem persistence.xml naar jpa-persistence.xml en configureer org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean om deze file te gebruiken (via setPersistenceXmlLocation).

sanzo

Legacy Member
De eerste manier heb ik al geprobeerd en toen wilde mijn JBoss niet opstarten. Ik ben niet met het springframework aan het werken, dus de tweede manier is niet van toepassing denk ik? (Of zit spring mss standaard in J2EE? Geen idee maar ik dacht van niet..)

metalleke

Legacy Member
sanzo zei:
De eerste manier heb ik al geprobeerd en toen wilde mijn JBoss niet opstarten. Ik ben niet met het springframework aan het werken, dus de tweede manier is niet van toepassing denk ik? (Of zit spring mss standaard in J2EE? Geen idee maar ik dacht van niet..)

Nee, maar kon zijn dat je Spring gebruikte dus heb het er maar bij gezet. :)

sanzo

Legacy Member
Cva :) iig bedankt voor de suggesties, hopelijk heeft nog iemand een idee.

Wolf2000me

Legacy Member
Uw appserver vindt "BibliotheekJPA" niet terug. Dwz. dat de definitie "BibliotheekJPA" niet in het classpath staat of niet gedefinieerd is binnen de configuratie van uw appserver.

sanzo

Legacy Member
Dat zal idd het probleem geweest zijn (danku!), maar das vreemd omdat ik de JPA weldegelijk bij mijn EAR heb toegevoegd. Ik heb het opgelost door de entities langs mijn Controller in de webproject te gebruiken en niet rechtstreeks in mijn sessionbean. (Ik geef objecten dan gewoon mee als argument).

Ik heb nog een vraag over hetzelfde: als ik em.persist(boek) doe, dan werkt dat alleen als ik expliciet een id toevoeg aan mijn boek (boek.setId("3")). Nochtans is id in mijn database een primary key en ook ingesteld op auto_increment. De entity klasse van boek is automatisch gegenereerd in eclipse.

Enig idee waar dit aan kan liggen?

sanzo

Legacy Member
Ik zal bij mijn volgend project dat ik aanmaak eens zien of het aan de includes ligt.
Die @id heb ik effectief staan maar helaas...

sanzo

Legacy Member
Ik heb het probleem gevonden: blijkbaar was mijn id van het type string. Geen idee waarom ie niet zelf detecteerde dat het een int moest zijn, maar goed, het werkt nu!

Wolf2000me

Legacy Member
Ik bedoel een extra annotation achter @id
Code:
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;   //id veldje

sanzo

Legacy Member
Daarmee werkt het ook, maar ik denk dat een primary key ook gewoon geen String mag zijn.
Nog een dink dat ik niet snap:
Code:
username: <input type="text" name="username" value="${sessionScope.klant.username}"/>
Die sessionScope, hoe werkt die precies? Zonder, werkt mijn formulier niet. Ik snap niet hoe die opeens "in verbinding" staat met mijn entiteit in JPA. Gewoon een form opsturen zou toch moeten lukken met een lege value atribuut?

Wolf2000me

Legacy Member
In principe zou ik moeten vragen welke front-end technologie je gebruikt, al maakt het voor de scopes niet echt uit.

Session scope wil zeggen, in tegenstelling tot Request scope, dat de gegevens geplaatst op de session behouden blijven tot zolang de session in de browser blijft bestaan. Vanaf dat de session expired is verdwijnen ook je gegevens. In de meeste gevallen zal dit willen zeggen dat je je browser moet afsluiten om deze session zelf te expiren. (Voor firefox dien je alle vensters af te sluiten)

Normaal zou je formulier ook moeten werken buiten de session scope, maar je zal in je controller ervoor moeten zorgen dat de je Klant object niet null is.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan