Hallo liebe Community,
ich hoffe mir kann hier jemand weiterhelfen. Ich arbeite gerade an einer Webapp die mittels Google Pubsub Messages empfängt. Das funktionietr soweit auch alles wunderbar. Nun möchte ich bei jedem Fetch einer Message diese Daten in einer Datenbank speichern. Ich habe schon probiert die Insert-Methode direkt über das Servlet aufzurufen leider ohne Erfolg. Die Datenbank gibt mir zwar einen Traffic-Request aber kein Datensatz wird angelegt.
Hier mal meine Servelet:
Mein Testmethode zum einfügen der Daten sieht wie folgt aus:
ich hoffe mir kann hier jemand weiterhelfen. Ich arbeite gerade an einer Webapp die mittels Google Pubsub Messages empfängt. Das funktionietr soweit auch alles wunderbar. Nun möchte ich bei jedem Fetch einer Message diese Daten in einer Datenbank speichern. Ich habe schon probiert die Insert-Methode direkt über das Servlet aufzurufen leider ohne Erfolg. Die Datenbank gibt mir zwar einen Traffic-Request aber kein Datensatz wird angelegt.
Hier mal meine Servelet:
Java:
public class FetchMessagesServlet extends HttpServlet {
/**
* Number of messages for a single fetch call.
*/
private static final int MAX_COUNT = 20;
@Override
@SuppressWarnings("unchecked")
public final void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws IOException {
// First retrieve messages from the memcache
MemcacheService memcacheService = MemcacheServiceFactory.getMemcacheService();
List<String> messages = (List<String>) memcacheService.get(Constants.MESSAGE_CACHE_KEY);
if (messages == null) {
// If no messages in the memcache, look for the datastore
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
PreparedQuery query = datastore
.prepare(new Query("PubsubMessage").addSort("receipt-time", Query.SortDirection.DESCENDING));
messages = new ArrayList<>();
for (Entity entity : query.asIterable(FetchOptions.Builder.withLimit(MAX_COUNT))) {
String message = (String) entity.getProperty("message");
messages.add(message);
}
// Store them to the memcache for future use.
memcacheService.put(Constants.MESSAGE_CACHE_KEY, messages);
}
ObjectMapper mapper = new ObjectMapper();
resp.setContentType("application/json; charset=UTF-8");
mapper.writeValue(resp.getWriter(), messages);
resp.getWriter().close();
}
}
Java:
public class ReceiveMessageServlet extends HttpServlet {
@Override
public final void doPost(final HttpServletRequest req,
final HttpServletResponse resp)
throws IOException {
// Validating unique subscription token before processing the message
String subscriptionToken = System.getProperty(
Constants.BASE_PACKAGE + ".subscriptionUniqueToken");
if (!subscriptionToken.equals(req.getParameter("token"))) {
resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
resp.getWriter().close();
return;
}
ServletInputStream inputStream = req.getInputStream();
// Parse the JSON message to the POJO model class
JsonParser parser = JacksonFactory.getDefaultInstance()
.createJsonParser(inputStream);
parser.skipToKey("message");
PubsubMessage message = parser.parseAndClose(PubsubMessage.class);
// Store the message in the datastore
Entity messageToStore = new Entity("PubsubMessage");
messageToStore.setProperty("message",
new String(message.decodeData(), "UTF-8"));
messageToStore.setProperty("receipt-time", System.currentTimeMillis());
DatastoreService datastore =
DatastoreServiceFactory.getDatastoreService();
datastore.put(messageToStore);
// Invalidate the cache
MemcacheService memcacheService =
MemcacheServiceFactory.getMemcacheService();
memcacheService.delete(Constants.MESSAGE_CACHE_KEY);
// Acknowledge the message by returning a success code
resp.setStatus(HttpServletResponse.SC_OK);
resp.getWriter().close();
App a = new App();
a.insert();
}
}
Mein Testmethode zum einfügen der Daten sieht wie folgt aus:
Code:
public User insert(){
Connection connection = null;
try {
connection = DBConnection.connection();
String schema = connection.getSchema();
System.out.println("Successful connection - Schema: " + schema);
System.out.println("Insert data example:");
System.out.println("=========================================");
// Prepared statement to insert data
String insertSql = "INSERT INTO [user] (id, vorname, nachname, "
+ " email) VALUES (?,?,?,?);";
// java.util.Date date = new java.util.Date();
// java.sql.Timestamp sqlTimeStamp = new java.sql.Timestamp(date.getTime());
try (PreparedStatement prep = connection.prepareStatement(insertSql)) {
prep.setInt(1, 1);
prep.setString(2, "firstname");
prep.setString(3, "lastname");
prep.setString(4, "test@gmail.com");
//prep.setTimestamp(5, sqlTimeStamp);
int count = prep.executeUpdate();
System.out.println("Inserted: " + count + " row(s)");
}
}
catch (Exception e) {
e.printStackTrace();
}