Come promesso eccovi il mio codice, anche se so già che il problema non è qui.
Secondo me è un impostazione del server se non un baco!
Questa è la semplicissima servlet:
codice:
public class WriteAll extends HttpServlet {
@Resource(mappedName="jms/WriteDataFactory")
private ConnectionFactory connectionFactory;
@Resource(mappedName="jms/WriteData")
private Queue queue;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer messageProducer = session.createProducer(queue);
ObjectMessage message = session.createObjectMessage();
String nome=request.getParameter("nome");
if (nome!=null && !nome.equals("")) {
Clienti e = new Clienti();
e.setNome(nome);
message.setObject(e);
messageProducer.send(message);
messageProducer.close();
connection.close();
//response.sendRedirect("index.jsp");
return;
}
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet WriteAll</title>");
out.println("</head>");
out.println("<body style=\"FONT-FAMILY: VERDANA; FONT-SIZE: 12px\">");
out.println("<h3>Servlet WriteAll at " + request.getContextPath () + "</h3>");
out.println("<form>");
out.println("Nome Cliente: <input type='text' name='nome'>
");
out.println("<input type='submit'>
");
out.println("</form>");
out.println("</body>");
out.println("</html>");
} catch (JMSException ex) {
ex.printStackTrace();
}
out.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
public String getServletInfo() {
return "Short description";
}
}
E questo è l'altrettanto semplicissimo Messege-Driven Bean che viene usato dalla servlet qui sopra per fare l'inserimento:
codice:
@MessageDriven(mappedName = "jms/WriteData", activationConfig = {
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
public class WriteData implements MessageListener {
@PersistenceContext
private EntityManager em;
@Resource
private MessageDrivenContext mdc;
public WriteData() {
}
public void onMessage(Message message) {
ObjectMessage msg = null;
try {
if (message instanceof ObjectMessage) {
msg = (ObjectMessage) message;
Clienti e = (Clienti) msg.getObject();
save(e);
}
} catch (JMSException e) {
e.printStackTrace();
mdc.setRollbackOnly();
} catch (Throwable te) {
te.printStackTrace();
}
}
public void save(Object object) {
em.persist(object);
}
}