টমক্যাট ভি 8.5.24 দিয়ে শুরু করার এটির একটি উপায় রয়েছে।
তারা নামকরণের 2 পদ্ধতি চালু করেছে:
- reloadSslHostConfig (স্ট্রিং হোস্টনাম) - একটি নির্দিষ্ট হোস্ট পুনরায় লোড করতে
- পুনরায় লোড এসএসএলহস্টকনফিজ () - সমস্ত পুনরায় লোড করুন
তাদের বিভিন্ন উপায়ে বলা যেতে পারে:
- জেএমএক্স ব্যবহার করছি
- ব্যবস্থাপক পরিষেবা ব্যবহার করে (টমক্যাট v9.xx এ)
- কাস্টম প্রোটোকল তৈরি করে - আমি আমার গবেষণার সময় এইভাবে খুঁজে পেয়েছি
টমক্যাট ডক্সে উপায় 1 এবং উপায় 2 এর বিশদ সহজেই পাওয়া যায়।
উপায় 3 ব্যবহার সম্পর্কে কীভাবে যেতে হবে তার বিশদ:
- উদাহরণস্বরূপ আপনার পছন্দসই প্রোটোকল প্রসারিত একটি শ্রেণি করুন। Http11NioProtocol
- প্রয়োজনীয় পদ্ধতিগুলি ওভাররাইড করুন এবং ডিফল্ট আচরণ রাখতে কেবল তাদের মধ্যে সুপার কল করুন
- এই পুনরায় লোড এসএসএলહોস্টকনফিগস পদ্ধতিটি সময়ে সময়ে কল করতে এই শ্রেণিতে একটি থ্রেড তৈরি করুন
- এই ক্লাসটিকে একটি পাত্রে প্যাকেজ করুন এবং সেই জারটি টমক্যাটের লিব ফোল্ডারে রাখুন
- এই কাস্টম সংজ্ঞায়িত প্রোটোকলটি ব্যবহার করতে সার্ভার.এক্সএমএল সংযোগকারীতে প্রোটোকল সম্পাদনা করুন
নীচে নমুনা কোড খুঁজুন:
প্রধান প্রোটোকল শ্রেণি:
package com.myown.connector;
import java.io.File;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.net.URL;
import java.net.URLConnection;
import java.nio.file.StandardCopyOption;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentMap;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.net.ssl.SSLSessionContext;
import org.apache.coyote.http11.Http11NioProtocol;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.modeler.Registry;
import org.apache.tomcat.util.net.AbstractEndpoint;
import org.apache.tomcat.util.net.AbstractJsseEndpoint;
import org.apache.tomcat.util.net.GetSslConfig;
import org.apache.tomcat.util.net.SSLContext;
import org.apache.tomcat.util.net.SSLHostConfig;
import org.apache.tomcat.util.net.SSLHostConfigCertificate;
import org.apache.tomcat.util.net.SSLImplementation;
import org.apache.tomcat.util.net.SSLUtil;
public class ReloadProtocol extends Http11NioProtocol {
private static final Log log = LogFactory.getLog(Http12ProtocolSSL.class);
public ReloadProtocol() {
super();
RefreshSslConfigThread refresher = new
RefreshSslConfigThread(this.getEndpoint(), this);
refresher.start();
}
@Override
public void setKeystorePass(String s) {
super.setKeystorePass(s);
}
@Override
public void setKeyPass(String s) {
super.setKeyPass(s);
}
@Override
public void setTruststorePass(String p) {
super.setTruststorePass(p);
}
class RefreshSslConfigThread extends Thread {
AbstractJsseEndpoint<?> abstractJsseEndpoint = null;
Http11NioProtocol protocol = null;
public RefreshSslConfigThread(AbstractJsseEndpoint<?> abstractJsseEndpoint, Http11NioProtocol protocol) {
this.abstractJsseEndpoint = abstractJsseEndpoint;
this.protocol = protocol;
}
public void run() {
int timeBetweenRefreshesInt = 1000000; // time in milli-seconds
while (true) {
try {
abstractJsseEndpoint.reloadSslHostConfigs();
System.out.println("Config Updated");
} catch (Exception e) {
System.out.println("Problem while reloading.");
}
try {
Thread.sleep(timeBetweenRefreshesInt);
} catch (InterruptedException e) {
System.out.println("Error while sleeping");
}
}
}
}
}
সার্ভার.এক্সএমএলে সংযোগকারীটিকে প্রোটোকল হিসাবে এটি উল্লেখ করা উচিত:
<Connector protocol="com.myown.connector.ReloadProtocol"
..........
আশাকরি এটা সাহায্য করবে.
bindOnInit="false"
বিকল্পের সাথে কনফিগার করা থাকলে এটি কাজ করবে ।