凪瀬 Blog
Programming SHOT BAR

目次

Blog 利用状況
  • 投稿数 - 260
  • 記事 - 0
  • コメント - 46956
  • トラックバック - 192
ニュース
広告
  • Java開発者募集中
  • 経歴不問
  • 腕に自信のある方
  • 富山市内
  • (株)凪瀬アーキテクツ
アクセサリ
  • あわせて読みたい
凪瀬悠輝(なぎせ ゆうき)
  • Java技術者
  • お茶好き。カクテル好き。
  • 所属は(株)凪瀬アーキテクツ
  • Twitter:@nagise

書庫

日記カテゴリ

 

アスペクト指向(AOP : Aspect-oriented programming)はオブジェクト指向(OOP : object-oriented programming)とは直行的な 概念で、相補的なものですが、2008年現在、未だ広く普及しているパラダイムではなく、その機能を取り込んだ言語もあるものの (Javaの拡張であるAspectJ、Rubyの拡張であるAspectRなど)普及しているとは言えない状況です。

近年ではDIコンテナの普及で、AOPを部分的に利用できるようになりました。 オブジェクト指向言語の普及前に、例えば言語としてのオブジェクト指向をサポートしないC言語で、 オブジェクト指向の概念を表現する工夫がなされたと聞きます。 DIコンテナによる部分的なAOPサポートは、言語機能としてAOPがサポートされた言語が普及する「夜明け」に対して、 「前夜」の趣を感じさせるものです。

アスペクト指向が解決しようとしていること

アスペクト指向の解説書でアスペクト(横断的関心事と呼ばれる。後述)の例として、よくロギングが挙げられます。 が、正直な話、私はあまりこの例でピンときませんでした。

横断的関心事とはどういう事象でしょうか?

オブジェクト指向では複数のクラスに跨って存在してしまう機能性ということですが、どういうものがあるのでしょうか?

私がシステム設計をしてきた中で、「あぁ、これが概念としてのアスペクトなのだな」と思ったことは

  • SQL injection対策
  • XSS対策の出力文字エスケープ
  • OS command injection対策
  • バッファオーバーラン防止のためのバウンダリチェック
  • 例外処理

といったことです。開発でこれらの対策に頭を悩ませている方は多いのではないでしょうか?

これらの事象は、「すべての該当箇所に対して、一律の対応を行う必要がある」という点です。 これこそが、概念としてのアスペクト、横断的関心事なのです。

こうした、XXに全部YYをする、というのは自然言語で表現すると1文にも関わらず、 プログラム言語的には該当箇所を検索して1つずつ虱潰しにコードクローンを挿入する必要があります。 アスペクト指向が解決しようとしているのは、まさにこの部分なのです。

アスペクト指向の概念で重要なのはこのアスペクトという抽象概念を捉える事。 そして、どういったターゲットにウィービング(weaving : 縫い付けるの意。アスペクトを適用させること) させるのかということです。ウィービングできるポイントをジョインポイントと呼んだりします。 端的には、メソッドが呼ばれる前、および呼ばれた後などをジョインポイントとすることが多いですね。

どのように実装するか

DIコンテナでは部分的にAOPが利用できると述べました。 DIコンテナはオブジェクトの生成をDIコンテナが管理します。 このDIコンテナに管理されたオブジェクトに対してGoFのProxyパターンを利用してAOPを実現しています。

これはOOP的な環境で疑似的にAOPを実現するためのひとつの答えです。

あるクラスのインスタンス生成が制御されうるなら、その段階でProxyを挟むことで、 そのクラスの特定のメソッドの前後に処理を一律に差し挟むことができます。

DIコンテナではコンテナがクラスの生成を管理するためにそれが可能でした。 そうではない場合でも、Factory Method、Abstract Factory、Builder などといった生成にまつわる GoFデザインパターンと組み合わせることで、一律にProxyを噛ませることができます。

