0

次の状況。Domain JpaRepository(インターフェース)システムが好きなので、spring-dataを使いたいです。

ここに来ますが、私はSpring-Framework自体を使いたくありません。javax.* ejb3 仕様に固執したい

プロジェクト構成をセットアップしようとしています。

pesrstance レイヤーを表す spring-data-jpa を使用したプロジェクトがあります。@autowired の代わりに @Service と @Inject のスプリングの代わりに @Stateless を使用しています (同義語があると聞いたためです。persistancelayer 内の Accountservice は、目的をテストするためだけに存在します。

PersistanceModule(Eclipseproject)
|
|-com.ns.persistance
|   |-domain
|       |-Account
|   |-repository
|       |-AccountRepository (JpaRepositry interface)
|   |-test
|       |-AccountService (which contains a method do save a user in the database)

アカウントリポジトリ

public interface AccountRepository extends JpaRepository<Account, Long> { 

    Account findByUsername(String username);

}

テスト目的のアカウント サービス。

@Stateless
public class AccountService {

    @Inject
    private AccountRepository ar;

    public void createTestAccount() {
        Account account = new Account();
        account.setUsername("testAccount");
        account.setPassword("sicheres passwort");
        account.setEmail("kks.cs@web.de");
        account.setCreationTime(new Date());
        account.setLastModificationDate(new Date());

        account = ar.save(account);

    }
}

春のデータをテストするワークジョブ

@Singleton
public class SSService {

    @EJB
    AccountService as;

    @Schedule(minute = "*/5", hour = "*", persistent = false)
    public void doWork() {

        System.out.println("WorkJob!!!!!!!");
        //as.createTestAccount();

    }

}

spring-data-config.xml があります

<?xml version="1.0" encoding="UTF-8"?>
<beans 
   xmlns="http://www.springframework.org/schema/beans" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:jpa="http://www.springframework.org/schema/data/jpa"
   xsi:schemaLocation="
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
      http://www.springframework.org/schema/data/jpa 
      http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">

    <jpa:repositories base-package="com.ns.persistence.repository" />

</beans>

JBoss は、AccountService が NULL (Nullpointer) であると私に言い続けます。いくつかの構成を設定するのを忘れたと思いますが、コツがつかめず、グーグルで簡単なSpringframeworkソリューションを取得し続けています。私の質問: 何を見逃しましたか? Spring データは EJB(javax) で動作しますか、それとも springframework を使用する必要がありますか。

4

1 に答える 1

0

これが正しいことを確認するためだけに。Spring Data JPA を使用するには、Spring フレームワークを使用する必要があります。コンテナーを必ずしも使用する必要はありませんが (XML 構成、コンテナーのセットアップ)、アプリケーションのクラスパスに Spring JAR が必要になります。

バージョン 1.1.0.RC1 (すでにリリース済み) の時点で、Spring Data JPA プロジェクトは、JBoss AS7 が 1 つのインスタンスである CDI コンテナー内での実行をサポートしています。そのため、前述のバージョンの Spring Data JPA が適切に配置されていれば、これは機能するはずです。その場合、Spring 構成ファイルは必要ありませんbeans.xml。CDI で指定された空のみです。

以前のバージョンを使用している場合は、リポジトリ インスタンスを自分でインスタンス化するコードを記述する必要があります。

 @Stateless
 class YourService {

   @PersistenceContext
   private EntityManager em;

   private AccountRepository repository

   @PostConstruct
   public void init() {
      RepositoryFactorySupport factory = new JpaRepositoryFactory(em);
      this.repository = factory.getRepository(AccountRepository.class);
   }
}

そのコードを共通のコンポーネントに入れ、そのインスタンスをサービスに注入して、すべてのサービス実装でこのセットアップ コードを書き直さないようにすることは理にかなっているかもしれません。上で述べたように、次の 1.1.0 バージョンの時点で、これはすぐに使用できるようになります。

于 2012-05-01T17:10:30.660 に答える