{"id":48,"date":"2009-12-23T20:40:02","date_gmt":"2009-12-23T19:40:02","guid":{"rendered":"http:\/\/www.pmannel.de\/wordpress\/?p=48"},"modified":"2010-09-16T20:44:53","modified_gmt":"2010-09-16T18:44:53","slug":"gaej-und-spring-teil-2","status":"publish","type":"post","link":"https:\/\/www.pmannel.de\/wordpress\/?p=48","title":{"rendered":"GAE\/J und Spring: Teil 2"},"content":{"rendered":"<p><strong>Speichern von Daten per JDO<\/strong><\/p>\n<p>Als erstes werde ich mal die Domainenobjekte anlegen, in diesem Fall erstmal einen User und als 1:N die dazugeh\u00f6rigen WeightUnits, bestehend aus Gewicht\/Tag. Au\u00dferdem ben\u00f6tigen wir noch die DAOs\/Services sowie die PersistenceManagerFactory:<\/p>\n<p>F\u00fcr die Transaktionen muss noch die <em>spring-tx.jar<\/em>, <em>spring-aop.jar<\/em> und <em>aopalliance-1.0.jar <\/em>zum Classpath zugef\u00fcgt werden.<\/p>\n<p>Hier der User:<\/p>\n<pre class=\"brush:java\">\r\n@PersistenceCapable(identityType = IdentityType.APPLICATION)\r\npublic class User implements Serializable\r\n{\r\n\t@PrimaryKey\r\n\t@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)\r\n\tprivate Key key;\r\n\r\n\t@Persistent\r\n\tprivate String j_username;\r\n\r\n\t@Persistent\r\n\tprivate String j_password;\r\n\r\n\t@Persistent\r\n\tprivate String email;\r\n\r\n\t@Persistent\r\n\tprivate BigDecimal weight;\r\n\r\n\t@Persistent\r\n\tprivate BigDecimal desiredWeight;\r\n\r\n\t@Persistent(mappedBy = \"user\")\r\n\tprivate List<weightunit> weightUnits  = Lists.newArrayList();\r\n\r\n\/\/getter\/setter\r\n}\r\n<\/weightunit>\r\n<\/pre>\n<p>Und die WeightUnit:<\/p>\n<pre class=\"brush:java\">\r\n@PersistenceCapable(identityType = IdentityType.APPLICATION)\r\npublic class WeightUnit\r\n{\r\n\t@PrimaryKey\r\n\t@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)\r\n\tprivate Key key;\r\n\r\n\t@Persistent\r\n\tprivate Date day;\r\n\r\n\t@Persistent\r\n\tprivate BigDecimal weight;\r\n\r\n\t@Persistent\r\n\tprivate User user;\r\n\r\n\/\/getter\/setter\r\n\r\n}\r\n\r\n<\/pre>\n<p>In der application-context.xml wird die PersistenceManagerFactory verdrahtet:<\/p>\n<pre class=\"brush:xml\">\r\n<tx:annotation-driven>\r\n\t<bean id=\"persistenceManagerFactory\" class=\"org.springframework.orm.jdo.LocalPersistenceManagerFactoryBean\">\r\n<property name=\"persistenceManagerFactoryName\" value=\"transactions-optional\">\r\n \t<\/property>\r\n\r\n \t<bean id=\"transactionManager\" class=\"org.springframework.orm.jdo.JdoTransactionManager\">\r\n<property name=\"persistenceManagerFactory\" ref=\"persistenceManagerFactory\">\r\n \t<\/property>\r\n\r\n \t<bean id=\"userDAO\" class=\"de.pmannel.login.UserDAOImpl\">\r\n<property name=\"persistenceManagerFactory\" ref=\"persistenceManagerFactory\">\r\n \t<\/property>\r\n\r\n \t<bean id=\"userService\" class=\"de.pmannel.login.UserServiceImpl\">\r\n<property name=\"userDAO\" ref=\"userDAO\">\r\n \t<\/property>\r\n<\/bean><\/bean><\/bean><\/bean><\/tx:annotation-driven>\r\n<\/pre>\n<p>anschlie\u00dfend ben\u00f6tigen wir die DAOs zum Speichern und Auslesen. Zu jeder DAOImpl geh\u00f6rt nat\u00fcrlich ein Interface, welches ich aus Platzgr\u00fcnden weg lasse:<\/p>\n<pre class=\"brush:java\">\r\npublic class UserDAOImpl extends JdoDaoSupport implements UserDAO\r\n{\r\n\r\n\t@Override\r\n\tpublic void delete(User user)\r\n\t{\r\n\t\t\/\/ TODO Auto-generated method stub\r\n\r\n\t}\r\n\r\n\t@Override\r\n\tpublic User findUserById( Key key)\r\n\t{\r\n\t\t\/\/ TODO Auto-generated method stub\r\n\t\treturn null;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic User save(User user)\r\n\t{\r\n\t\t\treturn getPersistenceManager().makePersistent(user);\r\n\t}\r\n\r\n}\r\n\r\n<\/pre>\n<p>Ich verwende hier den JdoDaoSupport und binde mich damit an Spring, wer m\u00f6chte kann sich die Factory auch selber injecten.<\/p>\n<p>Anschlie\u00dfend noch Service\/ServiceImpl erzeugen und in einen Controller injecten.<\/p>\n<p>Damit die Session w\u00e4hrend eines Views nicht geschlossen werden, kommt noch ein OpenPersistenceInViewFilter in die web.xml.<\/p>\n<pre class=\"brush:xml\">\r\n\r\n<filter>\r\n\t<filter-name>OpenPersistenceManagerInViewFilter<\/filter-name>\r\n\t<filter-class>org.springframework.orm.jdo.support.OpenPersistenceManagerInViewFilter<\/filter-class>\r\n<\/filter>\r\n<filter-mapping>\r\n\t<filter-name>OpenPersistenceManagerInViewFilter<\/filter-name>\r\n\t<url-pattern>\/*<\/url-pattern>\r\n<\/filter-mapping>\r\n\r\n<\/pre>\n<p>Im n\u00e4chsten Teil versuche ich dann, Spring Security in der Anwendung zum Laufen zu bekommen. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>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\u00f6rigen WeightUnits, bestehend aus Gewicht\/Tag. Au\u00dferdem ben\u00f6tigen wir noch die DAOs\/Services sowie die PersistenceManagerFactory: F\u00fcr die Transaktionen muss noch die spring-tx.jar, spring-aop.jar und aopalliance-1.0.jar zum Classpath zugef\u00fcgt werden. Hier der User: @PersistenceCapable(identityType&#8230; <\/p>\n<div class=\"read-more\"><a href=\"https:\/\/www.pmannel.de\/wordpress\/?p=48\">Weiterlesen<\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[12,13],"class_list":["post-48","post","type-post","status-publish","format-standard","hentry","category-google-app-engine","tag-gaej","tag-jdo"],"_links":{"self":[{"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/48","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=48"}],"version-history":[{"count":4,"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/48\/revisions"}],"predecessor-version":[{"id":52,"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/48\/revisions\/52"}],"wp:attachment":[{"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=48"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=48"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pmannel.de\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=48"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}