また、ウィービング対象となるオブジェクトが特定の箇所を必ず通過するようなケースでは、 そこでトラップしてProxyを噛ませるような方法論も考えることができます。 ServletでのRequest#setAttribute()のような場所をイメージするとよいでしょう。

実行時による動的なウィービングでなくとも、コンパイル時に機械的に処理を差し挟むような方法論も考えられます。

Java SE 5.0からはアノテーションが使えるようになりました。 これにより、こうした機械的な処理が断然しやすくなった点も見逃せません。 コンパイル時にジョインポイントを自動生成するような仕掛けを作ることで概念としてのAOPを実装することができるわけです。

関連エントリ

Injection 系の脆弱性ってなんで起こるんだろ?
そのやり方はXSSの元としか思えない。

XX Injection と呼ばれる脆弱性に共通するのは、OOPでの解決の行えない横断的関心事であるということでした。 一律に対応するためにはどのように網を張ればよいのか、設計をする人は頭を悩ませていることでしょう。

現時点では決定打に欠けるところですが、概念としてはアスペクトをどのようにして漏れなくウィービングするのかということです。 そのための適切なジョインポイントはどこかということです。

アスペクト指向の問題点

アスペクトというものが横から入り込んでくるわけですから、OOPのソースコードを見ただけでは実行時の動作がわかりません。 そう言った意味でプログラムが複雑化する危険性をはらんでいます。 また、アスペクト同士の干渉が起こることもあり、アスペクトの適応順序によって挙動が変わることもあります。

また、アスペクト指向でウィービングの対象をどう管理するかも疑問が多い。「全ての」の適用範囲はどこまでなのか。 あるいは、特定の範囲だけに適用したいこともあるでしょう。 現行のDIコンテナでのAOPではメソッド名のマッチングによって特定の名称のメソッドの前後に適用、 といったことができますがこれが酷く気持ち悪い。

gattaislime氏のアスペクト指向の問題点では

 要するに、現在の典型的なアスペクト指向では、アスペクトを織り込むオブジェクトがホワイトボックスであることを要求するか、逆にアスペクト自体がオブジェクトの実装を規定するか、ということになってしまい、結果としてアスペクトが単なる暗黙的多重TemplateMethodに成り下がっているのではないかと感じてしまうのだ。

 このような暗黙のTemplateMethodは非常に厄介で、ソースコードをそのまま追っても処理の流れがつかみにくく、最悪の場合ソースコード全体をメソッド名や属性名でgrepして、関連するすべてのアスペクトを洗い出さなければならない。

と指摘しています。

ウィービング対象は集合論的に抽出されるわけで(つまり、SQLのWhere句のようなイメージ)Javaなどの強い型付け言語でなされる 型の安全性のような安心感がまったくない。

しかし、集合論というとジェネリクスも集合論ですが、型の安全性を確保できている( 参考:ジェネリクスと代入と落とし穴 )わけで、ウィービングのための型のような システムが必要なのではないかと思う次第。

