我们处于获得Java EE6的边缘(Glassfish v3作为参考实现).计划发布时间是09年12月.虽然仍有相当多的公司正在努力将其代码库转移到EE5(从早期版本),但我们正处于开始开发新产品的奢侈状态,并且可以选择以EE6作为平台来实现.这可能会在稍后阶段避免迁移工作,并受益于EE6中的所有权限化功能.
反对或几个问题(在最前沿做事时,又称使用EE6):
一个通用的问题,不会产生具体的答案,但也许你对这个主题的看法?
斯文
我使用的重要技术有:Glassfish v3,JSF 2.0,JPA 2.0,EclipseLink 2.0.2,log4j 1.2.16,commons-logging 1.1.1.
我的问题是应用程序的某些部分非常慢.我用netbeans 6.8分析功能对此进行了分析.
I.记录 - 我使用log4j和apache commons记录在日志记录文件和控制台中生成日志.日志也出现在glassfish的服务器日志中.我使用记录器如下:
private static Log logger = LogFactory.getLog(X.class);
...
if (logger.isDebugEnabled()) {
...
logger.debug("Log...");
}
Run Code Online (Sandbox Code Playgroud)
问题是,有时这样的短语需要花费很多时间(大约800毫秒).当我切换到java.util.logging时,它不是那么糟糕但也很慢(200毫秒乐队).有什么问题?我需要一些日志记录... 更新 - 从Netbeans 6.8切换到Netbeans 6.9.1后解决了慢速日志记录的问题. - 当日志打印到其控制台时,Netbeans 6.8可能非常慢?!所以它与Log4J或公共记录没有任何关系.
II.数据库操作:我第一次调用以下EJB的find方法需要2,4秒!其他呼叫仅持续几毫秒.那么为什么第一次手术需要很长时间?这是(仅仅因为)连接建立还是与XFacade的依赖注入有关,以及这些注射何时执行?:
@Stateless
@PermitAll
public class XFacade {
@PersistenceContext(unitName = "de.x.persistenceUnit")
private EntityManager em;
// Other DI's
...
public List<News> find(int maxResults) {
return em.createQuery(
"SELECT n FROM News n ORDER BY n.published DESC").setMaxResults(maxResults).getResultList()
}
}
Run Code Online (Sandbox Code Playgroud)
III.依赖注入,JNDI查找:DI之间是否存在差异(@EJB ...)和关注性能的InitialContext查找?注入本地,远程和无接口EJB之间是否存在差异(性能视图)?
IV.托管豆 …
@Path(value = "/user")
@Stateless
public class UserService {
@Inject
private UserManager manager;
@Path(value = "/create")
@GET
@Produces(value = MediaType.TEXT_PLAIN)
public String doCreate(@QueryParam(value = "name") String name) {
manager.createUser(name);
return "OK";
}
}
Run Code Online (Sandbox Code Playgroud)
这是用户管理器impl
public class UserManager {
@PersistenceContext(unitName = "shop")
private EntityManager em;
public void createUser(String name) {
User user = new User();
user.setName(name);
// skip some more initializations
em.persist(user);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是如果我没有将UserService标记为@Stateless,那么manager字段为null
但如果我标记@Stateless,我可以注入管理器字段,并且应用程序工作,因为我可以将数据保存到数据库中
只是想知道,这背后的原因是什么?
这是连接应用程序的首选方式吗?
好吧,我正在考虑将EntityManager拉出到生产者,以便它可以共享
我正在为一些客户开发JEE6项目,他让我创建了一个非常简单的电子商务商店.我不太熟悉在线汇款,我想让客户能够将资金转账到我的银行账户(直接银行账户),然后再将他们购买的产品(Classic e-shop)邮寄给他们.我对付款网关或结账系统的工作方式了解不多.我想知道是否有人能给我一些关于我开始进入电子商务领域需要知道什么的提示?如果我能清除一些我心中的疑虑,我也会很高兴:
我在JEE6编程,是否需要任何API才能进行银行转账?
我是否需要第三方软件?如果是这样,您能推荐我使用其中一种软件吗?
电子支付的第三方软件如何运作?
在JEE6应用程序中集成第三方支付软件的过程是否复杂?
我使用glassfish V3.0 app服务器.电子支付涉及的是否有任何限制.
我道歉,如果有些疑点听起来有些奇怪或与主题无关,但正如我所说,我对电子商务话题没有经验,我觉得有点迷茫.
我会感激一些帮助.
部署我的应用程序时出现错误,如下所示.
Caused by: org.jboss.weld.exceptions.AmbiguousResolutionException: WELD-001318 Cannot resolve an ambiguous dependency between [
Producer Method [String] with qualifiers [@Any @Config] declared as [[method] @Produces @Config public ca.comdev.cdip.mis.enterpriseportal.configuration.ConfigurationProvider.getConfigurationValue(InjectionPoint)],
Producer Method [String] with qualifiers [@Any @Config] declared as [[method] @Produces @Config public ca.comdev.cdip.mis.enterpriseportal.configuration.ConfigurationProvider.getConfigurationValue(InjectionPoint)]]
Run Code Online (Sandbox Code Playgroud)
我只有这样的方法,其标题看起来像这样
@Produces @Config public String getConfigurationValue(InjectionPoint p) throws ConfigurationException{...}
Run Code Online (Sandbox Code Playgroud)
和班级有这些
@Named
@Singleton
@Startup
public class ConfigurationProvider {...}
Run Code Online (Sandbox Code Playgroud)
请帮忙.这个错误可能比我的代码更模糊.
我正在编写基于JSON的Web服务.该服务将接受两种类型的请求:命令(例如createOrder)和查询(例如getOrders).每个请求都需要发送用户凭据(用户名/密码)进行身份验证(可能在HTTP头中).该服务需要用Java实现.
您会为此用例推荐哪些框架?我正在考虑的非常基本的堆栈是由像Jackson这样的JSON框架支持的servlet.它们是您推荐的其他框架吗?为什么?没有必要或希望使服务RESTful,但是与Java EE 6或Spring的顺利集成将是一个优势.
在此先感谢您的时间.
我使用的是最新版本的GlassFish.我想在响应中设置Access-Control-Allow-Origin标头,以便可以从任何域调用我在GlassFish上托管的API.但我无法找到设置它的位置.
我试图在心理上将Java EE 6 组,用户和角色的安全概念映射到Apache Shiro的角色,用户和权限的概念,我的理解是它们是不兼容的.
阅读Java EE 6安全教程,似乎模型限制性过于严格:基于每个服务器而不是每个应用程序配置组,这实际上只留下了两个灵活的概念来表达授权机制:用户和角色,存在于简单的1对N关系中.相比之下,Shiro的角色模型,用户和权限更加动态,因为它使得人们能够在注释的代码中硬编码权限,并在事情发生变化或引入新角色时在运行时修改角色到权限的映射.我不知道如何根据Java EE 6模型对容器管理的授权做同样的事情.
我的理解是否正确?因为这意味着使用容器管理的授权不能真正走得太远.
我有一个组件,我想在用户点击后显示/隐藏commandButton.
就像这样:
<h:commandButton id="showButton" value="#{bean.wasPressed ? 'Hide' : 'Show'}">
<f:ajax listener="#{bean.toggle()}" render="explanation showButton" />
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)
和
<h:panelGroup id="explanation" rendered="#{bean.wasPressed}">
<h:outputText value="something" />
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
在bean.toggle()简单地设置wasPressed属性为true或false适当.我在用<h:form prependId="false">.
问题是render我的按钮属性的值.它明确地征服了两者:explanation和showButton.
只要showButton始终存在(它只更改其标签),explanation仅当wasPressed属性为true 时才存在.否则它说:
malformedXML:更新期间:找不到解释
我怎么解决这个问题?
我不想恢复隐藏源代码中的元素,所以我不想使用任何jQuery切换( - )或任何使用style="display: none"或任何这些东西隐藏元素的方式.
它甚至可以在JSF 2.1中实现吗?
我是Java EE 6的新手,所以如果这个问题的答案显而易见,我会道歉.我有一个必须每小时运行一次从数据库重建Solr索引的任务.我还希望在部署应用程序时进行重建.我的直觉是这应该有效:
@Singleton
@Startup
public class Rebuilder {
@Inject private ProposalDao proposalDao;
@Inject private SolrServer solrServer;
@Schedule(hour="*", minute="0", second="0")
public void rebuildIndex() {
// do the rebuild here
}
}
Run Code Online (Sandbox Code Playgroud)
因为我正在使用myBatis,所以我写了这个制作人:
public class ProposalSessionProvider {
private static final String CONFIGURATION_FILE = "...";
static {
try {
sessFactory = new SqlSessionFactoryBuilder().build(
Resources.getResourceAsReader(CONFIGURATION_FILE));
}
catch (IOException ex) {
throw new RuntimeException("Error configuring MyBatis: " + ex.getMessage(), ex);
}
}
@Produces
public ProposalsDao openSession() {
log.info("Connecting to the database");
session = sessFactory.openSession(); …Run Code Online (Sandbox Code Playgroud) java-ee-6 ×10
java ×4
java-ee ×4
cdi ×2
glassfish-3 ×2
ajax ×1
e-commerce ×1
ejb ×1
enterprise ×1
facelets ×1
glassfish ×1
jackson ×1
java-ee-5 ×1
jax-rs ×1
jboss-weld ×1
jpa ×1
jsf-2 ×1
json ×1
logging ×1
mybatis ×1
performance ×1
shiro ×1
show-hide ×1
spring ×1