1

ローカルではすべて正常に動作しますが、展開すると、サーブレットからConcurrentModificationException使用するとスローされます。session.setAttribute()HTMLフォームを使用してエンティティを追加した後、これを使用してデータストアから値を返します。

どうしてですか、どうすればいいですか?

壊れたサーブレットは次のとおりです。

public class AdminServlet extends HttpServlet {
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        Boolean logged = false;
        HttpSession session = req.getSession(true);
        Enumeration<String> names = session.getAttributeNames();

        while(names.hasMoreElements()) {
            String name = (String) names.nextElement();

            if(name.equals("logged")) {
                logged = (Boolean) session.getAttribute("logged");
            }
        }

        if(logged) {
            String p1 = req.getParameter("name");
            String p2 = req.getParameter("value");

            if(p1 != "" && p2 != "") {
                Entity e= new Entity("MyEntity");
                e.setProperty("name", p1);
                e.setProperty("value", p2);

                DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
                Transaction txn = datastore.beginTransaction();

                Key k = datastore.put(e);

                txn.commit();

                if(txn.isActive())
                    txn.rollback();

                session.setAttribute("returnedKey", KeyFactory.keyToString(k)); // CRASHES HERE
            }
        }

        resp.sendRedirect("adminpage.jsp");
    }
}

ありがとう!

4

1 に答える 1

1

セッションでも Enumeration が開いています。

列挙名 = session.getAttributeNames();

セッションで属性を変更すると名前に影響するため、エラーが表示されます。

名前が使用されないようにコードを記述してみてください (null または範囲外)。

メソッドに入れるのは簡単だろう

public boolean logLogged(HttpSession session){

    Enumeration<String> names = session.getAttributeNames();

    boolean loggedTmp=false;

    while(names.hasMoreElements()){

        String name = (String) names.nextElement();

        if(name.equals("logged")){
            loggedTmp = (Boolean) session.getAttribute("logged");
        }
    }

    return loggedTmp;

}
于 2012-07-22T21:36:32.650 に答える