2015-03-12 1 views
1

Я следил за некоторыми учебниками по EJB 3.1, и они использовали следующую зависимость для EJB-API.Maven Dependency для EJB 3.1 [jboss-ejb-api_3.1_spec]

<dependency> 
     <groupId>org.jboss.spec.javax.ejb</groupId> 
     <artifactId>jboss-ejb-api_3.1_spec</artifactId> 
     <version>1.0.2.Final</version> 
    </dependency> 

Моя проблема в том, что это только для jboss или я могу использовать это на любых других серверах приложений. Если нет, почему существуют зависимости, подобные этим, которые не являются независимыми от сервера приложений, он развертывается. А также я нашел this reference для ejb 3.1 api. Поэтому, пожалуйста, уточните, что это такое и почему они есть.

ответ

2

Вы можете использовать его на любом интересующем вас сервере. Только не забудьте поставить добавить <scope>provided</scope> тег в зависимости, как это:

<dependency> 
     <groupId>org.jboss.spec.javax.ejb</groupId> 
     <artifactId>jboss-ejb-api_3.1_spec</artifactId> 
     <version>1.0.2.Final</version> 
     <scope>provided</scope> 
</dependency> 

provided сфера означает, что эта зависимость используется только для компиляции кода и не включены в результирующую EAR/WAR/JAR. Во время выполнения эта зависимость предоставляется вашим сервером приложений (JBoss, Websphere, что угодно). Если вы опустите раздел спецификации области, могут возникнуть очень плохие вещи.

+0

Одна вещь, которую нужно уточнить, это 'javax.ejb-api' api и' jboss-ejb-api_3.1_spec' - это реализация этого? И если мы пишем приложение, которое должно быть развернуто на двух разных серверах приложений (jboss & websphere), мы можем также упомянуть только «api» в pom (в данном случае javax.ejb-api) с областью действия «предоставлено» и это заставляет сервер использовать свою собственную реализацию при запуске? –

+1

Это api (интерфейсы), а не реализация. Сервер будет пытаться использовать свою собственную реализацию в любом случае, однако, если вы опустите предоставленную спецификацию области, 2 реализации будут находиться в пути к классам и будут случайными, какой из них будет использоваться. Более того, AFAIK спецификация javax.ejb содержит некоторые искалеченные классы без тела класса, что означает, что ваш код может просто сбой, как регулярно, так и наугад. И да, если вы упомянете только api в pom, так как сервер будет использовать свою собственную реализацию при запуске –

+0

Спасибо за ответ, но у меня есть проблема, мы можем использовать только 'api' для компиляции кода без указания любая «реализация»? –

1
Here you go. This is from EJB specs <https://java.net/projects/ejb-spec> 

<dependency> 
    <groupId>javax.ejb</groupId> 
    <artifactId>javax.ejb-api</artifactId> 
    <version>3.2</version> 
</dependency> 

Hope this helps 
+0

Это нормально, я спрашиваю, является ли вышеупомянутая зависимость только для серверов jboss? Разве мы не можем развернуть ухо, которое связано с этой зависимостью на любом другом сервере приложений, отличном от jboss? –

+1

API обычно не входит в ухо. Такая зависимость обычно « предоставляется», что означает, что она может быть найдена в целевой среде (на сервере приложений). – khmarbaise

+0

@khmarbaise. Итак, что вы имеете в виду: 'javax.ejb-api' api и' jboss-ejb-api_3.1_spec' - это реализация? И если мы пишем приложение, которое должно быть развернуто на двух разных серверах приложений (jboss & websphere), то, что должно упоминаться в pom, это 'api' (в данном случае' javax.ejb-api') с 'scope' как' provided'. Я прав? –