标签: java-ee-6

在servlet中注入jms资源和MDB的最佳实践

使用ejb 3.1,servlet 3.0(glassfish服务器v3)

场景:我有MDB,它监听jms消息并处理其他会话bean(无状态).Servelet注入jms资源.

问题1:为什么servlet在使用静态声明时不能注入jms资源?

@Resource(mappedName = "jms/Tarturus")
private static ConnectionFactory connectionFactory;

@Resource(mappedName = "jms/StyxMDB")
private static Queue queue;


private Connection connection;
Run Code Online (Sandbox Code Playgroud)

@PostConstruct
    public void postConstruct() {
        try {
            connection = connectionFactory.createConnection();
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }

    @PreDestroy
    public void preDestroy() {
        try {
            connection.close();
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

[#| 2010-05-03T15:18:17.118 + 0300 |警告| glassfish3.0 | javax.enterprise.system.container.web.com.sun.enterprise.web | _ThreadID = 35; _ThreadName =线程1; | StandardWrapperValve [WorkerServlet]:PWC1382:为servlet WorkerServlet分配异常com.sun.enterprise.container.common.spi.util.InjectionException:在com.sun上为类ua.co.rufous.server.services.WorkerServiceImpl创建托管对象时出错.企业.container.common.impl.util.InjectionManagerImpl.createManagedObject(InjectionManagerImpl.java:312)位于com.sun.enterprise.web.WebModule的com.sun.enterprise.web.WebContainer.createServletInstance(WebContainer.java:709). createServletInstance(WebModule.java:1937)at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1252)引起:com.sun.enterprise.container.common.spi.util.InjectionException:异常尝试注入未解决的Message-Destination-Ref ua.co.rufous.server.services.WorkerServiceImpl/queue @ …

servlets jms message-driven-bean java-ee-6 ejb-3.1

2
推荐指数
1
解决办法
5955
查看次数

有没有简单的JSF commandButton样本?

我一直在努力尝试让我的commandButtons执行一个动作(但奇怪的是,我没有问题从bean中提取数据以包含在我的页面中).甚至在其他地方发布了我的代码并由其他人审核过.到目前为止,没有运气.所以,我想也许是一个不同的机智.任何人都可以向我指出一个项目的非常简单/基本的示例代码,该代码具有能够成功调用动作的commandButton吗?

java jsf java-ee-6 jsf-2

2
推荐指数
1
解决办法
1万
查看次数

使用@Resource注释的SessionContext注入

我需要回滚EJB 3无状态SessionBean(CMT,JBoss版本5),我正在使用它

sessionContext.setRollbackOnly();
Run Code Online (Sandbox Code Playgroud)

使用@Resource注释注入此sessionContext.我的问题:1)是否首选在EJB3中回滚?

2)如果我使用公共setter注入,为什么Jboss会在部署时抱怨

// throws exception on deployment.
    private SessionContext sessionContext;
    @Resource
    public void setSessionContext(SessionContext sessionContext) {
     this.sessionContext = sessionContext;
    }
Run Code Online (Sandbox Code Playgroud)

但以下工作正常:

@Resource
private SessionContext sessionContext;
Run Code Online (Sandbox Code Playgroud)

以下是第一种情况的例外情况:

javax.ejb.SessionContext is an interface, and JAXB can't handle interfaces.
        this problem is related to the following location:
                at javax.ejb.SessionContext
                at public javax.ejb.SessionContext invoice.sap.service.jaxws.SetSctx.arg0
                at invoice.sap.service.jaxws.SetSctx
javax.ejb.SessionContext does not have a no-arg default constructor.
        this problem is related to the following location:
                at javax.ejb.SessionContext
Run Code Online (Sandbox Code Playgroud)

java java-ee ejb-3.0 java-ee-6

2
推荐指数
1
解决办法
1万
查看次数

在JPA 2.0中的当前事务中执行一些任意的sql

我是JPA 2.0/EclipseLink/Glassfish/JEE6的新手,有一个基本的问题.

我有一个DAO,其中大多数实体使用JPA注释直接映射到列,所以我使用EntityManager,它没有问题,效果很好.

但是有一些表我自己构建SQL语句b/c他们使用oracle特定的函数(空间),我想要非常细粒度的SQL控制.所以我用字符串连接来构建它.我希望能够在当前事务中注册我的SQL执行,如果有一个已经在进行中.

所以很自然地我不想直接去DriverManager并创建我自己的连接,我正在寻找某种EntityManager.executeArbitrarySQL(String)函数,它可以找到当前连接并使我的SQL成为当前事务的一部分.我是不是摇摇欲坠了?

glassfish eclipselink java-ee-6 jpa-2.0

2
推荐指数
1
解决办法
2079
查看次数

我在哪里可以找到Java EE 6 XML库

我正在学习Java EE 6和Jax-RS(还没有开始关于Jax-RS的任何事情)来为我的工作构建一个xml api.我有我的java控制器设置,现在我正在寻找使用我的模型来生成XML输出.我似乎无法通过搜索Google找到任何XML库.有人能指点我正确的方向吗?

java jax-rs java-ee java-ee-6

2
推荐指数
1
解决办法
361
查看次数

EntityManager.persist()之后会发生什么

EntityManger注入了@PersistenceContext注释。这是我的“ DAO /存储库”类中的一种未注释的方法。此类被注入到需要从数据库获取数据或从数据库获取数据的EJB中。

直到现在,我还认为下面的persist方法完成后,会清除persistencecontext,并将数据存储到数据库中,但是从我应用程序中发生的事情开始,我开始对此表示怀疑。我已经在Glassfish中建立了数据源和连接池,所以据我所知,我正在使用容器管理的事务,但是我不使用任何事务注释。

有人可以帮我照一下吗?

public void persist(QuestionFeedback questionFeedback) {
    questionFeedback.setCreated(new Date());
    entityManager.persist(questionFeedback);
}
Run Code Online (Sandbox Code Playgroud)

使用Glassfish 3,实现Java EE6兼容性

java jpa java-ee-6 glassfish-3

2
推荐指数
1
解决办法
3314
查看次数

如何在Java EE项目中测试JPA2映射?

我正在开发一个Java项目,我的任务是编写一些针对遗留数据库的数据库映射.
在这样做时,我开始质疑我应该如何测试我的映射是否有效.我很可能在我的映射中犯了几个错误,因为我不是一个经验丰富的JPA注释用户.

那么关于通过注释测试手动编写的JPA映射的一般意见/最佳实践是什么?

java testing unit-testing java-ee-6 jpa-2.0

2
推荐指数
1
解决办法
288
查看次数

没有JavaEE 6可以使用JPA 2.0吗?

我正在使用OpenJPA 2.1(实现JPA 2.0)用于命令行实用程序.我正在使用JPA 2.0新增的类.我的编译目标是Java SE 1.6

OpenJPA 2.1附带所有JPA 2.0 javax.persistence.*接口/实现.

我可以声称我的实用程序不依赖于JavaEE 6吗?

我的理解是JavaEE 6是一个标准集合.因此,在任何其他随机标准集方面都没有区别.因此,JavaEE 6依赖于JPA 2.0,但JPA 2.0并不依赖于JavaEE 6,对吗?

java openjpa java-ee java-ee-6 jpa-2.0

2
推荐指数
2
解决办法
2235
查看次数

ClassFormatError:类文件中的Absent Code属性,在类文件javax/transaction/SystemException中不是本机或抽象

我正在尝试使用Arquillian来对抗weblogic 12C.

我将以下配置放在我的pom.xml中

<dependency>
        <groupId>org.jboss.arquillian.junit</groupId>
        <artifactId>arquillian-junit-container</artifactId>
        <version>1.0.0.CR7</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.jboss.arquillian.protocol</groupId>
        <artifactId>arquillian-protocol-servlet</artifactId>
        <version>1.0.0.CR7</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
        <version>1.0.0-beta-5</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.jboss.arquillian.container</groupId>
        <artifactId>arquillian-wls-remote-12.1</artifactId>
        <version>1.0.0.Alpha2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>weblogic</groupId>
        <artifactId>wlfullclient</artifactId>
        <version>12.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.jboss.spec</groupId>
        <artifactId>jboss-javaee-6.0</artifactId>
        <version>3.0.0.Final</version>
        <scope>test</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

然后,我将arquillian.xml文件配置如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<arquillian xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://jboss.org.schema/arquillian"
            xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
    <container qualifier="weblogic" default="true">
        <configuration>
            <protocol type="Servlet 3.0">
                <property name="executionType">REMOTE</property>
            </protocol>
            <property name="adminUrl">t3://localhost:7001</property>
            <property name="adminUserName">weblogic</property>
            <property name="adminPassword">weblogic1</property>
            <property name="target">AdminServer</property>
            <property name="wlsHome">c:\java\servers\wls12c\wlserver</property>
        </configuration>
    </container>
</arquillian>
Run Code Online (Sandbox Code Playgroud)

最后,我试图用Arquillian"创建"一个档案:

 JavaArchive ejbArchive = ShrinkWrap.create(JavaArchive.class,"jee6app-ejb.jar").addAsResource("META-INF/persistence.xml","META-INF/persistence.xml").addPackages(false,Adr.class.getPackage(),Service.class.getPackage());
           EnterpriseArchive earArchive = …
Run Code Online (Sandbox Code Playgroud)

java-ee java-ee-6 jboss-arquillian weblogic12c

2
推荐指数
1
解决办法
2万
查看次数

我什么时候需要在web.xml中包含Jersey ServletContainer以启用JAX-RS?

我什么时候需要在web.xml中包含以下代码段才能激活Jersey?

<servlet>
    <servlet-name>Jersey App</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.company.rest</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
Run Code Online (Sandbox Code Playgroud)

是App.如果Jersey默认激活或需要此web.xml条目,则依赖于服务器?

如果是应用程序.服务器不需要上面的代码,我可以配置servlet映射路径,如:

<servlet-mapping>
    <servlet-name>Jersey App</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

java rest jersey java-ee java-ee-6

2
推荐指数
1
解决办法
7058
查看次数