5

次のBeanクラスを使用しています。

@Stateless(name="UserBean", mappedName="UserBean")
@LocalBean
public class User implements UserRemote {

@PersistenceContext
private EntityManager em;

public User() {

}

public String login(String username, String password) {

    Query query = em.createQuery("...");
    return "xyz";
}

}

そして私の方法は

public String myMethod()    {

    try {
        User user = (User) new InitialContext().lookup("UserBean");
        return "xyz";
    } catch (NamingException e) {
        e.printStackTrace();
    }
    return null;        
}

ここで私は

javax.naming.NameNotFoundException: Unable to resolve 'UserBean'. Resolved ''; remaining name 'UserBean'

JNDIルックアップ名「UserBean」は正しいようです。問題が何であるかわかりません。誰か助けてもらえますか?JPA2.0とEJB3.xを使用して、アプリケーションをweblogic12cにデプロイしました。

前もって感謝します。

4

3 に答える 3

4

問題は、リモートインターフェイスを使用していたことでした。マップされた名前なしで@statelessアノテーションを使用するだけで次のコードが機能しました。

new InitialContext().lookup("java:global/ProjectName/ModuleName/BeanName!FullyQualif‌​iedNameOfRemoteInterface"); 

ありがとう@Andre!

于 2013-06-18T09:41:52.657 に答える
1

Portable JNDI Nameを使用する、つまり単に注釈を付ける方がよい場合があります。@Stateless

https://blogs.oracle.com/kensaks/entry/application_specific_portable_jndi_names

于 2013-02-18T14:31:17.063 に答える
1

この質問は2年前に回答されましたが、コメントを追加したいと思います。マップされた名前属性の使用に問題はなかったはずです。WebLogicにデプロイする場合は#[fully.qualified.interface.name]、ルックアップを追加する必要があります。

たとえばmappedName = "UserBean",、EJBがパッケージcom.acme.userにMyInterfaceという名前のインターフェイスを実装している場合、ルックアップは次のようになります。

... = new InitialContext().lookup("UserBean#com.acme.user.MyInterface");
于 2015-03-31T08:49:51.200 に答える