1

私は JBoss 7 の初心者です。奇妙な動作に直面しています。セッション Bean を呼び出そうとすると、次の例外が発生することがあります。

com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.util.List myServlet.getData() throws myException' threw an unexpected exception: java.lang.IllegalStateException: No EJB receiver available for handling [appName:myAppNameEE,modulename:myModuleEJB,distinctname:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@3e23bd28

通常、Eclipse から GWT アプリケーションを実行すると発生します。例外は常に発生するとは限りません。時々、それは他のものより少ないです。セッション Bean を呼び出すたびにかなり発生することがあり、それは苦痛です。チュートリアル (https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI?_sscc=t) を読みましたが、jboss- ejb-client.properties を適切な場所に配置します。

私の jboss-ejb-client は次のようになります。

endpoint.name=myAppEE/myAppEJB remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false remote.connections=default remote.connection.default.host=localhost remote.connection.default.port = 4447 remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false

次の場所にあります。

myAppEJB\ejbModule\com\myApp\ejb\conf

ビジネスデリゲート:

public class myAppServerDelegate extends ServerDelegate{

private Logger logger = Logger.getLogger(myAppServerDelegate.class.getName());
private myAppRemote theSession = null;

public myAppServerDelegate() throws Exception {

    try {
        theSession = (myAppRemote) getJndiContext().lookup(getJindiLookupName(myAppServerDelegate.class, myAppRemote.class));
    } catch (NamingException e) {
        throw (e);
    }
}

public List<myDataDTO> getAllmyDataBy(String a, String b,
        String c, String d,Integer e,
        Integer f) throws ServerDelegateException {

        return theSession.getAllmyDataBy(a, b, c, d,e,f);
}

public Integer getCountmyDataBy(String a, String b, String c, String d) throws ServerDelegateException {

    return theSession.getCountmyDataBy(a, b, c, d);
}
...

public String getServiceMessage() {

    return theSession.getServiceMessage();
}

...
}

セッション Bean:

@Stateless

public class myAppSession implements myAppRemote {

private Logger logger = Logger.getLogger(myAppSession.class.getName());
@PersistenceContext
protected EntityManager entityManager;
@EJB
private myAppHomeLocal beanmyApp;

...

public String getServiceMessage() {

    return "MESSAGGIODISERVIZIO";
}

public List<myDataDTO> getAllmyDataBy(String a,String b,
        String c, String d,Integer e,
        Integer f) throws ServerDelegateException {

    logger.info("myAppSession.getAllmyDataBy.");
    List<myData> entityList = findByParms(a, b, c, d,e,f);
    return myDataAssemblyDTO.getmyDataDTOList(entityList);
}

public Integer getCountmyDataBy(String a,String b, String c, String d) throws ServerDelegateException {

    return findByParmsCount(a, b, c, d);
}
...
}

サーブレット:

...

@SuppressWarnings("シリアル")

public class MyGenericServiceImpl extends RemoteServiceServlet implement MyGenericService {

private MyAppServerDelegate myAppServerDelegate = null;

public MyGenericServiceImpl() throws Exception{
    super();
    myAppServerDelegate = new MyAppServerDelegate();
}

private MyAppServerDelegate getDelegate()    {
    return myAppServerDelegate;
}

private myGWTException buildLocalExceptionFromServerException(ServerDelegateException sde)    {
    myGWTException x = new myGWTException();
    x.setParms(sde.guiMessage,sde.timestamp,sde.tipoEvento);
    return x;
}

@Override
public PagingLoadResult<myDataBean> getAllmyDataBy(String a, String b, String c, PagingLoadConfig plc) throws MyGWTException {
    try    {
        String cs = ((UserSessionBean)this.getThreadLocalRequest().getSession().getAttribute("user")).getCodiceStudio();
        List<myDataBean> tsb = MyDataClientAssembly.getMyDataBeanList(myAppServerDelegate.getAllmyDataBy(cs, a, b, c, plc.getOffset(), plc.getLimit()));
        return new BasePagingLoadResult<MyDataBean>(tsb, plc.getOffset(), myDataServerDelegate.getCountmyDataBy(cs, a, b, c));
    } catch (ServerDelegateException sde)    {
        throw buildLocalExceptionFromServerException(sde);
    }
}

@Override
public String getServiceMessage() {
    return getDelegate().getServiceMessage();
}

@Override
public Integer getCountmyDataBy(String a, String b, String c) throws AmbrogioGWTException {
    try    {
        String cs = ((UserSessionBean)this.getThreadLocalRequest().getSession().getAttribute("user")).getCs();
        return myAppServerDelegate.getCountmtDataBy(cs, a, b, c);
    } catch (ServerDelegateException sde)    {
        throw buildLocalExceptionFromServerException(sde);
    }
}
}

