2011-12-07 10 views
9

Bất cứ ai cũng biết nếu bạn có thể tạo chủ đề và nhà máy kết nối của nó có vấn đề? Hiện tại tôi sử dụng tiện ích quản trị thủy tinh để tạo chủ đề và nhà máy kết nối của mình. Nếu tôi không thể tạo ra nó trong mã không glassfish/openmq có một chủ đề mặc định và conn nhà máy tôi có thể sử dụng?Làm thế nào để tạo ra một jms Chủ đề và TopicConnectionFactory lập trình?

Trả lời

15

Nếu bạn chỉ muốn phá vỡ việc tạo tài nguyên theo cách thủ công trong quản trị, bạn có thể triển khai chúng đơn giản với tệp "glassfish-resources.xml" (GF 3.1, xem http://docs.oracle.com/cd/E18930_01/html/821-2417/giyhh.html).

Bạn cần một admin-đối tượng tài nguyên như thế này (đối với một chủ đề):

<admin-object-resource enabled="true" jndi-name="jms/myTopic" 
    object-type="user" res-adapter="jmsra" res-type="javax.jms.Topic"> 
    <property name="Name" value="physicalTopic"/> 
</admin-object-resource> 

Hãy nhận biết rằng bạn phải sử dụng "Tên" giá trị khác nhau cho Topic (ở đây: "physicalTopic") nếu bạn triển khai nhiều Chủ đề có thư không được trộn lẫn.

Hơn nữa, bạn cần có tài nguyên trình kết nối tham chiếu đến hồ bơi kết nối của loại javax.jms.TopicConnectionFactory.

Nếu bạn không nhằm mục đích tạo động tài nguyên bằng cách sử dụng trình mô tả triển khai glassfish-resources.xml có vẻ là cách tốt nhất.

Xin lưu ý rằng các nguồn lực triển khai theo cách đó là ứng dụng scoped: http://docs.oracle.com/cd/E18930_01/html/821-2417/giydj.html

"glassfish-resources.xml" là tập tin cho GF 3.x, cho GF 2.x nó là "nắng resources.xml ". Tệp nằm trong thư mục "Tài nguyên máy chủ" trong khung nhìn dự án của bạn nếu bạn đang sử dụng NetBeans. Chú ý: glassfish-resources.xml trong "Tài nguyên máy chủ" chỉ được sử dụng bởi NetBeans nếu bạn sử dụng NetBeans để triển khai! NetBeans biết cách tạo ra các tài nguyên này và thực hiện nhiệm vụ này. Nếu bạn triển khai một EAR trực tiếp đến Glassfish mà không NetBeans - mà dường như rất có khả năng cho một môi trường sản xuất - bạn phải cung cấp glassfish-resources.xml trong:

  • META-INF của module EJB hoặc WEB -INF của WAR của bạn cho các tài nguyên mô-đun phạm vi
  • META-INF của ứng dụng doanh nghiệp của bạn cho các tài nguyên rộng ứng dụng Trong NetBeans bạn thực hiện việc này bằng cách đặt tệp đó vào thư mục "Cấu hình tệp" của khung nhìn dự án của bạn (src/conf)/trong hệ thống tập tin).

Bạn có thể dễ dàng tạo định nghĩa tài nguyên này bằng cách sử dụng thuật sĩ [Trình hướng thư mới] của NetBeans (chỉ cần thêm MBean bằng cách chọn [Mới ...]). Trong trình hướng dẫn chọn "Điểm đến dự án"> [Thêm]. Một hoàn chỉnh 3.1 dụ trông như thế này:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd"> 
<resources> 
    <admin-object-resource enabled="true" jndi-name="jms/myDestination" res-type="javax.jms.Topic" res-adapter="jmsra"> 
     <property name="Name" value="PhysicalTopic"/> 
    </admin-object-resource> 
    <connector-connection-pool name="jms/myDestinationFactoryPool" connection-definition-name="javax.jms.TopicConnectionFactory" resource-adapter-name="jmsra"/> 
    <connector-resource enabled="true" jndi-name="jms/myDestinationFactory" pool-name="jms/myDestinationFactoryPool" /> 
</resources> 

Đây là chú thích MBean:

@MessageDriven(mappedName = "java:app/jms/myDestination", activationConfig = 
{ 
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), 
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"), 
    @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"), 
    @ActivationConfigProperty(propertyName = "clientId", propertyValue = "NewMessageBean"), 
    @ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "NewMessageBean") 
}) 
public class NewMessageBean implements MessageListener 
{ 
[...] 

Thận trọng: "java: app /" trong mappedName là đúng chỉ khi bạn sử dụng ứng dụng scoped nguồn lực. Bạn có thể thay thế "java: app /" trong định nghĩa trong glassfish-resources.xml. Hướng dẫn triển khai GF cho biết: "Tên JNDI có nguồn gốc ứng dụng bắt đầu bằng java: app hoặc java: module. Nếu một trong các tiền tố này không được chỉ định trong tên JNDI, nó sẽ được thêm vào."

Bạn cũng có thể giới thiệu một cấp độ khác bằng cách sử dụng "tên" thay vì "mappedName". Sau đó, bạn phải cung cấp một tệp có tên là "application-client.xml", trong đó tên (logic) được ánh xạ tới một vị trí "vật lý" JNDI.

+0

Cảm ơn! Bạn có cơ hội biết nơi tôi nhận được cú pháp để thêm tài nguyên nhà máy kết nối vào tệp glassfish-resources.xml không? Ngoài ra tôi đã không tìm thấy một tệp glassfish-resources.xml trong thư mục cài đặt của tôi. Tôi sẽ dán tập tin này ở đâu sau khi tôi tìm ra cách để tạo ra nó? Tôi có thể sửa đổi và có thể học hỏi từ trước? – simgineer