なんかtomcatが停止できなかった

昨日から悩んでたんですけど、tomcatの起動はできても停止が出来ない。 logとか確認するとstartの出力だけあって停止についてはなにも出力されてない。。 lsofで8080使用中のプロセスを探してkillするけど、もいっかいlsofで8080調べると別のプロセスIDが表示される。無限ループ。oh...

kill -KILLでkill出来ないなら諦めて再起動するやでって書いてる人がいたので、再起動して見た。 んだけどやっぱり停止できない。プロセス死なない。

どうしようもなくてtomcatを削除し、homebrewを使わずに同じバージョンをインストールしてきたら問題なく起動と停止ができた。

動作的には問題なくなったから嬉しいけど 何だかなあ。

homebrewでtomcat@8.0とかでインストールしたんですけど、なんかよくなかったのかなあ。

大きな会社小さな会社

こんにちは。まるこです。 前回記事を書いてからだいぶ時間が経ってしまいましたね。 もう7月が終わっちゃうよ・・・。

今月はずっと取り組んでいた案件を終え、新たな案件をこなしていましたが、 わからないことばかりでしんどい月でした。 だいぶ自分の好きなことや苦手なことがわかるようになってきましたね。 自分はテストを書くのが少し苦手かな。 お仕事でコードを書くと、苦手なところもやったことないことも必ずやらなきゃいけないのがいいですよね。 レビューでたくさん指摘してもらえるのが嬉しい今日この頃です。 少しずつ指摘されるのを減らしていきたいですね。

さて今日は大手ではなく小さな会社に就職して、今の所感じているよかったところをかきますね。 あ、ちなみに本当に社員が少ない会社です。

まず、最高にありがたいのは、入社してからすぐプロジェクトに関わらせてもらえることです。 私の場合は一ヶ月間プロジェクトを把握したりルールを覚えていったりして、 5月からは案件を振ってもらえました。 もちろん一人ではこなせないので、わからないところは先輩方に聞きながらです。 正直わからないこと90%で仕事しているので、相当ハードですが、無理やりレベルが上がってく感じですごいです。 なんか頑張って置いてかれないようにしてたらできるようになってるみたいな。

あとは、割と新しいプロジェクトに入れてもらえたことですかね。 人数も少なく、新たに作るものも多いので、何かに特化するというよりはいろんなことができる人材になる必要があります。 色々な言語やサービスを使用するので頭が大変ですが一人である程度なんでもいじれる力をつけられるというのは魅力的だなと感じます。 もちろん個人的に勉強して何かに特化するのもいいなと思います。

大きな会社は、入社してから3ヶ月研修をするという話は聞いたことがあります。 研修で技術的なことを一から教えてもらえるのはいいなと思いますが、研修は研修で大変そうなイメージです。 私は少しだけ入社前に2~3言語の入門書を読み、のほほんと仕事をはじめましたが、なんとかなっています。 人間必要になれば頑張れるものですね。

小さい会社だからといって悪いところは今の所感じたことがありません。 同期は一人もいないし、女性一人だし、年の近い人も友達も一人もできませんが、楽しくやってます。 あれ?おかしいな楽しそうに聞こえないぞ。

友達ができないのはちょっとだけ寂しいですね。 まあこの業界に入った仲間はいるのでそれぞれの仕事模様について聞いてみたいです。

もし小さなITの会社に入ることが決まっている人は、仕事が始まったら自分はどんなことをさせてもらえるのか、今自分がやっておいた方がいいことは何か聞いてみてもいいかもしれません。 私はとにかく不安で、上司に4月からどうしたらいいですかねとか聞いていたような。。 今度、学生のころ自分がしていたことと、しておいたたほうがよかったなと思うことかきますね!

今回はこんなところで。小さな会社もいいよって話でした。

新卒入社して3ヵ月たつので振り返ります(趣旨9割)

読者の方がいるのかわかりませんが、お久しぶりです。まるこです。

今年の4月から、大学生の頃からお世話になってきた会社に所属しております。

職業はシステムエンジニアです。

 

このブログを始めたのは2016年2月2日ということで、「もう社会人」なのか「やっと社会人」なのか微妙なところではありますが、とにかく続けてこられてよかったです。

最近は忙しく記事をまとめられる余裕がありませんでしたが、入社してからずっと自分の中にあるものを上手にアウトプットする練習がしたいと思ってきたので、これから少しずつ書いていきたいと思います。

トンチンカンなことを書いていたり、「こうした方が良い」または「自分はこうだよ」などご意見ありましたら、コメントいただけると嬉しいです。

 

さて、4月から会社の人たちと一緒に毎日頑張っているわけですが、新人といえど研修などはありません。

4月からプロジェクトの把握、5月から案件をふってもらい、ついに入社から3ヵ月。