サーバーデリゲート:

public class ServerDelegate {

static public String getJindiLookupName( Class<?> theBeanClass, Class<?> theSessionClass) throws NamingException    {
    String jbossServerName = System.getProperty("jboss.server.name");
    if (jbossServerName== null ||  "".equals(jbossServerName)){
        return "myAppEE/myAppEJB/"+ theBeanClass.getSimpleName() + "!" + theSessionClass.getName();
    }else{
        return "java:global/myAppEE/myAppEJB/" + theBeanClass.getSimpleName() + "!" + theSessionClass.getName();
    }       
}

static public Context getJndiContext() throws NamingException    {
    System.out.println("ServerDelegate.getJndiContext");
    final Properties jndiProperties = new Properties();
    String jbossServerName = System.getProperty("jboss.server.name");
    if (jbossServerName== null ||  "".equals(jbossServerName)){
        jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, org.jboss.naming.remote.client.InitialContextFactory.class.getName());
        jndiProperties.put(Context.PROVIDER_URL, "remote://localhost:4447");
        jndiProperties.put("jboss.naming.client.ejb.context", true);
jndiProperties.put("jboss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false");
        }             
    return new InitialContext(jndiProperties);       
    }
}

何が起こっているのかわかりません。ティア。

フランチェスコ

4

3 に答える 3

2

これは、ローカル対リモート インターフェイスの使用の問題、または接続の問題である可能性があります。

パッケージのTRACEログ レベルを有効にしてみてください。org.jboss.ejb.clientクラスパスに既に がある場合はlog4j.properties、次の行を含めます。

log4j.logger.org.jboss.ejb.client=TRACE

この投稿には、JBoss EJB クライアントをデバッグするためのその他の手がかりが含まれています。

于 2012-08-31T14:32:55.940 に答える
0

mavenspom.xmlファイルに含める必要のある依存関係のリストがあります。これらには以下が含まれます

  1. jboss-ejb-client
  2. xnio-nio
  3. jboss-リモートネーミング
  4. jboss-sasl
  5. jboss-transaction-ap
  6. jboss-マーシャリング
  7. jboss-マーシャリング-川

スタンドアロンのJavaクライアントからリモートリクエストを正常に行うことができましたが、次の問題が発生します

Jboss 7.1:13:43:25,028 INFO [stdout](EJBデフォルト-6)Hello world 13:43:25,825 ERROR [org.jboss.remoting.remote.connection](Remoting "mycomputername" read-1)JBREM000200:リモート接続失敗:java.io.IOException:既存の接続がリモートホストによって強制的に閉じられました

私のjavaejbクライアント:WARN [Remoting "client-endpoint" task-2](ChannelAssociation.java:320)-サポートされていないメッセージがヘッダー0xffffffffで受信されました

オンラインの人々を読むことは、特定の瓶のバージョンを更新することによってこれを解決したようです。しかし、私はまだ成功した解決策を見つけていません。

更新:スタンドアロンejbクライアントをデプロイするときに、クラスパスにjboss-client.jarを含めました。よく働く。

java -classpath "$ JBOSS_HOME / bin / client / jboss-client.jar; ./ my-ejb-client.jar" com.test.Myclient

于 2012-11-09T18:45:14.010 に答える