Ich bin neu in Java EE, vor allem mit Verbindungspools (die ich nicht einmal richtig verstehe). Ich habe versucht, eine grundlegende JDBC-Ressource mit Netbeans, mit New >> JDBC Resource. Er schuf die folgenden Glassfish-resources.xml:Verwenden von JDBC-Ressource und Servlet von Netbeans
<resources>
<jdbc-resource enabled="true" jndi-name="jdbc/myDB" object-type="user" pool-name="miConnectionPool">
<description/>
</jdbc-resource>
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="miConnectionPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
<property name="URL" value="jdbc:mysql://localhost:3306/pruebasbd?relaxAutoCommit="true""/>
<property name="User" value="root"/>
<property name="Password" value="root"/>
</jdbc-connection-pool>
</resources>
Danach wird wieder verwendet ich ein altes Servlet "MiServlet", die in der Standard-Paket. Dieses Servlet hat vor einiger Zeit mit den typischen Anfangspraktiken mit Servlets gearbeitet, aber jetzt wird es keine Antwort mehr senden. Ich habe es in der web.xml konfiguriert, so dass es im URL-Muster "localhost/myProject/index" aufgerufen wird, aber nichts wird angezeigt.
Hier haben Sie den XML-config:
<servlet>
<servlet-name>MiServlet</servlet-name>
<servlet-class>MiServlet</servlet-class>
</servlet>
(...)
<servlet-mapping>
<servlet-name>MiServlet</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
Dies ist die Servlet-Methode Process jetzt. Ich hob die Teile, in denen ich versuche, meine neu erstellten JDBC-Ressource zu verwenden (ich habe ernsthaft keine Ahnung, ob ich falsch oder nicht tue!):
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
**// Context creation
Context initContext = new InitialContext();
Context webContext = (Context) initContext.lookup("java:/comp/env");
DataSource ds = (DataSource) webContext.lookup("jdbc/myDB");
Connection dbCon = ds.getConnection();**
PreparedStatement ps = dbCon.prepareStatement("SELECT * FROM person");
ResultSet rs = ps.executeQuery();
String res = "BEGINNING\n";
while(rs.next()){
res += rs.getString(1)+"\n";
}
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet MiServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet MiServlet at " + request.getContextPath() + "</h1>");
out.println("<p>"+res+"</p>");
out.println("</body>");
out.println("</html>");
}
} catch (NamingException ex) {
Logger.getLogger(MiServlet.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(MiServlet.class.getName()).log(Level.SEVERE, null, ex);
}
}
Diesen einfachen Test sollte zeigen all Die erste Spalte der Person von meinem WAMP-MySQL-Server auf demselben Computer unter Verwendung der JDBC-Ressource, die ich zuvor mit dem NetBeans-Assistenten erstellt habe. Aber alles, was ich bekommen, ist dieser leere HTML-Seite, mit nicht einmal den statischen Inhalt in das Servlet geschrieben (was zeigt, dass es nicht einmal nennt sich immer):
Ich rufe bei
... und ich:
<html>
<head>
<link rel="alternate stylesheet" type="text/css" href="resource://gre-resources/plaintext.css" title="Ajustar líneas largas">
</head>
<body>
<pre></pre>
</body>
</html>
Was mache ich falsch?
edit:
Jetzt mit M-Mariscal Antwort des Code verwaltet sie zu verbinden, aber es kann immer noch keine Tabelle oder Schema finden. Wenn ich darauf, die Abfrage pruebasbd.persona:
Verursacht durch: org.apache.derby.client.am.SqlException: El esquema 'PRUEBASBD' no existe. (Schema PRUEBASBD existiert nicht)
, wenn ich es auf den Tisch "Persona" Punkt (da ich dieses Schema in der Glassfish-resources.xml bereits ausgewählt, wie zuvor angegeben):
Grave : java.sql.SQLSyntaxErrorException: La tabla/vista 'PERSONA' keine existe. (Tabelle/Ansicht PERSONA existiert nicht)
Vielen Dank für Ihre Hilfe! Aber es funktioniert immer noch nicht :(, überprüfen Sie diese Ausnahme: "Advertencia: StandardWrapper.Valve [JdbcServlet]: Servlet.service() für Servlet JdbcServlet warf Ausnahme java.lang.NullPointerException \t bei JdbcServlet.doGet (JdbcServlet.java:51)" Es scheint, dass das "Pool" -Objekt nicht auf die "init" -Methode initialisiert. – Zerok
Besser posten Sie Ihre Ausnahme auf Ihre Frage bitte;) –
Ich schaffte es zu arbeiten! Aber es gibt immer noch Fehler wie "Tabelle PERSONA" nicht gefunden (ja, der Name meiner Tabelle ist "persona", überprüfte es). Es funktioniert auch nicht, wenn ich vorher das DB-Schema "pruebasbd" gesetzt habe. Lassen Sie mich die Frage aktualisieren. – Zerok