scala

EntityManager#createNativeQueryで一部のデータを取り出すとき

EJBのEntityManagerでテーブルをselectしてそのテーブルのエンティティを返すのは普通にやることだが、group byしてキーだけ取り出したい、などのときは以下のようにObjectの配列のリストとして扱う。 val keys = em.createNativeQuery("select t1.key1, t1.…

オブジェクトの値をコピーする

case class Foo(key:Int, key2:String, key3:Int)のクラスからオブジェクトを生成し、それを他のオブジェクトにコピーしたいとき、scalaではcopyメソッドが使える。val foo = Foo(100, "test", 200)val zoo = foo.copy(key = 300)とすると、keyは300がセット…

scala-2.9のscala.reflect.BeanPropertyが2.11ではscala.beans.BeanPropertyに変更されていた

表記の件で、システムのscala-libraryを2.11にあげようとすると、importを変更しなければならない。そこで、 package foo.bar class BeanPropery extends scala.reflect.BeanPropertyというクラスを作って、徐々にこれに切り替えておき、2.11に移行するとき…

Playframework 2.2で非同期メール送信

Playで作っているアプリケーションでメール送信が必要になり、普通に書いてみたらメール送信が遅いので画面に制御が帰ってくるまで時間がかかってしまった。手っ取り早く非同期でメールを送信するように改良してみた。プロジェクト直下のbuild.sbtlibraryDep…

scalaとjavaのコレクションのやり取り

もっといい方法があると思うけれど、とりあえず実現できたやり方scalaのMapのvaluesをjava.util.Collectionに変換するnew java.util.ArrayList[UriageForRanking](result.values)

scala objectのMock その2

どうもJMockitではscalaのobjectをモック化できないようなので、scalaベースのscalamockを試してみる。scalamockはsbt, scalatestの使用を前提としているため、sbtでプロジェクトを作る。プロジェクトの構成がsbtの構成になってしまうので、これもちょっと困…

scala objectのMock

テストコードでscalaのobjectをモック化したい。 モック化したいobjectは以下。このクラスはJavaからも呼ぶため、class宣言もしている。class Boo object Boo { val log = LogFactory.getLog(this.getClass()) def foo = { log.debug("Boo#foo called") true…

Javaとの混在環境でのScala

もともとJavaで書いているプロジェクトにScalaのコードを混ぜていくと、Eclipseの挙動がおかしくなるときがあって、そういうときはJavaの側からScalaでできているオブジェクトやクラスが軒並み見えなくなる。ビルドしなおしても状況は変わらず。いろいろ試し…

JBoss7にscalaで書いたプロジェクトをデプロイする

scalaで書いたEJBのプロジェクトをデプロイするには、modules/org/scala/mainディレクトリ作成して、modules.xmlを以下の内容で作成。scala-library.jarも置く。 scalaを参照するEJBプロジェクトはMETA-INFに以下の内容でjboss-deployment-structure.xmlを作…

ScalaのEJBをJavaから参照する

以前からscalaでEJBを書いていたが、ここへ来て問題発生。JavaとScalaの混在プロジェクトでJavaからScalaのクラスを参照したときにコンパイルエラーにはならないのに、eclipseのエディタ上ではエラーの表示がされてしまう。これを解決するにはJava同様、Scal…

scalaでEJB

リレーションの定義は以下 @ManyToOne(cascade=Array(CascadeType.REFRESH)) @JoinColumn(name="shohinCd", insertable=false, updatable=false) @Cache(usage=CacheConcurrencyStrategy.NONE) @BeanProperty var shohin:Shohin= _

play+scala+mongo

$ ./play install mongo $ ./play new myapp --with scala mongomyapp/conf/application.confに以下を追加# The mongo module module.mongo=${play.path}/modules/mongo# mongodb connection details mongo.host=localhost mongo.port=27017 mongo.database=…

caseクラスでパラメータにアノテーション 続き

前回caseクラスでパラメータにアノテーションを書いても効かなかったと書きましたが、正確にはjavaのアノテーションは効かないということでした。case class Shohin ( @BeanProperty pk:Stringこれは効くけれど、case class Shohin ( @Column columnDefiniti…

caseクラスでパラメータにアノテーション

EJBのエンティティビーンをscalaで書こうと、@Entity @Cache(usage=CacheConcurrencyStrategy.NONE) case class Foo(@Id k:Int, v:String)としてみたところ、以下のエラー。Reason: org.hibernate.AnnotationException: No identifier specified for entity:…

play+scalaプロジェクトをeclipseにインポートする

play+scalaでちょっとずつ書き始めたので、そろそろeclipseも試そうと思いました。$ ./play eclipsify xxxxxしてeclipseにインポートしたんですが、scalaのコードにコンパイルエラーが出てしまいました。すでに動いているものなのに。playのeclipsifyでクラ…

mongodb+casbah+scala

遅まきながらmongodbの勉強。sbt-0.10でプロジェクトを作る。$ mkdir sbt-mongo $ cd sbt-mongoここで、build.sbtを作成。内容は以下。name := "Hello Mongo+Casbah"version := "1.0.0"scalaVersion := "2.9.0"organization := ""libraryDependencies ++= Se…

traitの名前衝突

scalaでtraitを使おうと思ったが、複数のtraitが同名のメソッドを持っていて、それらを継承して当該メソッドを呼ぶとどうなるか。trait Aoo { def zoo = 1 }trait Boo { def zoo = 2 }object Coo extends Aoo with Boo { def main(args:Array[String]) { pri…

scalaスクリプトでおかしな挙動?

たとえば、object Foo { val ZOO = "xxxx" }というクラスを作ってコンパイルします。これをスクリプトの中で使います。println(Foo.ZOO)これはOK。次に、object Foo { val ZOO = "xxxx" val ZOO_ADDED = "ZZZZZ" }と、ZOO_ADDEDを増やします。そして、これを…

java, scalaでOSコマンド実行

Runtime rt = Runtime.getRuntime(); Process p = rt.exec("cp -p foo.txt foo.txt.BACKUP"); p.waitFor();など。|や>を使いたいときは、String cmd = "diff foo.txt foo.txt.BACKUP > foo.txt.diff"; String[] cmdArray = {"/bin/sh", "-c", cmd}; Runtime …

scalaでスクリプトを書く

perlとかで書いていたスクリプトをscalaで書こうとすると、クラスパスなどの環境変数を定義してからscalaスクリプトを起動するような起動ファイルが別にいるんだと、昔のCOBOLとJCLみたいでかっこわるいなと思っていたら、解決することができた。scalaスクリ…

play + scala

playにscalaをインストールする $ play install scalaプロジェクトを作る $ play new sampleappscala --with scala実行 $ play run sampleappscala

scala + google app engineでのエラー回避

eclipseでscalaを使ってgoogle app engineのプロジェクトを作りビルドするとscala org.datanucleus.metadata.MetaDataManager loadClasses的なエラーが出る。これを回避するには.projectのdatanucleusあたりをコメントアウト。

eclipseでandroid+scalaプロジェクトを作る手順

./create_project crashball org.crashball --platform android-7 --scala-version 2.8.1でプロジェクトを作成。eclipseでプロジェクトを作成。こちらはscalaプロジェクト。create_projectで作ったディレクトリからproject, src/*, testsをeclipseプロジェク…

scalaでJavaのインナークラスを扱う

scalaでJavaのインナークラスを使う場面に、apache pivotをさわっているとき出くわしました。 import org.apache.pivot.wtk.Componentして var style:Component#StyleDictionary = label.getStyles()とする。#を使うんですねえ。

scala-2.8でEJB

scala-2.8が先週リリースされたので、eclipseプラグインもアップデートしてみました。既存のEJBが @GeneratedValue(strategy=GenerationType.AUTO)の行でannotation needs to be a constantというメッセージでエラーになりました。コマンドラインでscalacす…