いやぁ、毎日が地獄ですね(会社は超ホワイトです)。

 

小さな会社なので、大手に就職した友人たちとはまた違ったスタートを切っているわけで、そんなところもまとめていけたらなと。

今後、文系・女性・新卒という武器?を生かして、

もし自分に後輩ができたら、こう教えられたらいいんじゃないかなと思うことや、

先輩方との関わりや日々の業務で感じたこと、ぶつかったことなど書いていこうと思っています。

新卒のみんな、元気ですか!一緒に頑張っていきましょう(・å・)

 

 

今日したこと 11/7(火)

 

■カートに追加した商品情報を保持するために作ったクラスの名前をSelectedItemに変更
・nameインスタンスとpriceインスタンスの追加

cart.jspで取り出したい商品名や値段を取り出す方法をDBを使う方法にする
・request.getParameterで選択されたIDと数量を取得。この情報はSelectedItemインスタンスをnewしてそこに詰めておく
・購入ボタンが押されたらjava側で選択されたIDからname,priceを検索(AddCart.java(コントローラ)で商品情報をDBから取ってくる)
・ItemDaoクラスにfindItemNameAndPriceBySelectedId(String selectedItemId)を追加
・selectedItemIdでitemNameとpriceをDBから取ってきて、Listに入れる(このためItemクラスにStringとint型の引数を受け取るコンストラクタを追加)
・AddCart.java(コントローラ)でListにつめた要素を取り出しSelectedItemクラスに代入する
jsp側でsessionに詰めておいたSelectedItemインスタンスに代入されているフィールドのデータを取り出す。

◎今日は選択した商品情報がcart.jspにうまく受け渡せない問題に取り組んだ。
Listの使い方がよくわかってないようで、内部でどのような動作をしているのか、どんな風に使えるのかをわかるようにすることが課題だ。
今日は直すところが多すぎて、結構混乱した。
一気に色々言われて固まってたら、やる必要がある作業を順序化してゆっくり教えてもらえた。
今日はItemIDでDBからname,priceを取ってくるところとかは褒めてもらえた。
ショボいかもしれないけど褒めてもらえると嬉しい。

今日の発見

SQLsyntaxErrorの確認方法
You have an error in your SQL syntax

こういう感じのエラーがコンソールに出ていて、それに気がついたはいいんだけど、何が違うのか全くわからなくて放っておいたら、質問した時やっぱりそこ注意された。
「スペースが全角かも。(スペース直しながら)ターミナルでこのSQL試してみた?」って聞かれて、そうやって確認するんやなって学んだ。
日本語と英語切り替えながら作業してるから、そんなつもりなくても全角スペースにしてることってあるんだなぁ。
最近、エラー読めば全て解決するわけじゃないなって思う。いや、できる人は解決するのかな?
でも、エラーの意味はわかっても、このエラーが出てきた時はこの可能性とこの可能性があるみたいなのがわかってすぐ対処できるようになるのかなって。
私が今日どうしても何が違うかわからなかったのに、教えてくれる人はすぐ思いついたように。
エラーを出して解決する過程というのは、本当に大事なんだなと思った。

メソッドの戻り値

Eclipseを使っているんだけど、今日初めて知ったのは、メソッドの戻り値が確認できること。
例えばListではsizeメソッドが使えるけど、size()ってところにマウスオーバーすれば、そのメソッドの戻り値が確認できる。

int java.util.List.size()

size
int size()

このリスト内にある要素の数を返します。このリストにInteger.MAX_VALUEより多くの要素がある場合は、Integer.MAX_VALUEを返します。

こういうのが出てくる!
今更かって思うけど、そんな余裕なかったし、みてもわかんなかったということなのよね、、
みたことなかったわけじゃないけど、意識してなかったからなんとも思ってなかった。難しげなの出てくるなあとしか。。別に難しいこと書いてなかった、、、

こんな感じでわかることがちょ〜〜〜〜少しずつ増えていってます。
人より進むの遅いかもしれないけど頑張ろう〜。

今日学んだことと、今後の課題 10/31

カートの情報の保存先(何をどういう風に見せたいかでどれを使うか変わる)

セッション(画面をまたげる。今回はこれ使う)

サーバーのメモリ上に情報が載っている
tomcatでセッション有効期間を変更できる
ブラウザを変えるとユニークユーザーを特定できない
セッション有効期限が切れたら情報を保持できない(30分~2時間くらいが基本)

クッキー

クライアントのローカルにファイルとして書き出す
クッキーのファイルが消えたり、ブラウザを変えると情報保持できない
期間は長いが履歴消去などで無効になる

DB

確実だが本人特定が必要
クッキーと併用するケースが多い

実装していない機能

!のところはやるけどちょっと後回しかなあ。

