我有一个Java ee 7 JMS应用程序,我想在CloudBees上部署它。我尝试过使用cloudAMQP的简单应用程序,它可以工作。但CloudAMQP提供托管的RabbitMQ服务。我必须使用JMS客户端,因为我的代码是在java JMS中实现的。
最后一天,我在Amazon Ec2中创建了一个glassfish 4经纪人,我在CloudBees glassfish web profile平台上部署了一个简单的JMS应用程序,我预计它可以与我的Amazon glassfish经纪人合作。但是有一个错误。
我的代码是:
@JMSConnectionFactoryDefinition(
name="java:comp/jms/__defaultConnectionFactory",
maxPoolSize = 30,
minPoolSize= 20,
properties = {
"addressList=mq://ec2-54-194-27-99.eu-west-1.compute.amazonaws.com:7676",
"reconnectEnabled=true"
}
)
@JMSDestinationDefinition(
name = "java:comp/jms/webappQueue",
interfaceName = "javax.jms.Queue",
destinationName = "PhysicalWebappQueue")
@Named
@RequestScoped
public class ReceiverBean {
static final Logger logger = Logger.getLogger("ReceiverBean");
@Inject
private JMSContext context;
@Resource(lookup = "java:comp/jms/webappQueue")
private Queue queue;
.....
public void getMessage() {
try {
JMSConsumer receiver = context.createConsumer(queue);
String text = receiver.receiveBody(String.class, 1000);
if (text != null) {
FacesMessage facesMessage =
new FacesMessage("Reading message: " + text);
FacesContext.getCurrentInstance().addMessage(null, facesMessage);
} else {
FacesMessage facesMessage =
new FacesMessage("No message received after 1 second");
FacesContext.getCurrentInstance().addMessage(null, facesMessage);
}
} catch (JMSRuntimeException t) {
logger.log(Level.SEVERE,
"ReceiverBean.getMessage: Exception: {0}",
t.toString());
}
}
错误是
| 2013-11-17T22:34:09.146 + 0000 | SEVERE | glassfish 4.0 | javax.enterprise.system.core | _ThreadID = 45; _TreadName = AutoDeployer; _TimeMillis = 1384727649146; _LevelValue = 1000; |
加载应用时出现异常:CDI部署失败:异常 列表有2个例外:
异常0:
org.jboss.weld.exceptions.DeploymentException:WELD-001408不满意 类型为[JMSContext]的依赖项,带有限定符[@Default] at 注入点[[BackedAnnotatedField] @Inject private javaeetutorial.websimplemessage.SenderBean.context]
你对我的案子有什么想法吗? 提前谢谢。
答案 0 :(得分:0)
Web配置文件不包含JMS,因此不支持此API和相关的注释/注入。 为此,您需要在容器中使用完整的JavaEE +足够的配置集来插入您的代理。使用vanila JMS API和注释驱动的集成可能更简单