Передовые практики для обслуживания кода в Java - PL / SQL - LDAP для получения идентификаторов и синхронизации всех - PullRequest
0 голосов
/ 26 марта 2020

Я работаю в Java проекте веб-приложения (Spring, Hibernate, Oracle DB, Tomcat 8), openLDAP и PL / SQL, которые синхронизируют оба.

openLDAP имеет такую ​​структуру:

An user entry: "uid=user00001, ou=People, cd=company,dc=com"

имеет список имен связанных атрибутов:

{
  uid   = "user0001",
  cn    = "User name",
  sn    = "User surname",
  passw = "userPasswMd5"
 }
 //  more 100 different attributes....

ТАБЛИЦА oracle db ATTRIBUTES содержит те же атрибуты openLDAP с идентификатором:

CREATE TABLE ATTRIBUTES
(
  ID_ATTRIB          NUMBER                      NOT NULL,
  NAME_ATTRIB        VARCHAR2(1000 BYTE)         NOT NULL
);
--  same openldap attributes....

INSERT INTO ATTRIBUTES (ID_ATTRIB, DESC_ATTRIB) VALUES(1,'uid');
INSERT INTO ATTRIBUTES (ID_ATTRIB, DESC_ATTRIB) VALUES(2,'cn');
INSERT INTO ATTRIBUTES (ID_ATTRIB, DESC_ATTRIB) VALUES(3,'sn');
INSERT INTO ATTRIBUTES (ID_ATTRIB, DESC_ATTRIB) VALUES(4,'passw');

Для каждого атрибута openLDAP я определил одно и то же имя атрибута для констант в PL SQL и финальных переменных в Java, чтобы получить идентификаторы. Например:

В PL SQL я использую функции для получения идентификатора атрибута:

-- Get id of an attribute by name attribute
CREATE OR REPLACE FUNCTION getIdAttribByName (p_attribName in varchar) 
is 
 id number;
begin
 SELECT A.id_attrib into id from ATTRIBUTES A WHERE A.atribName = p_attribName;
 return id;
end,

-- And define a constant to use in the plsql/java code:
ID_ATRIB_UID     CONSTANT NUMBER := getIdAttribByName ('uid') ;

В Java Я использую методы для получения идентификатора атрибута:

  public int getIdAttribByName( java.lang.String p_attribName){
        Query query = createSQLQuery("SELECT A.id_attrib from ATTRIBUTES A 
                                      WHERE A.atrribName = :p_attribName");
        query.setString("p_attribName", p_attribName);        

        List<int> idlist = query.idlist();
        return (int) idlist.get(0);   
    }

//And define a final var with the same PLSQL name to use in the plsql/java code:
final int ID_ATRIB_UID = AttibutesClassDao.getIdAttribByName(uid);

Итак,

  1. Правильно ли определять константы или конечные переменные, назначенные для запросов к БД, и получать идентификаторы в этом сценарии? Я также беспокоюсь о производительности.

  2. Должен ли я вызывать функции pl sql из java вместо метода повтора / функций в обоих местах? Я тоже беспокоюсь о производительности, мне бы хотелось, чтобы приложение java / Tomcat имело наименьшую рабочую нагрузку, а база данных Oracle - самая высокая.

  3. Это хорошая практика или это неправильно?

Спасибо.

...