0

アプリケーションのフロントエンド ( JSF, CDI) とバックエンド ( EJB, Hibernate) の部分がそれぞれ別の .xml にある Web アプリケーションを実行していますWildFly 9.0.1.Final ASRemote EJB Clientフロントエンドは、JNDI 名を介してバックエンドと通信します。

いくつかのフロントエンド コード:

@ViewScoped
@Named("ddc")
public class DynamicDatatableController implements Serializable {    
    @Produces
    @Resource(lookup = "ejb:bpm-back-ear/bpm-back-dynamicTable/DynamicTableBean!bc.bpm.dynamicTable.back.beans.remote.DynamicTableBeanRemote")
    private DynamicTableBeanRemote dtb;

    private Integer tableId;
    private DynamicTable table;

    @PostConstruct
    public void init{
      table = dtb.getTable(tableId);
    }
}

いくつかのバックエンド インターフェース コード:

@Remote
public interface DynamicTableBeanRemote {
    List<DynamicTable> getTable(Integer tableId);
}

いくつかのバックエンド Bean コード:

@Stateless
@LocalBean
public class DynamicTableBean implements DynamicTableBeanRemote {
    final static Logger LOGGER = LoggerFactory.getLogger(DynamicTableBean.class);
    @PersistenceContext(unitName = "bpmBeans")
    private EntityManager em;

    @Override
    public List<DynamicTable> getTableList(Integer tableId) {
        return em.find(DynamicTable.class, tableId);
    }
}

問題は、JMeter を使用して、またはいくつかのブラウザー タブを更新することによって、どれだけ多くの要求を行っても、常に のインスタンスが 1 つしか存在DynamicTableBeanしないことです。すべてのリクエストは、キュー内のその 1 つの Bean インスタンスによって実行されます。お分かりのように、このアプリケーションは完全にシングル スレッドの EJB であるため、まったく使用できません。何が問題なのですか?

4

3 に答える 3

0

問題は Intellij 14 と古いバージョンの JRebel クライアントにあり、どちらも Linux ワークステーションで実行されていたようです。したがって、ここで覚えておくべきことは、ツールを常に最新の状態に保つことです:)

于 2016-01-14T12:50:42.817 に答える
0

jboss ejb プールの設定を確認してください。jboss (これは eap 6.4.2 で動作し、wildfly でも同じことが想定されます) では、domain.xml で ejb プール サイズを設定できます。

<subsystem xmlns="urn:jboss:domain:ejb3:1.5">
    <session-bean>
        <stateless>
            <bean-instance-pool-ref pool-name="slsb-strict-max-pool"/>
        </stateless>
    </session-bean>...
    <pools>
        <bean-instance-pools>
            <strict-max-pool name="slsb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
        </bean-instance-pools>
    </pools>

jboss-ejb3.xml でこのプールを次のように参照できます。

<?xml version="1.1" encoding="UTF-8"?>
<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:c="urn:clustering:1.0" xmlns:r="urn:resource-adapter-binding"
    xmlns:p="urn:ejb-pool:1.0"
    xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee 
               http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd
                http://java.sun.com/xml/ns/javaee 
                http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
    version="3.1" impl-version="2.0">
    <assembly-descriptor>
        <p:pool>
            <ejb-name>ejebId</ejb-name>
            <p:bean-instance-pool-ref>slsb-strict-max-pool</p:bean-instance-pool-ref>
        </p:pool>
    </assembly-descriptor>
</jboss:ejb-jar>
于 2015-11-19T14:36:33.560 に答える