Лучший способ обработать СВЕЧИ в распределенных базах данных Oracle

PECS (производитель extends и потребитель super)

Мнемоника → принцип Get и Put.

Этот принцип гласит, что:

  • Используйте расширенный подстановочный знак, когда вы получаете только значения из структуры.
  • Используйте суперсимвол, когда вы только Поместите значения в структуру.
  • И не используйте подстановочный знак, когда вы оба получаете и ставите.

В Java параметры и параметры типового типа не поддерживают наследование следующим образом.

class Super {
    void testCoVariance(Object parameter){} // method Consumes the Object
    Object testContraVariance(){ return null;} //method Produces the Object
}

class Sub extends Super {
    @Override
    void testCoVariance(String parameter){} //doesn't support eventhough String is subtype of Object

    @Override
    String testContraVariance(){ return null;} //compiles successfully i.e. return type is don't care 
}

Принцип подстановки Лискова: Массивы являются ковариантными (небезопасными), но Generics не являются, то есть инвариантными (безопасными). Принцип подстановки не работает с параметризованными типами, что означает, что это незаконно писать. Ковариант просто означает, что X является подтипом Y, тогда X[] также будет подтипом Y[].

Object name= new String("prem"); //works
List numbers = new ArrayList();//gets compile time error

Integer[] myInts = {1,2,3,4};
Number[] myNumber = myInts;
myNumber[0] = 3.14; //attempt of heap pollution i.e. at runtime gets java.lang.ArrayStoreException: java.lang.Double(we can fool compiler but not run-time)

List list=new ArrayList<>();
list.add("prem");
List listObject=list; //Type mismatch: cannot convert from List to List at Compiletime  

больше примеров

ограниченный (т. е. заголовок к чему-либо) подстановочный знак: Есть 3 разных варианта подстановочных знаков:

  • In-variance / Non-variance: ? или ? extends Object - неограниченный подстановочный знак. Он обозначает семью всех типов. Использовать, когда вы оба получаете и ставите.
  • Соотношение: ? extends T (семейство всех типов, которые являются подтипами T) - подстановочный знак с верхней границей. T является самым верхним классом в иерархии наследования. Используйте подстановочный знак extends, когда вы получаете только значения из структуры.
  • Contra-variance: ? super T (семейство всех типов, которые являются супертипами T) - подстановочный знак с нижней границей. T является самым низким классом в иерархии наследования. Используйте подстановочный символ super, если вы только поместите значения в структуру.

Примечание: подстановочный знак ? означает ноль или один раз, представляет неизвестный тип. Подстановочный знак может использоваться как тип параметра, никогда не используемый в качестве аргумента типа для вызова общего метода, создания экземпляра универсального класса (т. Е. При использовании подстановочного знака, эта ссылка не используется в другом месте программы, как мы используем T).

class Shape { void draw() {}}

class Circle extends Shape {void draw() {}}

class Square extends Shape {void draw() {}}

class Rectangle extends Shape {void draw() {}}

public class TestContraVariance {
 /*
   * Example for an upper bound wildcard (Get values i.e Producer `extends`)
   * 
   * */  

    public void testCoVariance(List list) {
        list.add(new Shape()); // Error:  is not applicable for the arguments (Shape) i.e. inheritance is not supporting
        list.add(new Circle()); // Error:  is not applicable for the arguments (Circle) i.e. inheritance is not supporting
        list.add(new Square()); // Error:  is not applicable for the arguments (Square) i.e. inheritance is not supporting
        list.add(new Rectangle()); // Error:  is not applicable for the arguments (Rectangle) i.e. inheritance is not supporting
        Shape shape= list.get(0);//compiles so list act as produces only

        /*You can't add a Shape,Circle,Square,Rectangle to a List 
         * You can get an object and know that it will be an Shape
         */         
    }
      /* 
* Example for  a lower bound wildcard (Put values i.e Consumer`super`)
* */
    public void testContraVariance(List list) {
        list.add(new Shape());//compiles i.e. inheritance is supporting
        list.add(new Circle());//compiles i.e. inheritance is  supporting
        list.add(new Square());//compiles i.e. inheritance is supporting
        list.add(new Rectangle());//compiles i.e. inheritance is supporting
        Shape shape= list.get(0); // Error: Type mismatch, so list acts only as consumer
        Object object= list.get(0); // gets an object, but we don't know what kind of Object it is.

        /*You can add a Shape,Circle,Square,Rectangle to a List 
        * You can't get an Shape(but can get Object) and don't know what kind of Shape it is.
        */  
    }
}

generics и примеры

14
задан APC 30 January 2013 в 23:30
поделиться

4 ответа

Да, это грязно, я не могу думать о способе избежать его все же.
Вы могли скрыть часть беспорядка от клиента путем помещения создания временной таблицы в хранимую процедуру (и использование "выполняются непосредственный" для, чтобы создания они представляют в виде таблицы)
Одна вещь, которую необходимо будет не упустить, оставлен по временным таблицам (должен что-то приводить половину к сбою пути через сессию, прежде чем у Вас было время для чистки его) - Вы могли запланировать задание оракула для периодического выполнения и удалить любые перенесенные таблицы.

5
ответ дан 1 December 2019 в 12:54
поделиться

Вы могли использовать представления materalized для обработки всего управления "кэшем". ItВґs, не прекрасный, но работы в большинстве случаев :)

1
ответ дан 1 December 2019 в 12:54
поделиться

Вы имеете определенный сценарий в виду? Например, если LOB содержит файлы, и Вы находитесь на интранет компании, возможно, можно записать хранимую процедуру, чтобы извлечь файлы к известному каталогу в сети и получить доступ к ним оттуда.

0
ответ дан 1 December 2019 в 12:54
поделиться

В этом конкретном случае может единственный способ, которым могут связаться эти две системы, использует dblink.

кроме того, решение для таблицы не настолько ужасно, это просто грязно для "кэширования" данных по моей стороне dblink.

0
ответ дан 1 December 2019 в 12:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: