2015-02-16 1 views
0

У меня возникли проблемы с использованием нового AmazonAWS SDK в JBoss AS 7.1 проекта (EE6)AWS Java SDK на JBoss AS7 - записи module.xml

Я просто с помощью библиотеки S3, так что в соответствии с новым релиз (1.9.7) Я только с помощью s3, ядро, KMs банки

-aws-java-sdk-core-1.9.17.jar 
-aws-java-sdk-s3-1.9.17.jar 
-aws-java-sdk-kms-1.9.17.jar 

Таким образом, я создал 3 отдельных записей module.xml для каждой баночке в директории/ком/amazonaws:

/com/amazonaws/aws-java-sdk-s3/main/module.xml

<module xmlns="urn:jboss:module:1.1" name="com.amazonaws.aws-java-sdk-s3"> 
    <properties> 
     <property name="jboss.api" value="private"/> 
    </properties> 

    <resources> 
     <resource-root path="aws-java-sdk-s3-1.9.17.jar"/> 
     <!-- Insert resources here --> 
    </resources> 

    <dependencies> 
     <module name="com.amazonaws.aws-java-sdk-core" /> 
     <module name="com.amazonaws.aws-java-sdk-kms" /> 
    </dependencies> 
</module> 

/com/amazonaws/aws-java-sdk-kms/main/module.xml

<resources> 
    <resource-root path="aws-java-sdk-kms-1.9.17.jar"/> 
    <!-- Insert resources here --> 
</resources> 

<dependencies> 
    <module name="com.amazonaws.aws-java-sdk-core" /> 
</dependencies> 

/ком/amazonaws/AWS-Java- sdk-core/main/module.xml

<module xmlns="urn:jboss:module:1.1" name="com.amazonaws.aws-java-sdk-core"> 
    <properties> 
     <property name="jboss.api" value="private"/> 
    </properties> 

    <resources> 
     <resource-root path="aws-java-sdk-core-1.9.17.jar"/> 
     <resource-root path="commons-logging-1.1.3.jar"/> 
     <resource-root path="httpclient-4.3.4.jar"/> 
     <resource-root path="jackson-databind-2.3.2.jar"/> 
     <resource-root path="joda-time-2.2.jar"/> 

     <!-- Insert resources here --> 
    </resources> 

</module> 

(Я добавил дополнительные зависимости, например. Apache-Обще, jodatime и т.д. непосредственно в директории модуля)

Следующая запись JBoss развертывания-structure.xml:

<sub-deployment name="Processor-ejb.jar"> 
    <dependencies> 
     <module name="com.amazonaws.aws-java-sdk-core" /> 
     <module name="com.amazonaws.aws-java-sdk-s3" /> 
     <module name="com.amazonaws.aws-java-sdk-kms" /> 

    </dependencies> 
    </sub-deployment> 

(я также попытался объявить их как зависимости EAR уровня с экспортом = правда)

следующие pom.xml запись:

<dependency> 
    <groupId>com.amazonaws</groupId> 
    <artifactId>aws-java-sdk-s3</artifactId> 
    <version>1.9.17</version> 
    <scope>provided</scope> 
</dependency> 

Но всякий раз, когда я пытаюсь инициализировать новый S3 клиент:

AWSCredentials credentials = new ProfileCredentialsProvider("ProcessingApp").getCredentials(); 
AmazonS3 s3 = new AmazonS3Client(credentials); 

я получаю следующее исключение:

