コンテンツ・メディア第1事業部のjyukutyoこと阪田です。CCCは毎年2回、春と秋に開催する日本最大のJavaコミュニティイベントです。Java関連の技術や事例に関する良質なセッションが行われ、また異なる分野で活躍するJava技術者が一堂に会する場ともなっています。スポンサーにはダイヤモンド、プラチナ、ゴールド、ブースと種類があり、フリューはゴールドです。CCCでは弊社から2セッション!弊社では2セッションでスピーカーをします。13:30-14:20ルームE10年運用している画像サービスでのJavaの活用と今後の展望こちらは、盛岡が弊社のサービス開発について話します。Springで話した弊社のサービスについて、別の観点から話します。盛岡はこのサービスを初期(10年前!)から担当しており、ユーザの拡大につれて変遷してきたアーキテクチャや運用、チーム構成などさまざなまリアルが聞けます!18:30ルームIバイトコードが君のトモダチになりたがっているこちらは私のセッションです。Agentでのバイトコード操作といったことを話します。Swiftなどのスポンサーをしています。それもこれも最終的にはエンジニアの採用のためですね。京都での開発業務(Webアプリ、iOS/Androidネイティブアプリ)に興味のある方はぜひご連絡ください。http://mobile-career.furyu.jp/京都以外に渋谷にもオフィスがあり、開発をしています。関東の方もぜひご連絡ください。Tweet2016年11月15日JMockitを使ってテストを書いていて困った点Javaこんにちはフリューのジョンです。普段はJMockitを使ってテストコードを書いているのですが、今回は、そのJMockitを使ってテストを書いていて、困った2点を書きたいと思います。@Injectableで書いてあるクラスをモックしたいFileOutputStreamをJMockitでMockUpを使ってコンストラクタをモックするこの2つです。以下のようなメソッドをテストした場合はどうすればよいのかを書きます。@Injectableで書いてあるクラスをモックしたいこれは、テスト対象のクラスに@Resourceがあるため、@Injectableを書いているため起きます。@Mockedを引数に書いてつかうこと、MockUpを使ってやることもできません。(すでにモックされています、というエラーが出ます)対応としては、ソースコードの1にある通り、Expectationsにクラスを渡すことで、Fileのモックを対象のExpectations内で書くことができます。今回はコンストラクタをモックしたかったので、返り値となるFileのモックオブジェクトを@Injectableで定義してExpectations内で使用しています。FileOutputStreamのコンストラクタをモックするこれはFileOutputStreamに@Mockedをつけてモックすることができないために起きます。(@Mockedは使えません、代わりに@Injectableや部分モックを使ってくださいというエラーが出ます)対応しては、ソースコードの2にある通り、MockUpで記述します。closeメソッドもモックしているのはtry-with-resource文にて自動的にcloseメソッドが呼ばれるためです。(もちろん無いとテストが落ちます)ここで気をつけることが、一点あります。実際のコードでは、ファイルを引数としたコンストラクタを使用していますが、テストコードでは異なるコンストラクタをモックします。理由としては以下になります。constructor.https://groups.google.com/forum/#!topic/jmockit-users/EvTuJKTecDk意訳すると、以下のようになります。false)を呼び出しているのでそちらをモックしてください。理由としては、JVMによってsuper(...)またはthis(...)の余分な呼び出しが解消されます。MockUpのproceed()で呼ばれる$initは存在しないコンストラクタを参照してしまうのです。まとめJMockitは複数の書き方ができますが、それ故にわからなくなることも多いと思います。vSwitchのVRRP(L3HA)で高可用性を実現する!OpenStackインフラみなさん、こんにちは。コンテンツ・メディア第1事業部インフラ担当の藤本佳世です。vSwitchのVRRP(L3HA)で高可用性を実現する!】についてお話しします。Protocol)とは、ルータの冗長化をサポートするプロトコルです。フリューでは、OpenStackで立ち上げた仮想インスタンスに接続する際に、このVRRP機能を採用しています。仮想インスタンスへはFloatingIPでssh接続しています。その通信が、Neutron(networknode)サーバでプライベートIPアドレスにNAT変換され、仮想インスタンスに接続されます。この処理を行うNeutron(networknode)サーバ2台をVRRP構成にすることで、master側のサーバに障害が発生した場合、すぐにstandby側のもう1台のサーバに自動的に処理を切り替えることができます。<イメージ図>構築について公式ドキュメントを参考に構築を進めました。ネットワークの知識が必要なので、慣れないうちは苦労するかもしれません。192.168.80.1※1ネットワークセグメントのみの情報です。実際には同じような構成で3パターン作成しました。各ノードに対して設定を行います。ポイントとなる部分を書き出してみました。IPアドレスなどを自動的に割り当てる仕組みのことcontrollernode共通のオプションを設定します。2ML2プラグインを設定します。vSwitchエージェントを設定します。TrueL3エージェントの設定します。2DHCPエージェントを設定します。Trueメタデータエージェントの設定します。vSwitchエージェントを設定します。次は、ネットワークの作成の手順をご紹介します。フリューでは、3つのネットワークセグメントが存在し、それぞれ仮想ルータを3台構築しました。下記の通り、flat外部ネットワークとプロジェクトネットワーク(vxlan)を作成しました。192.168.80.1※1ネットワークセグメントのみの情報です。実際には同じような構成で3パターン作成しました。※下記の例では「ext-net80」というネットワーク名で作成しました。※ここではすでにserviceプロジェクトが存在することを前提としています。※先ほどとは異なり、network_typeにvxlanを指定します。下記のコマンドでVRRP(active,standby)構成になっていることが確認できます。|+--------------------------------------+---------+----------------+-------+----------+networknodeで、qrouterとqdhcp名前空間の作成を検証します。※両方のqrouter名前空間で同じUUIDが使われているはずです。netnsqrouter-7a46dba8-8846-498c-9e10-588664558473networknodeでHAの動作確認をします。インターフェースがあります。バックアップノードはqrとqgインターフェースはIPアドレスを持ちません。通信が行われていることを確認します。20冗長化することは、どんなシステムでも重要視される部分ですね。最後に今回初めてVRRPという単語を聞いた私にとっては、かなり苦戦する部分ではありましたが、何とか構築することができました。ネットワーク知識が必要となりますが、少しでも構築の参考になれば嬉しいです。