প্রতি অ্যাপ্লিকেশন মোতায়েনের জন্য সমাধান
সমস্যাটি সমাধান করার জন্য আমি এটি লিখেছি এমন একটি শ্রোতা: ড্রাইভার নিজেই নিবন্ধিত হয়েছে এবং সে অনুযায়ী কাজ করে তবে এটি স্বয়ংক্রিয়ভাবে আবিষ্কার করে it
গুরুত্বপূর্ণ: এটি ব্যবহার করা বোঝায় কেবলমাত্র চালক জার যখন -আইএনএফ / লিবিতে স্থাপন করা হয় তবে টমকেট / লিবিবে নয়, যেমনটি অনেকেই পরামর্শ দেন, যাতে প্রতিটি অ্যাপ্লিকেশন তার নিজের চালকের যত্ন নিতে পারে এবং কোনও টমকাট চালাতে পারে না । এটি আইএমএইচও হওয়া উচিত।
অন্য শ্রেনীর আগে কেবল আপনার ওয়েব.এক্সএমএলে শ্রোতাদের কনফিগার করুন এবং উপভোগ করুন।
ওয়েব.এক্সএমএল শীর্ষের কাছাকাছি যুক্ত করুন :
<listener>
<listener-class>utils.db.OjdbcDriverRegistrationListener</listener-class>
</listener>
ইউজ / ডিবি / ওজেডবিসিড্রাইভার রেজিস্ট্রেশনলিস্টার.জভা হিসাবে সংরক্ষণ করুন :
package utils.db;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import oracle.jdbc.OracleDriver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Registers and unregisters the Oracle JDBC driver.
*
* Use only when the ojdbc jar is deployed inside the webapp (not as an
* appserver lib)
*/
public class OjdbcDriverRegistrationListener implements ServletContextListener {
private static final Logger LOG = LoggerFactory
.getLogger(OjdbcDriverRegistrationListener.class);
private Driver driver = null;
/**
* Registers the Oracle JDBC driver
*/
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
this.driver = new OracleDriver(); // load and instantiate the class
boolean skipRegistration = false;
Enumeration<Driver> drivers = DriverManager.getDrivers();
while (drivers.hasMoreElements()) {
Driver driver = drivers.nextElement();
if (driver instanceof OracleDriver) {
OracleDriver alreadyRegistered = (OracleDriver) driver;
if (alreadyRegistered.getClass() == this.driver.getClass()) {
// same class in the VM already registered itself
skipRegistration = true;
this.driver = alreadyRegistered;
break;
}
}
}
try {
if (!skipRegistration) {
DriverManager.registerDriver(driver);
} else {
LOG.debug("driver was registered automatically");
}
LOG.info(String.format("registered jdbc driver: %s v%d.%d", driver,
driver.getMajorVersion(), driver.getMinorVersion()));
} catch (SQLException e) {
LOG.error(
"Error registering oracle driver: " +
"database connectivity might be unavailable!",
e);
throw new RuntimeException(e);
}
}
/**
* Deregisters JDBC driver
*
* Prevents Tomcat 7 from complaining about memory leaks.
*/
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
if (this.driver != null) {
try {
DriverManager.deregisterDriver(driver);
LOG.info(String.format("deregistering jdbc driver: %s", driver));
} catch (SQLException e) {
LOG.warn(
String.format("Error deregistering driver %s", driver),
e);
}
this.driver = null;
} else {
LOG.warn("No driver to deregister");
}
}
}