Caused by: java.lang.NoClassDefFoundError: javax/management/MalformedObjectNameException 
    at com.amazonaws.jmx.SdkMBeanRegistrySupport.registerMetricAdminMBean(SdkMBeanRegistrySupport.java:27) 
    at com.amazonaws.metrics.AwsSdkMetrics.registerMetricAdminMBean(AwsSdkMetrics.java:330) 
    at com.amazonaws.metrics.AwsSdkMetrics.<clinit>(AwsSdkMetrics.java:308) 
    at com.amazonaws.services.s3.AmazonS3Client.<clinit>(AmazonS3Client.java:261) 
    at net.processor.actions.scheduled.ScheduledActionsBean.minuteActions(ScheduledActionsBean.java:79) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [classes.jar:1.6.0_65] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [classes.jar:1.6.0_65] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [classes.jar:1.6.0_65] 
    at java.lang.reflect.Method.invoke(Method.java:597) [classes.jar:1.6.0_65] 
    at org.jboss.as.ee.component.ManagedReferenceMethodInterceptorFactory$ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptorFactory.java:72) [jboss-as-ee-7.1.1.Final.jar:7.1.1.Final] 
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final] 
    at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:374) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final] 
    at org.jboss.seam.intercept.EJBInvocationContext.proceed(EJBInvocationContext.java:44) 
    at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56) 
    at org.jboss.seam.intercept.Interceptor.aroundTimeout(Interceptor.java:201) 
    at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:74) 
    at org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:79) 
    ... 56 more 

Моя догадка была бы конфликт с Apache-Викисклада лесозаготовок как есть импорт в классе SdkMBeanRegistrySupport, и я знаю, JBoss использует эту библиотеку в другом месте используя alias to org.slf4j.jcl-over-slf4j, но я подумал, что положить apache lib в jar будет сортировать это?

Я довольно новичок в AS7, поэтому, может быть, мне не хватает трюка?

+1

Попробуй добавить '<модуль Name = "javax.api"/>' в зависимости в * com.amazonaws .aws-java-sdk-core * 'module.xml' –

+0

Да, вы правы, что заставило меня пройти это исключение и на правильном пути ... спасибо – DaveB

ответ

1

Хорошо, что я получил в итоге благодаря @Federico Sierra, вот sdk-core module.xml (nb. Мне пришлось отбросить файлы commons-logging, httpclient и httpcore в папку модуля, как те, что были отправлены с JBoss arent совместимый, я добавил Джексон и Joda LIBS как свои собственные модули) ...

<module xmlns="urn:jboss:module:1.1" name="com.amazonaws.aws-java-sdk-core"> 
    <properties> 
     <property name="jboss.api" value="private"/> 
    </properties> 

    <resources> 
     <resource-root path="aws-java-sdk-core-1.9.17.jar"/> 
     <resource-root path="commons-logging-1.1.3.jar"/> 
     <resource-root path="httpclient-4.3.4.jar"/> 
     <resource-root path="httpcore-4.3.2.jar"/> 
     <!-- Insert resources here --> 
    </resources> 
    <dependencies> 
     <module name="javax.api"/> 
     <module name="javax.xml.stream.api"/> 
     <module name="javax.xml.bind.api"/> 
     <module name="com.fasterxml.jackson"/> 
     <module name="org.joda.time"/> 
    </dependencies> 

</module> 

и СКИ-s3 module.xml необходимой javax.xml.stream.апите слишком

<resources> 
    <resource-root path="aws-java-sdk-s3-1.9.17.jar"/> 
    <!-- Insert resources here --> 
</resources> 

<dependencies> 
    <module name="com.amazonaws.aws-java-sdk-core" /> 
    <module name="com.amazonaws.aws-java-sdk-kms" /> 
    <module name="javax.xml.stream.api"/> 
</dependencies> 

Надеется, что это помогает кто-то еще

+0

Большое вам спасибо, я на самом деле создал сборку maven descrip для этого. Возможно, это помогает кому-то: https://github.com/Sweazer/jgroups-native-s3-ping/blob/master/src/main/assembly/module-assembly.xml –

+0

oh nice project! он работает с JBoss AS7.2? или просто Wildfly? – DaveB

+0

Я только тестировал его с Wildfly, но я не вижу причин, чтобы он не работал. Версия модуля urn может отличаться от AS7.2, но, кроме того, она должна быть одинаковой. –

Смежные вопросы