WebObjects nsDictionary.valueForKey("5スレ");
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/02/04 12:21ID:vwrTw9m5Webアプリ開発環境「WebObjects」について語るスレです。
http://www.apple.co.jp/webobjects/
http://www.apple.com/webobjects/
1スレ目:http://pc.2ch.net/test/read.cgi/php/989562708
2スレ目:http://pc.2ch.net/test/read.cgi/php/1013695600
3スレ目:http://pc.2ch.net/test/read.cgi/php/1024066714
4スレ目:http://pc2.2ch.net/test/read.cgi/php/1033912737
■ 掟 ■
・遠慮は自身の成長を阻害する。過去ログ読んでも判らないことがあればどんどん質問すべし。そして判らないヤツがいたら親切じゃなくてもいいから教えてやるべし。
・WebObjectsを使っている個人・法人の無意味な批判は歓迎されない、しない。マカーマカーと騒がないこと。
・ヨソの開発ツールを使ってもないのにWebObjectsマンセーすることは歓迎されない、しない。
・運用についての質問はハードウェア、OS、パッチ、RDBMSのバージョン、JDBCアダプタのバージョン、Web鯖のバージョン、例外の内容などを細かく明記すべし。
・プ社の話題はウザすぎるので全て専用クソスレでおながいします。
・さやかタン (´Д`;)ハァハァ
0052nobodyさん
03/02/11 18:11ID:???その手のクソ話はこのスレでは全く歓迎されない。
その手のクソ話はこのスレでは全く歓迎されない。
その手のクソ話はこのスレでは全く歓迎されない。
その手のクソ話はこのスレでは全く歓迎されない。
その手のクソ話はこのスレでは全く歓迎されない。
その手のクソ話はこのスレでは全く歓迎されない。
その手のクソ話はこのスレでは全く歓迎されない。
その手のクソ話はこのスレでは全く歓迎されない。
その手のクソ話はこのスレでは全く歓迎されない。
その手のクソ話はこのスレでは全く歓迎されない。
その手のクソ話はこのスレでは全く歓迎されない。
0053nobodyさん
03/02/11 23:12ID:???0054nobodyさん
03/02/11 23:42ID:14TDExiiそうですが、何か?
0055nobodyさん
03/02/12 00:15ID:???おまえは、>>1を読んでいないのか?専用クソスレ用意されているぞ。
おまえは、>>1を読んでいないのか?専用クソスレ用意されているぞ。
おまえは、>>1を読んでいないのか?専用クソスレ用意されているぞ。
おまえは、>>1を読んでいないのか?専用クソスレ用意されているぞ。
おまえは、>>1を読んでいないのか?専用クソスレ用意されているぞ。
おまえは、>>1を読んでいないのか?専用クソスレ用意されているぞ。
おまえは、>>1を読んでいないのか?専用クソスレ用意されているぞ。
おまえは、>>1を読んでいないのか?専用クソスレ用意されているぞ。
おまえは、>>1を読んでいないのか?専用クソスレ用意されているぞ。
005655
03/02/12 00:16ID:???WOTabPanel.woを継承するサブクラス作って直接いじるしかないのか?
(ProjectWONDERみたいに)
便利なコンポーネントなんだが
005755
03/02/12 00:21ID:???http://pc2.2ch.net/test/read.cgi/php/1044328908/l50
(このスレの最新50を表示するURL)
を、Safariからアクセスすると、レスポンスアンカー(>>1とか)が正しく機能していないような?
ハイパーリンクになってないんだが、、これは漏れのところだけですかね?
0058nobodyさん
03/02/12 02:35ID:???アポーマンセーはマク板でお願いします。
・・・つーかWebObjectsで3つもスレ立ててんじゃねーよ!
マカーはマク板へ帰れ!
0059nobodyさん
03/02/12 09:47ID:???0060nobodyさん
03/02/12 13:27ID:gNaJ3R3rWOTabPanelのバインドに以下のキーを追加。
width = "広げたい幅"
高さは不明。
0061nobodyさん
03/02/12 23:13ID:t5y+6PRt0062nobodyさん
03/02/12 23:21ID:JmLvk5O1その例えは間違っている。
0063nobodyさん
03/02/12 23:43ID:agonX8npWebObjects???????????????????????????????????
???????????????????????????
0064nobodyさん
03/02/13 05:07ID:uoYhMFPMアポー次第でしょうね。
ひたすら雑誌に広告を出し、日経ナンちゃらに紹介事例を死ぬほど寄稿し
各種セミナーにうざいほどでて、サーバーベンダー(HPとかSUNとか)に
血へどが出るまでバンドルを依頼し、狂ったようにソリューションベンダーに
採用を依頼し、あまつさえ、今出ている未訳のドキュメント類を漏れなく翻訳
すれば、少しは状況が変わってくるでしょう。
しかし、アポー(NEXTも一緒)の販売戦略って「客が驚けば買ってるれるっしょ」
の一言で表現されてしまうように、自分から頭を下げることはまずしませんので
望みは薄いと思います。
0065あぼーん
NGNG0066あぼーん
NGNG006723
03/02/13 18:23ID:P1k+s+Q3みなさんありがとうございます!
今のところは、EOModelerで_rowidをREAD ONLYにすることで回避しています・・・。
データが2つできたりとか謎な現象が起きるんですが
だましだまし動かしてます。
WebObjects5.2
OpenBaseは最新版(確か7.10)です。
OSはMac OS X Server 10.2
EOModelerでのモデルファイルの作成は自動でやらせてます。
自動生成したんですが、なぜか_rowidが含まれるんですよ。
なぜなんでしょう?
プライマリーキーは_rowidに設定しています。
この週末は休みたいよー。
0068nobodyさん
03/02/13 19:20ID:CDpL2M6tうみゅー、よく判らないです。
いちおう、簡単なテーブル作ってモデル取り込みするとAttributeできますね。
>_rowid
管理項目云々はWOに教わった人に聞いていたのと、アポーのサンプルがことごとく
PKから_rowidを外していたので、これはヤバいんでねーかと思った次第です。
(当方はその後MySQLに逃げてしまいましたが。)
グーグル先生にも聞いてたところスコット君の説明がヒットしました。
バージョンは不明ですが、「PKにつかってもいいよん」というお答えでした。
簡単なアプリ作って追加/削除くらいはやってみましたが、いちおういけそうな
感じです。(PKは_rowidのまま)
あと、チェックする項目としてはPKにダイヤモンドマークがついていないか
ぐらいですが。
もしよろしければ、差し支えない範囲でどんな機能があるのか教えて下さい。
私がたいして役に立つとは思えませんが。
006968
03/02/13 19:37ID:CDpL2M6t>データが2つできたりとか謎な現象が起きるんですが
実際のDBにデータが2件かかれたりとかしていますか?
DB上に1件しかないのに画面上に2件出てしまう場合、DisplayGroup
とDBの同期がうまくいっていないことがあるので、DisplayGroupの
fetch()メソッドを呼ぶなどして更新してみて下さい。
0070nobodyさん
03/02/13 23:55ID:xIN/P+G8https://www.event21.ne.jp/apple/wobjpay.html
http://www.cybersolon.com/wo_seminar/wo_training.html
どちらにしようか悩んでます。前回受講した人いたら感想聞かせて。
ところでこの2つ、どうして同じ頃に合わせてやるのでしょ?
0071サンカシャー
03/02/14 00:25ID:yEaQmrnl前者に出た。昨年だけど。
基本的に、WebObjectsを全く知らない人向けのセミナ。Javaをちょっといじったことが
あれば何とかできる。WebObjectsの紹介だとかサイト構築事例だとか。でサンプル使って
ちょっとしたアプリを作る。そのちょっとしたアプリでできあがる奴は、PHPやPerlなら
半日はかかるかもしれぬ奴を1時間ちょっとで組むって感じ。説明はちょっとわかりにくいかも。
WebObjectsがどーゆーふーにしてアプリを作り上げていくかのイロハが判るのは良いと思った。
チュートリアルでいじったことがあるようなら、参加の意味無し。
意外だったのは、周りはマカーばっかだと思ったが、どうってことない、フツーの
リーマンっぽい香具師しかいなかった。隣の奴と名刺交換したが、名を聞けば誰でも
知ってる大会社で、一部門がWebObjects部隊になる(!)ってーんで、そこに投入
されたらしいんだと。
ま、そんなとこ。後者のセミナは全くワカラン。もっと聞きたいことあるかね?
0072名無し
03/02/14 00:50ID:hTREH1A2それは無償セミナーのことじゃないでしょうか。有償トレーニングは4日間みっちり行うかなりレベルの高いものと聞いていますが。少々WebOjectsを使った程度ではついていけないようです。
00734
03/02/14 01:01ID:???親コンポーネントと子コンポーネントの間での値の受け渡しはAPIエディタ
でうにょうにょしたらできるようになりました。
子コンポーネントから親コンポーネントのアクションメソッドに制御を
移すのはperformParentActionでできました。
それで今度は親コンポーネントから子コンポーネントのメソッドを呼びたい
んですが、その方法がわかりません。
親コンポーネントのアクションメソッドから子コンポーネントのクラスの
初期化メソッドを叩きたいのです。
なにか方法はあるでしょうか?
0074nobodyさん
03/02/14 02:18ID:???表示時にappendToResponseが呼ばれるので、親のアクションメソッドでフラグ
立てて、子のappendToResponseでsuper.appendToResponse(...)を呼ぶ前に
初期化処理をしてやったらどうでしょう?
フラグに使うは変数はバインディングで共有できますよね。
0075nobodyさん
03/02/14 02:27ID:???アポーのWWDC2002 session WebObjectsのADC TVを買ったら
デモアプリのサンプルコードはついてくるの?
それともただストリーミングを見ることができるだけ?
何か今見たら見られるだけっぽいですね…DVDコンプリートセットには
ソースコードあるのでしょうか?
自腹で独学&貧乏人にはつらい金額…
0076nobodyさん
03/02/14 09:58ID:???会員<-->>LINK TABLE<<-->関心のある分野
というテーブルがあって、
SFとコンピュータに関心のある会員の一覧を求めるなんて、
EOUtilities.rawRowsForSQLで対応する以外に解決策ってありますか?
007823
03/02/14 10:43ID:uukSVsC0ありがとうございます。
_rowidからPKを外しても_rowidの生成には問題ないんでしょうか?
でも外したら外したで「PKがない」と怒られるし・・・。
実際に2つデータができてます。
作り方そのものがまずいんじゃないかとは思うんですが。
0079nobodyさん
03/02/14 12:12ID:???アポーのサンプル(WOMovieとWOPetStore)をみると、2通りのアプローチ
をしています。
WOMovieの方はDB上のPK_はrowidのままで、EOModeler上のPKは別にとった
ユニークインデックスに割り当てるというもの。
WOPetStoreについては、DBの定義そのものにも_rowidにPKが張られていません。
別の項目に割り当てられています。
だからといって、私が試した限りでは_rowidで駄目というわけでもなさそうです。
>でも外したら外したで「PKがない」と怒られるし・・・。
PKは必ず必要です。ただ、アポーのサンプルみると、_rowidでなければならない
訳ではなさそうです。
あと、PKはDBにinsertする前にWOに通知する必要がありますので、
(WOが決定できる条件なら、Null値を叩き込んでWOに決めさせてもいい)
アダプターがシリアル値などに対応していない場合(OpenBaseってどうだったかな?)
WO以外でPKが更新されるとおかしな現象が多発します。
一度、問題が発生したメソッドをアップしてみればどうですか?
008069
03/02/14 12:40ID:Y6GeQPq3試してませんけど。
String qualifierFormat = "会員.リンクテーブルs.関心のある分野 = %@";
NSArray array = NSArray(new Object[] {"SF","コンピュータ"});
EOQualifier qual =EOQualifier.qualifierWithQualifierFormat(qualifierFormat,array);
で検索条件を指定してfetchする。
でいけませんか?
0081nobodyさん
03/02/14 13:44ID:???> でいけませんか?
では、行けませんね。
PARTS<-->>RELTABLE<<-->COLORS
の例だが、
残念ながら
EOQualifier qualifier = EOQualifier.qualifierWithQualifierFormat("relTables.colors.colorJ = %@",new NSArray("白"));
と
EOQualifier qualifier = EOQualifier.qualifierWithQualifierFormat("relTables.colors.colorJ = %@",new NSArray(new Object[]{"白","黒"}));
は共に
<com.webobjects.jdbcadaptor.OpenBasePlugIn$OpenBaseExpression: "SELECT t0.PartID, t0.PARTNAME FROM PARTS t0, RELTABLE T1, COLORS T2 WHERE T2.COLORJ = ? AND t0.PartID = T1.PARTID AND T1.COLORID = T2.COLORID" withBindings: 1:"白"(colorJ)>
という同じSQLを生成する.
new Object[]{"白","黒"}
のところを
new Object[]{"赤","白","黒"}
にしたら、SQL文の中の白が赤に変わったから、関数のバインドは間違えていないと思う。
0082nobodyさん
03/02/14 16:26ID:???ごめんなさい。この場合はEOOrQualifierにすべきでしたね。
NSArray array1 = NSArray(new Object[] {"SF"});
EOQualifier qual1 = EOQualifier.qualifierWithQualifierFormat(qualifierFormat,array1);
NSArray array2 = NSArray(new Object[] {"コンピュータ"});
EOQualifier qual2 = EOQualifier.qualifierWithQualifierFormat(qualifierFormat,array2);
EOOrQualifier qual = new EOOrQualifier(new NSArray( new Object[]{ qual1, qual2} ));
EOFetchSpecification fetchSpec = new EOFetchSpecification("会員",qual,null);
EOEditingContext ec = session().defaultEditingContext();
NSMutableArray listArray = new NSMutableArray(ec.objectsWithFetchSpecification(fetchSpec);
これでいけるはずです。
008382
03/02/14 16:30ID:Y6GeQPq3適宜補正して下さい。
(といいつつ最後のステップで”)”がぬけてるしぃ)
008482
03/02/14 16:34ID:Y6GeQPq3誤)String qualifierFormat = "会員.リンクテーブルs.関心のある分野 = %@";
正)String qualifierFormat = "リンクテーブルs.関心のある分野 = %@";
0085nobodyさん
03/02/14 16:34ID:???それだと、どちらかに興味ある人は、求められるのですが、
両方に興味ある人は求めれないのですよ。
まあ、それぞれのリストをNSArrayで取得して、
共通部分を求めればいいと言われればそれまでですが。
008682
03/02/14 17:59ID:Y6GeQPq3うーん、その場合だとSQLぶん投げた方が早いかもしれませんね。
でも2つくらいならいけますよ。
1つめのqualifierFormatを"リンクテーブルs.関心のある分野.分野 = %@"
2つめのqualifierFormatを"リンクテーブルs.関心のある分野.リンクテーブルs.会員.リンクテーブルs.関心のある分野.分野 = %@"
で、おのおのEOQualifierを作成し、EOOrQuarifier をEOAndQualifierにかえて結合します。
(やり方そのものは実績あり。(つーか使っているのをみた))
あまり、こんなおばかな手段をとる人はいないと思いますが。
(だって、AND条件が増えればqualifierFormat増やさなければならないし)
0087nobodyさん
03/02/14 18:11ID:???> 2つめのqualifierFormatを"リンクテーブルs.関心のある分野.リンクテーブルs.会員.リンクテーブルs.関心のある分野.分野 = %@"
こんな技があるのか!!
勉強になりました。
> (だって、AND条件が増えればqualifierFormat増やさなければならないし)
3つめ以降は2つめと同じでいい気もするがだめなのかな?
今度、時間にみつけて試してみます.
どうも、ありがとうございました。
008887
03/02/15 13:52ID:???> 3つめ以降は2つめと同じでいい気もするがだめなのかな?
自分で試してみて納得いきました。
えーと、2つめのqualifierFormatは、正確にはこうかな?(同じ会員の別のリンクテーブルにアクセス)
2つめのqualifierFormatを"リンクテーブルs.会員.リンクテーブルs.関心のある分野.分野 = %@"
だから、
1つめのqualifierFormatを"リンクテーブルs.関心のある分野.分野 = %@"
2つめのqualifierFormatを"リンクテーブルs.会員.リンクテーブルs.関心のある分野.分野 = %@"
3つめのqualifierFormatを"リンクテーブルs.会員.リンクテーブルs.会員.リンクテーブルs.関心のある分野.分野 = %@"
・・・・
n番目のqualifierFormatを("リンクテーブルs.会員."×(n-1))+"リンクテーブルs.関心のある分野.分野 = %@"
ある意味「こんなおばかな手段」ともいえますが、
WOの枠組みだけで問い合わせできるし、qualifierFormatも、機械的に生成できるので、「使える」という気がすごくします。
0089nobodyさん
03/02/15 23:16ID:???いまはもう辞めてしまいましたが以前、WebObjectsのプログラマのアルバイトをしていました。
アルバイト先の会社は僕の大学の学生をアルバイトとして使いたいという理由だけで
大学の近くに会社ごと引っ越してきたそうです。
アルバイトは同じ大学の人ばかりでした。
何故、WebObjectsには学歴が重要なのでしょうか?
もし、高学歴者の僕がみなさんの会社に就職したら低学歴のみなさんより
高給取りになれますか?
就職先は引く手あまたですが、大企業の年功序列が崩れてきているので
たとえ零細でも給料が高いところにいくことも考えています。
高学歴が逝かせるWebObjects関連会社なら初任給で年収1200万位はいきますか?
009189
03/02/16 01:02ID:???IP記録がどうかしたのですか?
特定の個人や団体を誹謗してるわけじゃないし、
アンタにとやかく言われるいわれはないですね。
それとも低学歴のヒガミかな(W
0093nobodyさん
03/02/16 02:22ID:???>僕の大学の学生をアルバイトとして使いたいという理由だけで
>大学の近くに会社ごと引っ越してきたそうです。
雑居ビルの一室(以前のスレでワンルームとあった)で経営してる会社の
引越しなんて俺の家の引越しよりお手軽だよ(藁
0094おもしろいのがいるな。
03/02/16 04:19ID:???0095あぼーん
NGNG0096nobodyさん
03/02/16 07:04ID:???勤めて高収入を得ようというのなら、「引く手あまた」の中から適当なものをチョイスすることをお勧め.
> もし、高学歴者の僕がみなさんの会社に就職したら低学歴のみなさんより
> 高給取りになれますか?
給与額云々の前に、うちの会社では君はいりません.
本当に高収入が欲しいのであれば、
技術ノーハウ、営業ノーハウの学習できる会社に就職して、しかる後に独立することですなw
0097WebObjectsの稟議が通らない人
03/02/16 09:13ID:XIpFysKb0098nobodyさん
03/02/16 16:37ID:???学歴神話いまだ健在ってことか?
>何故、WebObjectsには学歴が重要なのでしょうか?
全然重要じゃない。この話がネタでなければ単にプ社がアホなだけ。
>>96のいうように技術ノーハウや営業ノーハウのほうが重要だ。
この世界は東大ってだけでマンセーされるほど甘くはないよ。
0102nobodyさん
03/02/16 20:54ID:???>雑居ビルの一室(以前のスレでワンルームとあった)で経営してる会社の
>引越しなんて俺の家の引越しよりお手軽だよ(藁
関係者に聞いたところだと静岡が本社とウタってはいるが、
そこは単に社長の家だそうだ(藁
実体のない支店や本社を作って会社を大きく見せる手法は
見習うべきかもしれない。
うちもやろっかな?
0103nobodyさん
03/02/16 21:30ID:???実名あげろ。妄想かぃ?
>>関係者に聞いたところだと静岡が本社とウタってはいるが、
>>そこは単に社長の家だそうだ(藁
中小企業経営者なら、そんなやついくらでもいる。何もそこだけじゃない。
ところで、WOFileUploadでストリーミングアップロードをしたいんだが、
WebObjects5.1じゃできないようだ。自前で何とかしないとダメなのか?
0104nobodyさん
03/02/17 02:54ID:U++jXk1/ストリーミング機能付きのWOFileUploadはWO5.2からの新機能です。
5.1でやるからには独自の機能拡張が必要かと。
010582
03/02/17 16:59ID:LzPBxf8f亀レスでごめんなさい。
> n番目のqualifierFormatを("リンクテーブルs.会員."×(n-1))+"リンクテーブルs.関心のある分野.分野 = %@"
つまり、アダプターがテーブルを出現順にt0,t1,t2・・・と連番でふっているのを利用しています。
おばかな手段と思ったのは将来的にもこの法則が適用されるのかなー、見た時ふと思っただけです。
(JDBCの詳しい仕様とかは全く理解していませんが)
ちなみに、そのコードには思いっきりオンコードで上記のようなqualifierFormatがいくつも書かれて
おりました。最初は何やっているのかさっぱり判らなかったです。
いちおう、WO5.2のWOMovieでためしたらうまくいったのでとりあえず今のところは大丈夫なようです。
0106nobodyさん
03/02/17 17:46ID:VGnBF5TZ↑どうだ?
0108nobodyさん
03/02/19 20:40ID:iIVh2s0CError: com.webobjects.eoaccess.EOGeneralAdaptorException: updateValuesInRowDescribedByQualifier -- com.webobjects.jdbcadaptor.JDBCChannel method failed to update row in database
Reason: updateValuesInRowDescribedByQualifier -- com.webobjects.jdbcadaptor.JDBCChannel method failed to update row in database
が出てしまいます。原因と対処法を教えて下さい。
----------
EOFetchSpecification fetchSpec =
new EOFetchSpecification ("Masterstudent", qualifier, sortOrderings);
arrayStudent =
session().defaultEditingContext().objectsWithFetchSpecification(fetchSpec);
if (arrayStudent.count() == 1) {
Session.currentStudent = (Masterstudent)arrayStudent.objectAtIndex(0);
Masterstudent theStudent = (Masterstudent)arrayStudent.objectAtIndex(0);
String string = theStudent.password();
if (string == null) {
//Session.currentStudent.setPassword("TESTPASSWORD");
theStudent.setPassword("TESTPASSWORD");
session().defaultEditingContext().saveChanges();
}else{
0109nobodyさん
03/02/19 21:57ID:5fvPzEiiこれだけだとなんとも・・・。
WOのバージョン、DBなんかも教えれくれないと。
いちおう、似たようなエラーを吐いた事象としては以下のものがあります。
参考にしてくださいまし。
http://www.tech-arts.co.jp/macosx/webobjects-jp/htdocs/1900/1960.html
からのスレッド全部。
ただ、ちと古いんですよね。
0110nobodyさん
03/02/20 09:02ID:???0111nobodyさん
03/02/20 09:56ID:v9eyipuGすいません。WO5.2、Openbase7、Mac OS X Serverです。
>>110
はずしても問題ないんですかね?
0112109
03/02/20 13:41ID:VW1SZJC9あの鍵マークは自分以外に該当のレコードを更新していないか
をチェックするために使用してます。
生成されたSQLを見るとわかるのですが、PK以外にも鍵マークの
ついている項目についてもWHERE文を発行しています。
だから、外しても問題ありません、そのかわりロック機構が甘く
なります。
ただ、日付型については外した方が吉です。(というか外さないと駄目)
あと、Openbaseとのことですので、MLから
日付関係のカラム(あれば)は全て
Date/time → Datetime
変更してみてはいかがでしょうか?
0113nobodyさん
03/02/20 16:54ID:v9eyipuGありがとうございます。
カギマークはずしてみましたがダメでした。
日付はすべてdatetimeになっています。
単純にfetchしてきたものをNSArrayに入れて、変更後に書き戻したい
だけなんですが・・・なんでこんなに苦労するのやら。
0115nobodyさん
03/02/21 09:45ID:3/B6iMn7だめでした。
theStudent.setPassword("TESTPASSWORD");
を呼ばなければsaveChangesのとこでエラー吐かなくなるんですが、
これって変更点がないからスルーされてるわけですよね・・・。
0116112
03/02/21 10:36ID:2Gb1xm+Nこの例外ってtech-artsのMLでもたまーに出てきていますが、いずれも
解決していないようです。
tech-artsのMLに出てきた話を総合すると、
1)OpenBaseのJDBCが悪い(2001/9頃)
→ Data/TimeをDatetime型に変更して対応
2)開発中に急に例外が出るようになった(2003/2/17)
→ EOModelerの鍵マークを外す
あと、同じ例外がOracleでも出ています。
そのときはEOModel上のValue Typeに適切な値を設定して回避しています。
念のため、EOModelをDBから直接生成してみて、Value Typeの値がどうなるか
確認してみてはいかがでしょう。(こちらでOpenBaseから自動生成したら
なんかいろいろつけてきました。)
あとは、ECにたまっているEOと、実際に変更しているEOが同一かどうかを調べて
見るのも手かもしれません。(MLより転載)
System.out.println ("Student = " + theStudent);
System.out.println ("registeredObjects=" +ec.registeredObjects());
System.out.println ("updatedObjects=" +ec.updatedObjects());
最後に、生成されるSQLがどうなっているかも確認して下さい。
あまり役に立たなくてすいません。
#EOModelが壊れている可能性も・・・・
0117nobodyさん
03/02/21 13:48ID:3/B6iMn7ありがとうございます。
MLでも解決してないんですか・・・。
とりあえずEOModelを作り直してみます。
0118nobodyさん
03/02/21 14:56ID:???It also controls which JDBC methods are used to send and retrieve the data
to and from the database. For attributes with a Value Class of
java.lang.String the following value types are defined:
<none>
c
S
C
E
These Value Types affect which method on the java.sql.PreparedStatement are
used to transfer text data between the database and the JDBC adaptor. An
empty Value Type is backward compatible behavior with WebObjects v4.5 and
uses the setString() method if the text is less than the database's
advertised maximum varchar length, and setCharacterStream(), if it is too
large. If the database fails to advertise a maximum length, the default is
256 characters. A Value Type of 'S' uses setString() regardless of the
text's length. A Value Type of 'C' uses setCharacterStream() regardless of
the text's length. A Value Type of 'E' converts the text into raw UTF-8
bytes, and then uses setBinaryStream() to save them in a binary typed column
in the database. The Value Type of 'c' tells the adaptor to generate SQL
using RTRIM to strip off all trailing spaces, such as those found in CHAR
columns.
'S' is appropriate for most text columns. 'C' is good for columns which
usually contain large amounts of data. 'c' should be used when trailing
spaces are not significant in a CHAR column. (It's better to use a VARCHAR
column if possible.) We recommend against using 'E', except in extreme
cases. It is the database's responsibility to handle text encoding issues,
and using 'E' is usually an indication the database is not correctly
configured.
0119あぼーん
NGNG0121nobodyさん
03/02/23 04:12ID:Zw6X7JIs寝てないから頭働かない・・・。
0122nobodyさん
03/02/23 11:26ID:QXOQDmtK0123あぼーん
NGNG0124nobodyさん
03/02/23 14:38ID:???解決策は東大だよ 東大生をバイトに使え
彼らがすべて解決してくれる
東大生はキミらのような低学歴とは違うんだよ
何?東大なんて縁がない?
だったら会社を東大の近くに移転し、バイト募集の貼り紙を
勝手に大学構内に貼りまくるんだよ
何?それは違法じゃねーかって?
キミらみたいな零細会社はそれくらいやらないと生き残れないぞ
根性出せよ、根性!
0125112
03/02/23 16:00ID:DWsalvWkこちらでも、簡単なテストしてみました。
同一例外が出たのは、DB上のフィールド長とEOMODEL上のフィールド
長が異なっている場合(たとえばDB上は8カラムなのにEO上は1024
カラムとっているとか)で発生しました。
ちなみにEO上のフィールド長をこえて更新しようとすると
きちんとValidationExceptionが発生します。(追加はなぜかOK。
ただし、Nullで書き込まれる)
参考になれば幸いです。
0126nobodyさん
03/02/23 17:52ID:???0127nobodyさん
03/02/23 18:53ID:???EOModelerのSQLGenerationでCreate Tablesにチェックを入れると
ObjCJava WARNING: An error has occurred in the Java Bridge.
You should try to save changes and restart your application.
というエラーが出るのですが、この対処方法&原因が分かりません。
多分どうしようもない、ミスなんでしょうが、お分かりの方いらっさいますか?
EOModeler 5.2、WebObjects 5.2、MacOSX10.2
0128nobodyさん
03/02/23 19:36ID:???あ、それ、漏れも出る。今までは、EOModelorを再起動して解決はした。
あと、一つのプロジェクト内に2つ以上のモデルファイルが登録されていて、
EOModelor上でその2つが開かれていない時に出た。
0129127
03/02/23 21:02ID:???いつの間にかからっぽになってました。
Omniのメーリングリストにも同じような話がありました。
ただ今度はJDBCエラーでうまくExecuteSQLいかなくなってしまいました…
また変なところでミスってるんだろうな…ふぅ…がんばろ…
0130nobodyさん
03/02/23 21:12ID:???0131nobodyさん
03/02/23 21:23ID:QXOQDmtK解決して何より。
ところで、ガンダム種をみたんだが、あんまし面白くねぇな。漏れにとっちゃガンダムはゼータでおしまい。0083だけが例外で良しとする。他は全部だめ。
0132nobodyさん
03/02/23 21:27ID:???経験豊富な皆さんのご意見求ム。
0133nobodyさん
03/02/24 14:18ID:l2bFd7Rjありがとうございます。
やってみます。
>>125
文字型の幅をチェックしてみましたが、
DBのもEOのもすべて同じ幅にしてありました。
うーん。何が悪いのやら。
0134あぼーん
NGNG0135nobodyさん
03/02/25 01:40ID:???WOFD5.xのEOFはJDBC経由でDBにアクセスするので、データベースアクセスに
関しては間違いなくServlet+JDBCの方が速いと思います。
「FORTHはアセンブラより速い」理論で言えばヘボプログラマが書いたSQLより
EOFの吐くSQLの方が効率的ならServlet+JDBCが負ける可能性もありますが。
0136nobodyさん
03/02/25 02:30ID:2laNS2FKとりあえずSQL投げてUPDATEかけたらうまくいったので、これでよしとします。
動いたものを一応はっておきます。(WO5.2用)
なんか余計なもんがついてるとか、こうしたほうがいいってのがあったら
お教え下さい。
EOModel aModel = EOModelGroup.defaultGroup().modelNamed("モデルファイル名");
EOAdaptor aAdaptor = (EOAdaptor)EOAdaptor.adaptorWithModel(aModel);
EOAdaptorContext aContext = aAdaptor.createAdaptorContext();
EOAdaptorChannel aChannel = aContext.createAdaptorChannel();
EODatabaseContext dbContext = EOUtilities.databaseContextForModelNamed(ec,"モデルファイル名");
EOSQLExpressionFactory afactory = new EOSQLExpressionFactory(aAdaptor);
EOSQLExpression expression = afactory.expressionForString("実行したいSQL");
aChannel.openChannel();
aChannel.evaluateExpression(expression);
0137nobodyさん
03/02/25 03:42ID:???ママー、怖いよー、また2ちゃんになんか書かれたよー
Acrobat起動した僕が悪いんです〜、土下座しますから許してくださ〜い〜
0138nobodyさん
03/02/25 12:53ID:6pkn8/5n単純にSQLを投げたいんであれば、
EOUtilities.rawRowsForSQL(ec ,"モデル名","実行したいSQL");
でいけませんか?
(実行したいSQLがSELECT文なら、戻り値としてNSArrayが必要)
更新した後は、当然のことながら再Fetchする必要がありますが。
0139nobodyさん
03/02/25 13:05ID:6pkn8/5nベンチマークみたいなテストをすれば負けるでしょうね。>WO
ただ、EOFの仕組みとしてFaultやキャッシング機構などがあるので、
体感上は同等か、それ以上のものができると思います。
(ただし、EOFの考え方を理解した上での話)
#まぁ、それがあだになることもありますが。
明らかに不得手なものとしては、大量データ処理でしょうね。
とってきたレコードを一旦EOというオブジェクトに展開するので
めちゃめちゃメモリーを食います。
EOFの仕組みを使って、何も考えずに一度に取得できるレコード数は
1000件ぐらいが限界ではないかと思います。
以前、10万件くらいをバッチに取り込む画面を作ったことがありますが、
EOFそのままでは使えず、結構回りくどい手を使いました。
0141nobodyさん
03/02/25 20:13ID:???なにも、WebObjects(EOF)だから大量データ処理が不得手というわけじゃなくって
Javaを使うAP鯖なら、どいつもこいつも弱いと思う。というかJavaそのものが
弱い感じ(対RDBMSに対して)。Javaを使った業務システムを何十件とみてきた
けど、大量データ処理そのものは汎用機なんかに任せてるのが実態。
0142nobodyさん
03/02/25 20:47ID:???WOF5.2をWinで使ってます。
大量のデータ(500件ぐらい)をDBからフェッチしてリストにする処理があるのですが、
これを実行するとメモリを40MBぐらい消費してしまい、nullを代入してからSystem.gc()
しても離してくれません。このままだとOutOfMemoryになるので困っています。
これはWOFが勝手にメモリをつかんでいるからなのでしょうか?
0143nobodyさん
03/02/25 20:51ID:???起動オプションでメモリ使用量を上げれば済む話じゃないの?
いっとくが、一度確保したメモリはgcされようが、
アプリの使用メモリそのものは
減ることはないぞ。(WOFの仕様とかじゃなくて)
0144142
03/02/25 21:18ID:???インスタンスは3つで、起動オプションは-Xmx192mをつけてます。
実メモリは1GBですが、DBも同居しているのでこのぐらいが限界です。
この状況でも、一度に40MBぐらい食って、また同じ処理が走ると更に40MBぐらい
食うのであっという間にメモリがなくなってしまいます。しかも、一度OutOfMemoryを
起こすとゾンビのようになってしまい(強制終了は可能)、他のインスタンスに負荷が
集中するという悪循環に陥ってしまいます。
0145138
03/02/25 21:18ID:bTv6fMunできますよ。
0146nobodyさん
03/02/25 21:25ID:???そうでしたか、昔やってもできなかったんで、ダメなもんだと思ってました(恥
ありが�d
>>144
アプリの仕様を見直した方が良いのでは。ロジック一つでメモリ喰う量がだいぶ違うし。
0147nobodyさん
03/02/25 23:16ID:I7JMksdr漏れはNTTのマリオスだとか位置情報検索システムが本当にWebObjectsで構築されているとは知りませんですた(;´Д`)ハァハァ
WebObjectsすごすぎです。
0148WO1年生
03/02/26 12:42ID:3R/YWb3W500件くらいで40MBはちょっとメモリを消費し過ぎだと思います。
(分母のデータ件数はどれくらいですか?)
チェックポイントとしては以下の通りでしょう。
1)DB上に大きなバイナリデータがある。
→ バイナリデータを別テーブルに切り出して1:1のリレーションにする。
当然、バイナリデータはドリルダウンした時に表示。
2)WODisplayGroupを使っている。
→ 全件よみこんでいないかどうか確認する。
→ よみこんでいるなら、fetchSpecを指定して絞り込むか、qualifiDataSource()
で絞り込むようにする。
3)その他
(1) setPageCacheSize()を調整する。
(2)明示的にLogoutをユーザーに実行させ、セッションをターミネートする。
(3)データを使わなくなったら、ec.fogretObject(eo)とか、invalidateObjectsWithGlobalIDs(gids)
を試してみる。(ただ、forgetの方はたまに忘れてくれない)
(4)sheardEditingContextを使ってみる。
(5)rawrowForSQLでデータを取得する(最後の手段)
(6)大量データ検索用のEditingCotextを用意し、検索の前に作成、検索ページを閉じる際にnull
(さらに最後の手段)
私が思い付くのはこれくらいです。
識者の方、他にありませんか?
0149WO1年生
03/02/26 12:49ID:3R/YWb3Wちなみに、何にnullを設定してgcかけているのかは判りませんが、一度
検索したEOはEditingContext配下のレイヤーにキャッシュされていますので、
表示用のArrayとかDisplayGroupにnullを設定しているのであれば
あまり効果がないと思います。
0150nobodyさん
03/02/26 15:40ID:???DarwinもしくはOpenDarwinにWebObjects Deploymentはインストール
できるのでしょうか?
0151nobodyさん
03/02/26 16:01ID:???■ このスレッドは過去ログ倉庫に格納されています