From a707891cf88cab4188bc1b91683a4b3ff2e86928 Mon Sep 17 00:00:00 2001 From: senju Date: Sat, 22 Aug 2009 21:16:48 +0900 Subject: [PATCH] =?utf8?q?DAO=E5=8C=96=E5=AE=8C=E4=BA=86=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit PMF/PMFSupport削除。 サービスのPMF依存をなくした。 --- src/jp/sourceforge/rabbitBTS/PMF.java | 31 ------- src/jp/sourceforge/rabbitBTS/PMFSupport.java | 48 ----------- src/jp/sourceforge/rabbitBTS/dao/AccountDao.java | 2 + .../rabbitBTS/dao/jdo/AccountDaoImpl.java | 12 ++- .../rabbitBTS/dao/jdo/GenericDaoJdo.java | 21 ++--- .../rabbitBTS/services/AccountService.java | 99 +++++++--------------- war/WEB-INF/views/members/delete.ftl | 2 +- 7 files changed, 53 insertions(+), 162 deletions(-) delete mode 100644 src/jp/sourceforge/rabbitBTS/PMF.java delete mode 100644 src/jp/sourceforge/rabbitBTS/PMFSupport.java diff --git a/src/jp/sourceforge/rabbitBTS/PMF.java b/src/jp/sourceforge/rabbitBTS/PMF.java deleted file mode 100644 index ddcf7fa..0000000 --- a/src/jp/sourceforge/rabbitBTS/PMF.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - Copyright 2009 senju@users.sourceforge.jp - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -package jp.sourceforge.rabbitBTS; - -import javax.jdo.PersistenceManagerFactory; - -public final class PMF { - // private static final PersistenceManagerFactory pmfInstance = JDOHelper - // .getPersistenceManagerFactory("transactions-optional"); - - private PMF() { - }; - - public static PersistenceManagerFactory get() { - return PMFSupport.getPmf(); - } -} diff --git a/src/jp/sourceforge/rabbitBTS/PMFSupport.java b/src/jp/sourceforge/rabbitBTS/PMFSupport.java deleted file mode 100644 index 81c76be..0000000 --- a/src/jp/sourceforge/rabbitBTS/PMFSupport.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - Copyright 2009 senju@users.sourceforge.jp - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -package jp.sourceforge.rabbitBTS; - -import javax.jdo.PersistenceManagerFactory; - -import org.springframework.beans.factory.annotation.Autowired; - -/** - * 一時的に実装するクラス。 - * - * TODO:DAO化が完了したら削除されるべき - */ -public class PMFSupport { - private static PersistenceManagerFactory pmf; - - /** - * @return the pmf - */ - public static PersistenceManagerFactory getPmf() { - Sht.log(PMFSupport.class).warning("getPmf() called."); - return pmf; - } - - /** - * @param pmf - * the pmf to set - */ - @Autowired - public void setPmf(PersistenceManagerFactory pmf) { - PMFSupport.pmf = pmf; - } - -} diff --git a/src/jp/sourceforge/rabbitBTS/dao/AccountDao.java b/src/jp/sourceforge/rabbitBTS/dao/AccountDao.java index 1d5d0ee..74d5f2c 100644 --- a/src/jp/sourceforge/rabbitBTS/dao/AccountDao.java +++ b/src/jp/sourceforge/rabbitBTS/dao/AccountDao.java @@ -27,4 +27,6 @@ public interface AccountDao extends GenericDao { public Account findAccountByEmail(String email); + public Account findAccountByNickName(String nickName); + } diff --git a/src/jp/sourceforge/rabbitBTS/dao/jdo/AccountDaoImpl.java b/src/jp/sourceforge/rabbitBTS/dao/jdo/AccountDaoImpl.java index 2854fc9..206e980 100644 --- a/src/jp/sourceforge/rabbitBTS/dao/jdo/AccountDaoImpl.java +++ b/src/jp/sourceforge/rabbitBTS/dao/jdo/AccountDaoImpl.java @@ -34,7 +34,17 @@ public class AccountDaoImpl extends GenericDaoJdo implements public Account findAccountByEmail(String email) { final Collection c = getJdoTemplate().find(Account.class, "email == e", "String e", new Object[] { email }); - if (c.size() == 0) { + if (c.isEmpty()) { + return null; + } else { + return c.iterator().next(); + } + } + + public Account findAccountByNickName(String nickName) { + final Collection c = getJdoTemplate().find(Account.class, + "nickName == n", "String n", new Object[] { nickName }); + if (c.isEmpty()) { return null; } else { return c.iterator().next(); diff --git a/src/jp/sourceforge/rabbitBTS/dao/jdo/GenericDaoJdo.java b/src/jp/sourceforge/rabbitBTS/dao/jdo/GenericDaoJdo.java index 1a7f5fb..4eabc3a 100644 --- a/src/jp/sourceforge/rabbitBTS/dao/jdo/GenericDaoJdo.java +++ b/src/jp/sourceforge/rabbitBTS/dao/jdo/GenericDaoJdo.java @@ -41,30 +41,25 @@ public class GenericDaoJdo extends JdoDaoSupport } public boolean exists(PK id) { - final T entity = (T) getJdoTemplate().getObjectById( - this.persistentClass, id); - return entity != null; + try { + getJdoTemplate().getObjectById(this.persistentClass, id); + return true; + } catch (final ObjectRetrievalFailureException e) { + return false; + } } + @SuppressWarnings("unchecked") public T get(PK id) { final T entity = (T) getJdoTemplate().getObjectById( this.persistentClass, id); - - if (entity == null) { - throw new ObjectRetrievalFailureException(this.persistentClass, id); - } - return entity; } + @SuppressWarnings("unchecked") public T getByKey(Key id) { final T entity = (T) getJdoTemplate().getObjectById( this.persistentClass, id); - - if (entity == null) { - throw new ObjectRetrievalFailureException(this.persistentClass, id); - } - return entity; } diff --git a/src/jp/sourceforge/rabbitBTS/services/AccountService.java b/src/jp/sourceforge/rabbitBTS/services/AccountService.java index 27f0aea..5d0b8fc 100644 --- a/src/jp/sourceforge/rabbitBTS/services/AccountService.java +++ b/src/jp/sourceforge/rabbitBTS/services/AccountService.java @@ -19,12 +19,6 @@ package jp.sourceforge.rabbitBTS.services; import java.util.Date; import java.util.List; -import javax.jdo.JDOObjectNotFoundException; -import javax.jdo.PersistenceManager; -import javax.jdo.Query; -import javax.jdo.Transaction; - -import jp.sourceforge.rabbitBTS.PMF; import jp.sourceforge.rabbitBTS.Sht; import jp.sourceforge.rabbitBTS.dao.AccountDao; import jp.sourceforge.rabbitBTS.exceptions.HasNotValidIdException; @@ -32,6 +26,7 @@ import jp.sourceforge.rabbitBTS.exceptions.RabbitBTSException; import jp.sourceforge.rabbitBTS.models.Account; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataRetrievalFailureException; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; @@ -94,7 +89,7 @@ public class AccountService { } /** - * 指定されたアカウントを登録する。 + * 指定されたアカウントを登録する。 TODO: トランザクション * * @param account * 登録するアカウント @@ -102,48 +97,31 @@ public class AccountService { * 既に登録済みの場合 */ public void registAccount(Account account) throws RabbitBTSException { + // 登録済みチェック + if (this.accountDao.findAccountByEmail(account.getEmail()) != null) { + throw new RabbitBTSException("既に登録されています。"); + } - final PersistenceManager pm = PMF.get().getPersistenceManager(); - final Transaction tx = pm.currentTransaction(); - try { - tx.begin(); - try { - // 登録済みチェック - final Account up = this.fetchAccount(); - if (up != null) { - throw new RabbitBTSException("既に登録されています。"); - } - } catch (final HasNotValidIdException e) { - throw new RabbitBTSException("googleにログインしてください。", e); - } - - // 最初のスーパーユーザーかチェック - if (account.getEmail().equals(this.firstSuperUser)) { - account.setAdmin(true); - Sht.log(this).warning( - "Admin Account Created. " + this.firstSuperUser); - } - - // nickName重複チェック - if (fetchAccountByNickName(account.getNickName()) != null) { - Sht.log(this).info( - "nickName " + account.getNickName() - + " is already used."); - throw new RabbitBTSException("nickNameが重複しています。"); - } - - // 登録処理 - account.setLastAccess(new Date()); - pm.makePersistent(account); - - // TODO: メッセージ追加 - - tx.commit(); - } finally { - if (tx.isActive()) { - tx.rollback(); - } + // 最初のスーパーユーザーかチェック + if (account.getEmail().equals(this.firstSuperUser)) { + account.setAdmin(true); + Sht.log(this).warning( + "Admin Account Created. " + this.firstSuperUser); } + + // nickName重複チェック + if (this.accountDao.findAccountByNickName(account.getNickName()) != null) { + Sht.log(this).info( + "nickName " + account.getNickName() + " is already used."); + throw new RabbitBTSException("nickNameが重複しています。"); + } + + // 登録処理 + account.setLastAccess(new Date()); + this.accountDao.save(account); + + // TODO: メッセージ追加 + } /** @@ -153,17 +131,9 @@ public class AccountService { * 検索するアカウントのニックネーム * @return 見つかったアカウント。無い場合null。 */ - @SuppressWarnings("unchecked") public Account fetchAccountByNickName(String nickName) { - final PersistenceManager pm = PMF.get().getPersistenceManager(); - final Query q = pm.newQuery(Account.class); - q.setFilter("nickName == n"); - q.declareParameters("String n"); - final List accList = (List) q.execute(nickName); - if (accList.size() == 0) { - return null; - } - return accList.get(0); + final Account account = this.accountDao.findAccountByNickName(nickName); + return account; } /** @@ -174,11 +144,9 @@ public class AccountService { * @return 見つかったアカウント。見つからない場合null。 */ public Account fetchAccountById(Long id) { - final PersistenceManager pm = PMF.get().getPersistenceManager(); try { - final Account account = pm.getObjectById(Account.class, id); - return account; - } catch (final JDOObjectNotFoundException e) { + return this.accountDao.get(id); + } catch (final DataRetrievalFailureException e) { return null; } } @@ -188,12 +156,8 @@ public class AccountService { * * @return 取得したアカウントのリスト */ - @SuppressWarnings("unchecked") public List fetchAccounts() { - final PersistenceManager pm = PMF.get().getPersistenceManager(); - final List accList = (List) pm - .newQuery(Account.class).execute(); - return accList; + return this.accountDao.getAll(); } /** @@ -203,8 +167,7 @@ public class AccountService { * 削除するアカウント。 */ public void deleteAccount(Account account) { - final PersistenceManager pm = PMF.get().getPersistenceManager(); - pm.deletePersistent(account); + this.accountDao.remove(account.getAccountId()); } /** diff --git a/war/WEB-INF/views/members/delete.ftl b/war/WEB-INF/views/members/delete.ftl index c6ff109..e3adb2b 100644 --- a/war/WEB-INF/views/members/delete.ftl +++ b/war/WEB-INF/views/members/delete.ftl @@ -2,8 +2,8 @@ [#assign title="アカウント削除"] [#include "/common/head.ftl"]

アカウント削除

-[@rbts.showGlobalErrors "accForDel" /] [#if accForDel??] +[@rbts.showGlobalErrors "accForDel" /]

以下のアカウントを削除します。削除されたアカウントは復元できません。

-- 2.11.0