Beste Programmeergrootheden,
Voor een project ben ik bezig met me te orienteren in Webservices icm EJB3.
De bedoeling is een soort PhotoGallery te maken in Flex die communceert met een Java/EJB3 Webservice met daarachter een MySQL database.
Het grootste gedeelte werkt allemaal al prima. Ik kan prima foto's uitlezen vanuit de database (via een blob veld) en enumereren door alle foto's in flex gaat ook prima.
Het probleem is nu alleen dat als ik in de webservice een update of delte query uit wil voeren, ik transactie errors krijg. Ik heb gezocht, en er word overal gezegd dat dit komt omdat normaal gesproken SEAM (of Spring) deze transacties start. Maar ik kan nergens vinden hoe ik dit zelf kan doen ( of transacties uit kan zetten, want die heb ik helemaal niet nodig).
De webservice:
De foutmelding (1 van de vele verschillende):
De foutmelding hierboven wisselt nog wel eens met de verschillende implementaties van de Transactions.
Er word ook wel eens gezegd dat de transaction niet gestart is (wat komt als ik niets met transactions doe)
In alle gevallen word er niets geupdate of gedelete.
Wie weet er raad?
- Thijs
Voor een project ben ik bezig met me te orienteren in Webservices icm EJB3.
De bedoeling is een soort PhotoGallery te maken in Flex die communceert met een Java/EJB3 Webservice met daarachter een MySQL database.
Het grootste gedeelte werkt allemaal al prima. Ik kan prima foto's uitlezen vanuit de database (via een blob veld) en enumereren door alle foto's in flex gaat ook prima.
Het probleem is nu alleen dat als ik in de webservice een update of delte query uit wil voeren, ik transactie errors krijg. Ik heb gezocht, en er word overal gezegd dat dit komt omdat normaal gesproken SEAM (of Spring) deze transacties start. Maar ik kan nergens vinden hoe ik dit zelf kan doen ( of transacties uit kan zetten, want die heb ik helemaal niet nodig).
De webservice:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
| package services; import java.util.List; import javax.annotation.Resource; import javax.ejb.EJBContext; import javax.ejb.Stateless; import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; import javax.ejb.TransactionManagement; import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.transaction.UserTransaction; import entities.GalleryImage; @Stateless @WebService @TransactionManagement() @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED) public class GalleryService implements GalleryServiceRemote { @PersistenceContext(unitName = "GalleryService") private EntityManager entityManager; @Resource private EJBContext context; @WebMethod @SuppressWarnings("unchecked") public List<GalleryImage> listGalleryImages() { return entityManager.createQuery("FROM GalleryImage gi") .getResultList(); } @WebMethod public void addGalleryImage(String description, byte[] image) { GalleryImage img = new GalleryImage(); img.image = image; img.description = description; entityManager.persist(img); } @WebMethod @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public void deleteGalleryImage(long id) { List<GalleryImage> imageList = listGalleryImages(); System.out.println("MEUUUH"); for (GalleryImage image : imageList) { if (image.id == id) { entityManager.getTransaction().begin(); entityManager.remove(image); entityManager.getTransaction().commit(); return; } } } @WebMethod @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public void editGalleryImage(long id, String description, byte[] image) { try { List<GalleryImage> imageList = listGalleryImages(); for (GalleryImage img : imageList) { if (img.id == id) { img.description = description; img.image = image; System.out.println("Found, and edited..."); UserTransaction tx = context.getUserTransaction(); tx.begin(); entityManager.persist(img); tx.commit(); return; } } } catch (Exception err) { err.printStackTrace(); } } } |
De foutmelding (1 van de vele verschillende):
code:
1
| 12:33:30,488 WARN [AbstractEntityManagerImpl] Calling joinTransaction() on a non JTA EntityManager |
De foutmelding hierboven wisselt nog wel eens met de verschillende implementaties van de Transactions.
Er word ook wel eens gezegd dat de transaction niet gestart is (wat komt als ik niets met transactions doe)
In alle gevallen word er niets geupdate of gedelete.
Wie weet er raad?
- Thijs
Even niets...