Последние несколько недель я искал решения для совместного использования объекта между двумя контекстами / файлами войны. Есть несколько способов сделать это, и один из них - JNDI.
Я не очень хорошо знаком с JNDI, используемым в Tomcat, поэтому хотел бы прояснить несколько вопросов:
В основном у меня есть экземпляр объекта, который будет предоставлять следующие услуги более чем одному контексту / приложению
Каждое приложение будет вызывать этот объект для проверки пользователя перед обработкой любые запросы. Я не понимаю, как объект будет работать, если он будет храниться в JNDI. Я видел несколько примеров того, как JNDI используется в Tomcat, но 99% примеров показывают, как настроить источник данных JDBC.
Как бы я сделал то же самое в моем случае и, что наиболее важно, как бы инициализировать объект, прежде чем он будет помещен в дерево JNDI. Когда он находится в дереве JNDI, как он обновляется?
Думаю, я ищу простой пример использования JNDI в Tomcat, но не для соединений с базой данных, а для объектов типа поставщика услуг.
Я читал это руководство http://docs.oracle.com/javase/tutorial/jndi/ops/bind.html , но он больше ориентирован на каталоги именования LDAP, что на самом деле не помогает.
Хорошо, я нашел пример в указанном выше руководстве, который показывает, как «привязать» объект к дереву JNDI.
class SerObj {
public static void main(String[] args) {
// Set up environment for creating initial context
Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");
try {
// Create the initial context
Context ctx = new InitialContext(env);
// Create object to be bound
Button b = new Button("Push me");
// Perform bind
ctx.bind("cn=Button", b);
// Check that it is bound
Button b2 = (Button)ctx.lookup("cn=Button");
System.out.println(b2);
// Close the context when we're done
ctx.close();
} catch (NamingException e) {
System.out.println("Operation failed: " + e);
}
}
}
Должно быть, мне не хватает чего-то очень простого. Вот еще один пример, который я нашел, который показывает, как настроить объект JNDI в Tomcat - http://flylib.com/books/en/4.255.1.275/1/
com.jspservletcookbook .StockPriceBean
инициализирован? com.jspservletcookbook.StockPriceBean
- мне нужно, чтобы он был одним и тем же экземпляром для всех веб-приложений, которые будут обращаться к объекту. @Ben Brunk - В настоящий момент данные сеанса хранятся на карте, которой управляет одно из приложений (контекст). Все, что мне нужно, это чтобы другие приложения вызывали это приложение, чтобы проверить, действителен ли сеанс.Моя проблема в том, что для того, чтобы эти приложения получали услуги приложения, которое управляет данными сеанса, мне нужно использовать JNDI, чтобы они могли получить ссылку на соответствующий объект.
Данные не будут храниться в JNDI. Я просто хочу использовать JNDI как средство, позволяющее приложениям находить и использовать объект Session Manager. Проблема, однако, в том, что все, что я читал о JNDI, наводит меня на мысль, что он используется для создания новых объектов каждый раз, когда объект просматривается или «просматривается» в каталоге.
Вот диаграмма, которая, как мне кажется, показывает, чего я хочу достичь:
@EJP - Просто для пояснения,перечисленные выше функции являются лишь примерами того, что может делать общий объект. Они были предоставлены только в качестве примера. Все функции, которые он будет выполнять, связаны с пользователем и вошедшим в систему сеансом. Например, такие вещи, как информация об учетной записи (имя пользователя, последний вход в систему и т. Д.), Информация о пароле (срок действия и т. Д.), Права пользователя (то есть, к каким областям приложения пользователю разрешен доступ).
Учитывая, что вопрос действительно связан с мульти-контекстной связью через JNDI (или любым другим способом), а не с требованиями объекта, на самом деле нет смысла перечислять все, что объект должен делать, поэтому i просто перечислил примеры того, что он может делать.
Прошу прощения, если то, как я поставил вопрос, кого-то смутил.