PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

सर्वलेट .jar निर्भरता नल सूचक

एक वर्ग में मैन्युअल रूप से डेटा स्रोत नहीं बनाने और जेएनडीआई डेटाबेस पूलिंग का उपयोग करने की सिफारिश के संबंध में लुइगी के इनपुट के आधार पर, मैं काम करने के लिए नीचे समाधान प्राप्त करने में सक्षम था। मेरा अनुकूलन इस लिंक पर बहुत अधिक आधारित है:http://www.codejava.net/servers/tomcat/ विन्यास-jndi-datasource-for-database-connection-pooling-in-tomcat

टुकड़े:टॉमकैट 8.0, पोस्टग्रेस्क्ल-जेडीबीसी ड्राइवर, डीबीइंजिन बीन, सर्वलेट

dbEngine बीन में तीन वर्ग होते हैं:DBEngine.java, Pool.java, और SQLPS.java (एक SQL स्टेटमेंट लाइब्रेरी) जो सभी एक जार फ़ाइल में लिपटे हुए हैं और सर्वलेट में आयात किए गए हैं और एक क्लासपाथ निर्यात निर्भरता के रूप में चिह्नित हैं।

बीन को कॉल करने वाला सर्वलेट इस तरह दिखता है:

 package com.engine.main;

 import java.io.IOException;
 import java.io.PrintWriter;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.concurrent.ConcurrentMap;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 import javax.servlet.AsyncContext;
 import javax.servlet.AsyncEvent;
 import javax.servlet.AsyncListener;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import sslog4java.LogLevel;
 import sslog4java.Logger;
 import com.google.gson.Gson;
 import com.DBbean.DBEngine;

 @WebServlet("/PrimaryEngine")
 public class PrimaryEngine extends HttpServlet {
      private static final long serialVersionUID = 1L;
      private DBEngine db = null;

      private static String filePath = "";
      private static String fileName = "";
      Logger fLogger = null;

      public void init(ServletConfig config) throws ServletException{
           super.init(config);
           ServletContext scxt = config.getServletContext();
           filePath = scxt.getRealPath("/WEB-INF") + "\\logs\\";
           fileName = "loggerFileName";
           fLogger = new Logger(filePath, fileName, LogLevel.DEBUG);
           try {
                // passed the servlet context into the DBengine for the pool to use
                db = new DBEngine(new InitialContext(), fLogger);
           } catch (SQLException | NamingException e) {
                e.printStackTrace();
           }
      }

      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           PrintWriter out = response.getWriter();
           if(request.getParameterMap().containsKey("param") && request.getParameter("param").equals("paramValue")){
                test = db.DBdebug();
                out.println(test);
                return;
           }
      }
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           doGet(request, response);
      }
 }

DbEngine.java ऐसा दिखता है:

 package com.DBbean;

 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Map;
 import java.util.concurrent.ConcurrentMap;
 import javax.naming.Context;
 import sslog4java.Logger;
 import com.google.common.collect.MapMaker;

 public class DBEngine {

      private Pool pool = null;
      private Connection con = null;
      private Logger fLogger;

      public DBEngine(Context initCtx, Logger logr) throws SQLException{
           this.fLogger = logr;
           // passed the servlet context into the Pool.java
           this.pool = new Pool(initCtx);
           this.con = pool.getConnection();
      }

      public String DBdebug(){

           Connection conn = pool.getConnection();

           try {
                String ps = SQLPS.debugSQL;
                PreparedStatement ps2 = conn.prepareStatement(ps);
                ResultSet rs = ps2.executeQuery();

                if(rs.next()){
                     return "Success";
                } else return "Fail";

           } catch (SQLException e) {
                e.printStackTrace();
           }

           return null;
      }
 }

और Pool.java ऐसा दिखता है:

 package com.DBbean;

 import java.sql.Connection;
 import java.sql.SQLException;
 import javax.naming.Context;
 import javax.naming.NamingException;
 import javax.sql.DataSource;

 public class Pool {

      Context ctx;

      public Pool(Context context){
           ctx = context;
      }


     public Connection getConnection() {

           try {
                DataSource ds = (DataSource) ctx.lookup("java:/comp/env/jdbc/postgres4" );
                return ds.getConnection();
           } catch (SQLException | NamingException sne) {
                sne.printStackTrace();
                return null;
           }
     }
 }

मुझे इन पंक्तियों को $CATALINA_HOME/conf/context.xml में जोड़ना था:

<Resource
name="jdbc/postgres4"
auth="Container"
type="javax.sql.DataSource"
maxActive="8"
maxIdle="8"
driverClassName="org.postgresql.Driver"
url="*URL*"
username="*UserName*"
password="*Password*"
/>

और इन पंक्तियों को $CATALINA_HOME/conf/web.xml:

<resource-ref>
<description>postgreSQL Datasource</description>
<res-ref-name>jdbc/postgres4</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

और postgresql-jdbc जार $CATALINA_HOME/lib

. में चला गया


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. AES-256-CBC से pgcrypto का उपयोग करके डिक्रिप्ट नहीं किया जा सकता लेकिन AES-128-CBC ठीक है

  2. क्या मुझे INDEX और UNIQUE INDEX दोनों को निर्दिष्ट करना चाहिए?

  3. एक ताजा रेल परियोजना में SQLite से PostgreSQL में बदलें

  4. पोस्टग्रेएसक्यूएल त्रुटि में WHERE क्लॉज में एग्रीगेट्स की अनुमति नहीं है

  5. MS Access को PostgreSQL में माइग्रेट करें