・カートに商品を追加する(商品Idと数量を受け取る。カートに追加ボタンでカートのページに飛ぶ)
・購入に進むか商品一覧へ戻る
!カート内で数量変更や商品を削除する(jspで)
!商品一覧に戻った場合在庫数は減らす?(購入確定のタイミングで減らす)
・購入に進んだ場合購入確認画面へ
・購入確定の場合historyテーブルに商品を追加
!購入履歴が見られるようにする

これからやること

Idと数量を持つクラスを作る
取得したデータをListに入れてセッションに保存する
ショッピングカート画面でセッションからデータを取り出し中身を表示する

注意されているところ

これは今日が初めてじゃないんだけど、名前の付け方について。
他の人のソースを参考にしながら書いているところと、自分で書いているところがあるからっていうのもあるけど、どんな名前にするのが良いのかあんまりわからないで書いてる時もあるかも。
例えば取ってくるのはIDなのに、変数の名前はNameだったりとか。
クラスやメソッドの名前だったりとか。
その名前を見れば何をするかわかるのが良い。
もう少し意識して名前付けしていこうと思う。

最近思うこと

専門用語を正しく使えたり、人に説明するときに正確に何をしているかちゃんと伝えられるようにしたい。
それって、この機能は何をするとか、どういう仕組みなのかとか、ちゃんと分かってると思うし、
人に伝えるには、自分で理解してないとうまく伝えられないから。

昨日、今日と解決したところ 10/30,31

Tomcatが始動しないことについて

Eclipseでサーバーを起動しようとするとエラーが出てしまっていた件。
これ、サーブレットの問題で、アノテーションの/以降が同じになってるサーブレットクラスが2つあって、どっちのクラスなの?わかんないよ〜みたいな感じで起動できなくなってたみたい。
それを直したら、普通につながるようになった。
ポートが使われているみたいな警告が出てたけど、それは関係なかったようだ。
コンソールにログが出るんだけど、全部読まないで、これっぽい!と思ったやつにしか目を向けてなかった。しっかり読まないといけないね。

PreparedStatementの複数テーブルからのデータ取得でitem情報を取り出せない件について

うまくいかなかった時

select itemName,price,quantity from item join stock on item.itemId = stock.itemId;

Select文で最初‼️とのパラメータの数が合ってなかった。

itemList.add(new Item(
                ‼️rs.getString("itemId"),
                rs.getString("itemName"),
                rs.getInt("price"),
                rs.getInt("quantity")

じゃあこれにitemId付け足そうと思って書いたら、結合してる時はどのテーブルのカラムっていうのを明確にしないといけないのでした。

select item.itemId,itemName,price,quantity from item join stock on item.itemId = stock.itemId;

これで動くようになった。

10/17 つまづいたとこ

◎RequestDispatcher

リソースにリクエストをフォワードするか、レスポンスのなかのリソースをインクルードする目的で使用。
リソースは動的、静的どちらにも適用可。

パス名は "/" で始まらなければならない。これによりWebアプリケーションのコンテキストルートに対する相対パスであると解釈される。

外部のコンテキストに属するリソースを利用するには getContext() メソッドを使って RequestDispatcher オブジェクトを取得する。
このメソッドはServletContextがRequestDispatcherを返せなかった場合にnullを返す。

サーブレットからサーブレットへPOSTしようとしたら『パス ほにゃらら が"/"文字で始まりません』って怒られまくってそのエラー文をずっと調べてたんだけど解決せず。
web.xmlになんか付け足す記事が何個か出ていたけど、関係なかったぽい。解決しなかった。
最終的にforwardのこと調べてたら

http://mergedoc.osdn.jp/tomcat-servletapi-5-ja/javax/servlet/RequestDispatcher.html
ここにたどり着いて、決まりを確認したら解決できた。
"/"これつけてないだけだった・・・。
つけて試したりもしたはずなんだけどなぁ・・?
でも今回のは確実にわかってて出来る方がいい。なんとなくじゃなくて。
エラーで調べることばかり考えてたけど、そもそもまだルールや仕様がよくわかってないことの方が多いんだったと思ったつまづきでした。

◎DBからSelectで取って来た値を配列へ

List<Item> itemList = new ArrayList<Item>();

            while (rs.next()) {
                itemList.add(new Item(
                    rs.getString("itemId"),
                    rs.getString("itemName"),
                    rs.getInt("price")
                ));
            }
            return itemList;

前回学んだ余計な変数を作らないみたいな話がもっとよくわかった感じだった。
itemList.add(new Item(
ここ、new Itemでインスタンス生成してるけど、それに名前はついてない(変数に代入してない)。
説明下手だけど、なんかnewするとき変数あるパターンしか見たことなかったから、こういう書き方あるんか!って思った。

あとやっとかないとと思ったのはfinallyでDBcloseするとこ。
でも商品一覧まできたな〜すごい〜