Speichern von Daten per JDO

Als erstes werde ich mal die Domainenobjekte anlegen, in diesem Fall erstmal einen User und als 1:N die dazugehörigen WeightUnits, bestehend aus Gewicht/Tag. Außerdem benötigen wir noch die DAOs/Services sowie die PersistenceManagerFactory:

Für die Transaktionen muss noch die spring-tx.jar, spring-aop.jar und aopalliance-1.0.jar zum Classpath zugefügt werden.

Hier der User:

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class User implements Serializable
{
	@PrimaryKey
	@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
	private Key key;

	@Persistent
	private String j_username;

	@Persistent
	private String j_password;

	@Persistent
	private String email;

	@Persistent
	private BigDecimal weight;

	@Persistent
	private BigDecimal desiredWeight;

	@Persistent(mappedBy = "user")
	private List weightUnits  = Lists.newArrayList();

//getter/setter
}

Und die WeightUnit:

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class WeightUnit
{
	@PrimaryKey
	@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
	private Key key;

	@Persistent
	private Date day;

	@Persistent
	private BigDecimal weight;

	@Persistent
	private User user;

//getter/setter

}

In der application-context.xml wird die PersistenceManagerFactory verdrahtet:


	

 	

 	

 	

 	

 	

 	

 	

anschließend benötigen wir die DAOs zum Speichern und Auslesen. Zu jeder DAOImpl gehört natürlich ein Interface, welches ich aus Platzgründen weg lasse:

public class UserDAOImpl extends JdoDaoSupport implements UserDAO
{

	@Override
	public void delete(User user)
	{
		// TODO Auto-generated method stub

	}

	@Override
	public User findUserById( Key key)
	{
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public User save(User user)
	{
			return getPersistenceManager().makePersistent(user);
	}

}

Ich verwende hier den JdoDaoSupport und binde mich damit an Spring, wer möchte kann sich die Factory auch selber injecten.

Anschließend noch Service/ServiceImpl erzeugen und in einen Controller injecten.

Damit die Session während eines Views nicht geschlossen werden, kommt noch ein OpenPersistenceInViewFilter in die web.xml.



	OpenPersistenceManagerInViewFilter
	org.springframework.orm.jdo.support.OpenPersistenceManagerInViewFilter


	OpenPersistenceManagerInViewFilter
	/*


Im nächsten Teil versuche ich dann, Spring Security in der Anwendung zum Laufen zu bekommen.