投稿日時 : 2008年3月25日 10:33
コメント
  • # re: アスペクト指向の概念
    myugaru
    Posted @ 2008/03/25 12:43
    例外というと呼び出し履歴(Call stack)を無視して大域的に例外処理箇所へジャンプするという機構のことですよね?これはtry catchに類する言語機構がなければ実現できないですよね。事前に例外が起きないかをチェックする、という事だとアスペクトで解決できるけどtry catchがアスペクトでどうやって解決できるのが良く分からないです。

    アスペクトは例えば私は昨日のエントリーにちょっと関係ありますけど、イベントのブロードキャストを使ったりします。これもproxyパターンって呼ぶのかもしれないですがイベントが実はdelegateのコレクションになっているのがミソですねえ。こういうのはjavaだとlistnerとかで可能なのでしょうか??(ここはjavaを全く知らない私の興味本位の別質問になりますが。)
    event Handler Print;
    (中略)
    Print = new Handler(正規出力先に出力するメソッド);
    #if DEBUG
    Print += new Handler(ログに吐くメソッド);
    #else
  • # re: アスペクト指向の概念
    myugaru
    Posted @ 2008/03/25 12:47
    あ、もしかしたらtry catchブロックそのものをウィービングするって事でしょうか??だったら読みが浅かったです。すみませんと先に謝っておきます。
  • # re: アスペクト指向の概念
    凪瀬
    Posted @ 2008/03/25 13:14
    Proxyパターンで実装に処理を委譲する際にtry-catchブロックで囲うようなイメージですね。
    定型的にエラーメッセージを出すような場合に対応できます。

    JavaにはC#のデリゲートはありませんが、interfaceを定義して、その実装をイベントを受け取るオブジェクトにaddするイメージです。
    +=の演算子オーバーロードがないので、該当interfaceを引数に取るメソッドを受け取り側のオブジェクトに定義しておかねばなりません。
    java.awt.Component#addMouseListener()を見るとどういうものか想像がつくと思います。
    http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/Component.html#addMouseListener(java.awt.event.MouseListener)
    MouseListenerは文字通りマウス操作のイベントですが、Componentはこの他に
    addKeyListener()やaddFocusListener()といったリスナの種類ごとのaddメソッドが用意されています。

    Javaでは関数ポインタの代わりにinterfaceを用いることになります。
    記述の面倒などはあるかもしれませんが、機能的には同等のことを行えると思ってよいのではないでしょうか。
  • # re: アスペクト指向の概念
    myugaru
    Posted @ 2008/03/25 16:50
    リスナーの所を読んでみました。C#から入った私から見るとjavaの考えるイベントの仕組みは確かに面倒そうに感じました。でもいまどきならIDEでイベントなんか組み立てるんでしょうからコードの冗長なんて些細な問題なのかなあとも思いました。
    そういえばリンク先を読んでいて思い出したのですが何かの本でMicrosoftとSunでこのイベントモデルの共通化の協議が行われたと書いてあったんです。このときSunがどうしてもMicrosoftのdelegateによるイベントモデルを受け入れなかったとか。うちにある本のどれかに書いてあったんですが・・・どこに書いてあったか忘れてしまいました><
    凪瀬さんご存知でしたらネタとかにして教えてくれるとうれしいです。
  • # Javaとdelegateのおはなし
    凪瀬 Blog
    Posted @ 2008/03/25 17:22
    Javaとdelegateのおはなし
  • # re: アスペクト指向の概念
    凪瀬
    Posted @ 2008/03/25 17:23
    大分話題がずれてきたので別エントリにて。
  • # re: アスペクト指向の概念
    シャノン
    Posted @ 2008/03/25 20:55
    アスペクト=正常系でないこと、とか。微妙に違うか。
    ログなんか出さなくたってプログラムは動くんです。トラブル対応を考えなければ。
    エスケープなんかしなくたってプログラムは動くんです。変なデータを入れられなければ。
    プログラム本体は、それが動くための最低限のコードに絞った方が、見通しがよくなります。
    だけど、いろいろな事態を想定すると、ログも出さなきゃいけないしエスケープもしなきゃいけない。
    そういったことを追い出したのがアスペクトじゃないでしょうかね。
  • # re: アスペクト指向の概念
    凪瀬
    Posted @ 2008/03/25 22:23
    その捉え方はどうなんだろう。
    例えばバリデーションなんかは固有になるからAOPでは対応できないことのほうが多いですし。
    まぁ横断的関心事には例外処理とか異常系が多いのかもしれませんが。

    「すべての~に」といった類のもの、あるいは特定の条件で抽出した集合すべてに対して、なんらかの処理を、というものと素直にとらえればよいのではないですかね。
  • # re: アスペクト指向の概念
    シャノン
    Posted @ 2008/03/26 11:01
    対象の数は問題ではないと思うのですよ。
    対象となるクラスが1つだけであっても、アスペクト指向を適用してよいと思うのです。
    複数のクラスに共通の処理に限ることもないだろうと。
  • # re: アスペクト指向の概念
    凪瀬
    Posted @ 2008/03/26 22:27
    論理的にはもちろん、単一でも使えるけども…
    ソースコード的な分断が見通しを悪くするのが危惧されていて。
    単体のコードに対するスペシャルなアスペクトっていうのは、そう言う意味でない方がいいとされてしまう。
    メリットに比べ、デメリットが大きくなるというか。

    実用上は「すべてのXXに」という状況でないとメリットが少ないのではないでしょうか。
    悪魔の照明的な事象への対処という大きな効果があるから、コードの連続性を失っても取り入れたいんだろうなぁ、と思うのですよね。
    副作用の大きさこそが、限定的な導入にとどまらせる理由なのかもしれない。
  • # サニタイズとハンガリアンとヒューマンエラーとアスペクト指向
    凪瀬 Blog
    Posted @ 2008/07/06 18:34
    サニタイズとハンガリアンとヒューマンエラーとアスペクト指向
  • # I get pleasure from, lead to I found exactly what I used to be looking for. You've ended my 4 day long hunt! God Bless you man. Have a great day. Bye
    I get pleasure from, lead to I found exactly what
    Posted @ 2021/09/01 3:21
    I get pleasure from, lead to I found exactly what I used to
    be looking for. You've ended my 4 day long hunt!
    God Bless you man. Have a great day. Bye
  • # I get pleasure from, lead to I found exactly what I used to be looking for. You've ended my 4 day long hunt! God Bless you man. Have a great day. Bye
    I get pleasure from, lead to I found exactly what
    Posted @ 2021/09/01 3:22
    I get pleasure from, lead to I found exactly what I used to
    be looking for. You've ended my 4 day long hunt!
    God Bless you man. Have a great day. Bye
  • # I get pleasure from, lead to I found exactly what I used to be looking for. You've ended my 4 day long hunt! God Bless you man. Have a great day. Bye
    I get pleasure from, lead to I found exactly what
    Posted @ 2021/09/01 3:23
    I get pleasure from, lead to I found exactly what I used to
    be looking for. You've ended my 4 day long hunt!
    God Bless you man. Have a great day. Bye
  • # I get pleasure from, lead to I found exactly what I used to be looking for. You've ended my 4 day long hunt! God Bless you man. Have a great day. Bye
    I get pleasure from, lead to I found exactly what
    Posted @ 2021/09/01 3:24
    I get pleasure from, lead to I found exactly what I used to
    be looking for. You've ended my 4 day long hunt!
    God Bless you man. Have a great day. Bye
  • # Superb site you have here but I was curious if you knew of any discussion boards that cover the same topics discussed here? I'd really like to be a part of community where I can get responses from other experienced individuals that share the same intere
    Superb site you have here but I was curious if yo
    Posted @ 2021/09/01 19:55
    Superb site you have here but I was curious if you knew of any discussion boards that
    cover the same topics discussed here? I'd really like to be a part of community where I can get responses from other experienced individuals that share the same interest.
    If you have any recommendations, please let me
    know. Thanks a lot!
  • # Superb site you have here but I was curious if you knew of any discussion boards that cover the same topics discussed here? I'd really like to be a part of community where I can get responses from other experienced individuals that share the same intere
    Superb site you have here but I was curious if yo
    Posted @ 2021/09/01 19:56
    Superb site you have here but I was curious if you knew of any discussion boards that
    cover the same topics discussed here? I'd really like to be a part of community where I can get responses from other experienced individuals that share the same interest.
    If you have any recommendations, please let me
    know. Thanks a lot!
  • # Superb site you have here but I was curious if you knew of any discussion boards that cover the same topics discussed here? I'd really like to be a part of community where I can get responses from other experienced individuals that share the same intere
    Superb site you have here but I was curious if yo
    Posted @ 2021/09/01 19:57
    Superb site you have here but I was curious if you knew of any discussion boards that
    cover the same topics discussed here? I'd really like to be a part of community where I can get responses from other experienced individuals that share the same interest.
    If you have any recommendations, please let me
    know. Thanks a lot!
  • # Superb site you have here but I was curious if you knew of any discussion boards that cover the same topics discussed here? I'd really like to be a part of community where I can get responses from other experienced individuals that share the same intere
    Superb site you have here but I was curious if yo
    Posted @ 2021/09/01 19:58
    Superb site you have here but I was curious if you knew of any discussion boards that
    cover the same topics discussed here? I'd really like to be a part of community where I can get responses from other experienced individuals that share the same interest.
    If you have any recommendations, please let me
    know. Thanks a lot!
  • # An outstanding share! I've just forwarded this onto a coworker who has been doing a little homework on this. And he in fact bought me lunch due to the fact that I found it for him... lol. So let me reword this.... Thanks for the meal!! But yeah, thanks f
    An outstanding share! I've just forwarded this ont
    Posted @ 2021/09/02 0:14
    An outstanding share! I've just forwarded
    this onto a coworker who has been doing a little homework
    on this. And he in fact bought me lunch due to the fact that I found it for him...
    lol. So let me reword this.... Thanks for the meal!!
    But yeah, thanks for spending time to discuss this matter here on your website.
  • # An outstanding share! I've just forwarded this onto a coworker who has been doing a little homework on this. And he in fact bought me lunch due to the fact that I found it for him... lol. So let me reword this.... Thanks for the meal!! But yeah, thanks f
    An outstanding share! I've just forwarded this ont
    Posted @ 2021/09/02 0:15
    An outstanding share! I've just forwarded
    this onto a coworker who has been doing a little homework
    on this. And he in fact bought me lunch due to the fact that I found it for him...
    lol. So let me reword this.... Thanks for the meal!!
    But yeah, thanks for spending time to discuss this matter here on your website.
  • # An outstanding share! I've just forwarded this onto a coworker who has been doing a little homework on this. And he in fact bought me lunch due to the fact that I found it for him... lol. So let me reword this.... Thanks for the meal!! But yeah, thanks f
    An outstanding share! I've just forwarded this ont
    Posted @ 2021/09/02 0:16
    An outstanding share! I've just forwarded
    this onto a coworker who has been doing a little homework
    on this. And he in fact bought me lunch due to the fact that I found it for him...
    lol. So let me reword this.... Thanks for the meal!!
    But yeah, thanks for spending time to discuss this matter here on your website.
  • # An outstanding share! I've just forwarded this onto a coworker who has been doing a little homework on this. And he in fact bought me lunch due to the fact that I found it for him... lol. So let me reword this.... Thanks for the meal!! But yeah, thanks f
    An outstanding share! I've just forwarded this ont
    Posted @ 2021/09/02 0:17
    An outstanding share! I've just forwarded
    this onto a coworker who has been doing a little homework
    on this. And he in fact bought me lunch due to the fact that I found it for him...
    lol. So let me reword this.... Thanks for the meal!!
    But yeah, thanks for spending time to discuss this matter here on your website.
  • # Right here is the perfect website for anybody who hopes to understand this topic. You know so much its almost hard to argue with you (not that I personally will need to…HaHa). You certainly put a fresh spin on a topic that's been written about for a long
    Right here is the perfect website for anybody who
    Posted @ 2021/09/04 12:24
    Right here is the perfect website for anybody who hopes to understand this topic.
    You know so much its almost hard to argue with you (not that I personally will need to…HaHa).
    You certainly put a fresh spin on a topic that's been written about for a long time.
    Great stuff, just excellent!
  • # Right here is the perfect website for anybody who hopes to understand this topic. You know so much its almost hard to argue with you (not that I personally will need to…HaHa). You certainly put a fresh spin on a topic that's been written about for a long
    Right here is the perfect website for anybody who
    Posted @ 2021/09/04 12:25
    Right here is the perfect website for anybody who hopes to understand this topic.
    You know so much its almost hard to argue with you (not that I personally will need to…HaHa).
    You certainly put a fresh spin on a topic that's been written about for a long time.
    Great stuff, just excellent!
  • # Right here is the perfect website for anybody who hopes to understand this topic. You know so much its almost hard to argue with you (not that I personally will need to…HaHa). You certainly put a fresh spin on a topic that's been written about for a long
    Right here is the perfect website for anybody who
    Posted @ 2021/09/04 12:26
    Right here is the perfect website for anybody who hopes to understand this topic.
    You know so much its almost hard to argue with you (not that I personally will need to…HaHa).
    You certainly put a fresh spin on a topic that's been written about for a long time.
    Great stuff, just excellent!
  • # Right here is the perfect website for anybody who hopes to understand this topic. You know so much its almost hard to argue with you (not that I personally will need to…HaHa). You certainly put a fresh spin on a topic that's been written about for a long
    Right here is the perfect website for anybody who
    Posted @ 2021/09/04 12:27
    Right here is the perfect website for anybody who hopes to understand this topic.
    You know so much its almost hard to argue with you (not that I personally will need to…HaHa).
    You certainly put a fresh spin on a topic that's been written about for a long time.
    Great stuff, just excellent!
  • # Wonderful goods from you, man. I have be mindful your stuff prior to and you're simply too wonderful. I actually like what you have received right here, certainly like what you are saying and the way in which during which you say it. You're making it e
    Wonderful goods from you, man. I have be mindful y
    Posted @ 2021/09/12 16:39
    Wonderful goods from you, man. I have be mindful your stuff prior to and
    you're simply too wonderful. I actually like what you have received right here,
    certainly like what you are saying and the
    way in which during which you say it. You're making it entertaining
    and you continue to care for to stay it smart. I can not wait to learn much more
    from you. That is actually a tremendous web site.
    ps4 games https://tinyurl.com/45xtc52b ps4 games
  • # In fact no matter if someone doesn't know then its up to other viewers that they will help, so here it takes place. quest bars https://www.iherb.com/search?kw=quest%20bars quest bars
    In fact no matter if someone doesn't know then its
    Posted @ 2021/09/14 13:41
    In fact no matter if someone doesn't know then its up to other viewers that they will
    help, so here it takes place. quest bars https://www.iherb.com/search?kw=quest%20bars quest bars
  • # In fact no matter if someone doesn't know then its up to other viewers that they will help, so here it takes place. quest bars https://www.iherb.com/search?kw=quest%20bars quest bars
    In fact no matter if someone doesn't know then its
    Posted @ 2021/09/14 13:42
    In fact no matter if someone doesn't know then its up to other viewers that they will
    help, so here it takes place. quest bars https://www.iherb.com/search?kw=quest%20bars quest bars
  • # In fact no matter if someone doesn't know then its up to other viewers that they will help, so here it takes place. quest bars https://www.iherb.com/search?kw=quest%20bars quest bars
    In fact no matter if someone doesn't know then its
    Posted @ 2021/09/14 13:43
    In fact no matter if someone doesn't know then its up to other viewers that they will
    help, so here it takes place. quest bars https://www.iherb.com/search?kw=quest%20bars quest bars
  • # In fact no matter if someone doesn't know then its up to other viewers that they will help, so here it takes place. quest bars https://www.iherb.com/search?kw=quest%20bars quest bars
    In fact no matter if someone doesn't know then its
    Posted @ 2021/09/14 13:44
    In fact no matter if someone doesn't know then its up to other viewers that they will
    help, so here it takes place. quest bars https://www.iherb.com/search?kw=quest%20bars quest bars
  • # Amazing! Its in fact awesome paragraph, I have got much clear idea about from this article.
    Amazing! Its in fact awesome paragraph, I have got
    Posted @ 2021/10/25 20:53
    Amazing! Its in fact awesome paragraph, I have got much clear idea about from this article.
  • # Today, I went to the beach front with my children. I found a sea shell and gave it to my 4 year old daughter and said "You can hear the ocean if you put this to your ear." She put the shell to her ear and screamed. There was a hermit crab insid
    Today, I went to the beach front with my children.
    Posted @ 2021/11/12 11:00
    Today, I went to the beach front with my children. I found a
    sea shell and gave it to my 4 year old daughter and said "You can hear the ocean if you put this to your ear." She put the shell to her ear and screamed.
    There was a hermit crab inside and it pinched her ear. She never wants to go back!
    LoL I know this is totally off topic but I had to tell someone!
  • # ï»¿order stromectol online http://stromectolabc.com/
    stromectol 6 mg dosage
    Busjdhj
    Posted @ 2022/02/08 9:35
    order stromectol online http://stromectolabc.com/
    stromectol 6 mg dosage
  • # ivermectin 400 mg brands http://stromectolabc.com/
    stromectol how much it cost
    Busjdhj
    Posted @ 2022/02/08 16:39
    ivermectin 400 mg brands http://stromectolabc.com/
    stromectol how much it cost
  • # how to buy doxycycline online https://doxycyline1st.com/
    doxycycline 100mg price
    Doxycycline
    Posted @ 2022/02/26 20:04
    how to buy doxycycline online https://doxycyline1st.com/
    doxycycline 100mg price
  • # Hi there, just wanted to tell you, I liked this blog post. It was helpful. Keep on posting!
    Hi there, just wanted to tell you, I liked this b
    Posted @ 2022/03/23 2:16
    Hi there, just wanted to tell you, I liked this blog post. It was helpful.
    Keep on posting!
  • # Hi there, just wanted to tell you, I liked this blog post. It was helpful. Keep on posting!
    Hi there, just wanted to tell you, I liked this b
    Posted @ 2022/03/23 2:17
    Hi there, just wanted to tell you, I liked this blog post. It was helpful.
    Keep on posting!
  • # Hi there, just wanted to tell you, I liked this blog post. It was helpful. Keep on posting!
    Hi there, just wanted to tell you, I liked this b
    Posted @ 2022/03/23 2:18
    Hi there, just wanted to tell you, I liked this blog post. It was helpful.
    Keep on posting!
  • # Hi there, just wanted to tell you, I liked this blog post. It was helpful. Keep on posting!
    Hi there, just wanted to tell you, I liked this b
    Posted @ 2022/03/23 2:19
    Hi there, just wanted to tell you, I liked this blog post. It was helpful.
    Keep on posting!
  • # Wow, wonderful blog format! How lengthy have you ever been blogging for? you made running a blog look easy. The entire look of your website is excellent, as well as the content material!
    Wow, wonderful blog format! How lengthy have you
    Posted @ 2022/03/24 5:51
    Wow, wonderful blog format! How lengthy have you ever
    been blogging for? you made running a blog look easy.
    The entire look of your website is excellent, as well
    as the content material!
  • # ed medication https://erectiledysfunctionpills.shop/
    Erectile
    Posted @ 2022/10/14 22:48
    ed medication https://erectiledysfunctionpills.shop/
  • # prednisone 15 mg tablet https://prednisone20mg.icu/
    Prednisone
    Posted @ 2022/10/15 13:21
    prednisone 15 mg tablet https://prednisone20mg.icu/
  • # onlinepharmaciescanada com https://noprescriptioncanada.com/
    canadian pharmacies online legitimate
    CanadaPh
    Posted @ 2022/12/13 20:56
    onlinepharmaciescanada com https://noprescriptioncanada.com/
    canadian pharmacies online legitimate
  • # cheapest ed pills https://edpills.science/
    online ed pills
    EdPills
    Posted @ 2023/01/07 13:50
    cheapest ed pills https://edpills.science/
    online ed pills
タイトル
名前
Url
コメント