четверг, 29 августа 2013 г.

Apply-method и Object

class FooMaker {
  def apply() = new Foo
} 

val new Foo = FooMaker() // вызов apply-метода
 
//--------------------------------
  
class Bar {
  def apply() = 0
}
val bar = new Bar
bar() // = 0

Как видно apply-метод вызывается как на классе так и интстанциях этого класса.

В scala есть понятие Object, он позволяет иметь только одну инстанцию этого класса, мы определяем получается сразу обьект, а не класс. Чаще всего это используется для фабрик. Вот пример широкораспространенной конструкци в scala :
class Bar(foo: String)

object Bar {
  def apply(foo: String) = new Bar(foo)
}

val bar = Bar()

Но еще обьекты используются не только для этого, определив обьек в CLI мы увидем вывод:
object ColorHolder {...}
defined module ColorHoler
Слово module - означает, что за задумкой архитекторов языка, обьект является частью модульной системы scala.
Ведь наш файл с методом мейн всегда содержит обьект в котором и написан запускающий код нашего приложения.

Разница между abstract class и trait

Пример абстрактного класса
abstract class Shape {
  def getArea(): Int
}

trait - коллекция полей и функционала, которые можно расширять либо "вмешивать" в классы. Разница между abstract class и trait:
1) Множественное наследование - Traits
2) Возможность конструктора - Abstract Class.

Scala type aliasing

Любой сложный тип можно локально переопределить и придать ему более читабельный вид:
class ConcurrentPool[K, V] {
  type Queque = ConcurrentLinkedQueque[V]
  ...
}

Матрица компетенции программиста

среда, 28 августа 2013 г.

Function Composition

Это техника создания третьей функции, которая возврщает результат путем передачи результата одной функции в параметр другой.
Вот пример с использованием метода compose:
scala> def f(s: String) = "f(" + s + ")"
f: (String)java.lang.String

scala> def g(s: String) = "g(" + s + ")"
g: (String)java.lang.String

scala> val fComposeG = f _ compose g _
fComposeG: (String) => java.lang.String = <function>

scala> fComposeG("yay")
res0: java.lang.String = f(g(yay))

Есть еще другой метод, который применяет функции наоборот, andThen:
scala> val fAndThenG = f _ andThen g _
fAndThenG: (String) => java.lang.String = 

scala> fAndThenG("yay")
res1: java.lang.String = g(f(yay))

 

Незалогиненый пользователь не попадал в Spring Portlet Controller

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

четверг, 22 августа 2013 г.

Можно обращаться к портлетам

Даже если портлета не инстансибл, то она может обработать просто к ней обращение, с любой страницы портала, при этом она возвращает свой кусочек хтмл который она генерит.

Вот по такому урлу я обращлся: "http://galacasino.local:8083/?p_p_lifecycle=0&p_p_state=exclusive&p_p_id=cashieriframe2_WAR_cashierportlet&_cashieriframe2_WAR_cashierportlet_conf=DEPOSIT&_cashieriframe2_WAR_cashierportlet_modal=true&_cashieriframe2_WAR_cashierportlet_tmp=1377171814918&t=1377171814918"

как видно идет обращение к варнику и к портлете но не к инстанции
 type: "GET",

вторник, 20 августа 2013 г.

Powershell решение проблемы редиректа входящего потока

Так сделать не получиться, потому что < зарезеривирован под другие вещи:
somescript < commands.txt


Для этого нужно делать ход конем:
Get-Content commands.txt | somescript