在为生产环境准备WAR时,是否存在用于打包JSP的“标准”实践? 它们是否包含在“.jsp”文件中? 或者它们是作为预编译的Java文件还是预编译的类文件包含在内?
我已经下载了JBoss EAP 6.1,我将添加一个新的数据源。 我必须将数据源绑定到JNDI名称。 通过读取示例数据源的JNDI名称,该名称是: java:jboss/datasources/ExampleDS 我看到他们在java:jboss之后使用了datasources 。 这只是一个命名约定 – 我无法在任何地方找到 – 或者使用java:jboss/bananaboat/MyDS是不是很好java:jboss/bananaboat/MyDS ? 下面列出的第一部分是正确的 – 例如java:comp是范围而其余部分只是普通的层次结构组织? java:comp/ – The namespace is scoped to the current component (ie EJB) java:module/ – Scoped to the current module java:app/ – Scoped to the current application java:global/ – Scoped to the application server https://docs.jboss.org/author/display/AS71/JNDI+Reference
从本质上讲,这两个类之间有什么区别: @ApplicationScoped @Singleton class A {} @Dependent @Singleton class B {} 上下文EJB实例 在查找EJB时,我不想使用@Inject ,除非EJB是@Stateful ,我希望CDI容器管理有状态的生命周期,这可能非常方便。 否则,使用@Inject检索上下文EJB实例有点危险。 例如,除非我们也编写生产者,否则无法使用CDI检索@Remote客户端视图。 此外,A类和B类不能声明任何其他范围而不是它们目前的范围。 CDI 1.1 ,“3.2会话bean”部分说: 单例bean必须属于@ApplicationScoped范围或@Dependent伪范围。 如果会话bean指定了非法范围,容器会自动检测问题并将其视为定义错误。 因此,除了有状态bean之外,当我去寻找EJB时,我认为使用CDI毫无意义。 一个更成熟的问题版本 从客户端代码的角度来看,使用@Inject来声明对A或B的依赖,我无法想象存在差异。 在这两种情况下,调用都将路由到单例EJB。 如果我是CDI提供者的实现作者,那么我甚至可能在两种情况下注入真正的EJB代理并忽略将来要求销毁依赖CDI代理的调用? 底线是我们可以在EJB单例类上声明两个不同的范围。 那有什么区别?
我正在努力熟悉JavaEE。 我对每个“组件”(缺少一个更好的词)的目的有点困惑:Session Beans和Servlets,以及它们如何与Web应用程序(客户端JavaScript)正确交互。 为了理解这一点,我正在构建一个简单的Web应用程序。 使用每个组件构建类似于以下内容的首选方法是什么: 用户访问“登录”页面 用户输入数据和点击提交。 然后我用AJAX发送请求以登录用户。 然后,服务器端validation用户输入并“记录”用户(返回用户配置文件等) 发送请求时,是将其发送到Servlet(使用EJB)还是通过WSDL发送到会话Bean? 如何使用这两种方法为该用户维护“状态”? 我认为使用Session Beans就像使用@Stateful注释它一样简单。 此外,我假设从客户端发送的请求必须是SOAP格式。 使用更轻量级的东西(比如JSON)有多容易? 虽然我更喜欢使用轻量级的东西,但是如果SOAP使开发更快/更容易,则没有必要。
据我所知,java EE应用服务器主要有两种类型的容器。 即Web容器和EJB容器。 我设法运行一个JAX-RS应用程序,它在Tomcat中使用Jersey作为它的实现。 据我所知,Tomcat只是一个Web容器。 为了在tomcat中运行web服务,必须将jersey jars捆绑到war文件中,因为开箱即用,Tomcat没有jersey jars。 这提出了一个问题。 tomcat是否使用除Jersey之外的其他JAX-RS实现? 如果是的话是什么? 如果不, 如果没有将jars捆绑到war文件中,我无法运行Jax-RS应用程序,这意味着JAX-RS应用程序需要的东西比Web容器提供的更多。 这意味着它们不会在Web容器中运行。 那么它在哪个容器中运行?
我在LightBox中使用Form,其中包含一些输入元素。 当我提交表格而不是表格重定向到它的行动地点时。 我只是想在不重定向用户的情况下提交表单,因此用户可以在灯箱上停留而不会丢失他的数据。 我已经尝试过jquery ajax调用 var data = new FormData(); var $inputs = $(‘#imageUploadForm :input’); var values = {}; $inputs.each(function() { values[this.name] = $(this).val(); data.append(this.name, $(this).val()); }); $.ajax({ url: ‘uploadImage.do’, data: data, cache: false, contentType: ‘multipart/form-data’, processData: false, type: ‘POST’, success: function(data){ alert(data); } }); 但是在我的FileUploader servlet中获取服务器端的错误。 The request was rejected because no multipart boundary […]
用户成功通过身份validation,但在进入下一个控制器后进行身份validation后,我获得了request.getUserPrincipal() null。 我正在使用websphere 7,我的应用程序是在spring mvc。 System.out.println(“subject.getPrincipals(): ” + subject.getPrincipals()); WSSubject.setRunAsSubject(subject); 在登录控制器中进行身份validation后,subject.getPrincipals()返回principal,但是当我转到下一个控制器时,我得到request.getUserPrincipal() null。 web.xml中 Administrator manager_Service manageservice /manageServiceList.htm Administrator CONFIDENTIAL application.xml中 Administrator IBM应用-bnd.xml 用户属于管理员组。 我的所有部署描述符都设置得很好。 知道我哪里弄错了吗?
我在Sun Application Server 8.1(又名SJSAS,Glassfish的前身)上运行了一个有点过时的Java EE应用程序。 有500多个并发用户,应用程序变得非常缓慢,我正在尝试帮助确定大部分执行时间花在哪里以及可以采取哪些措施加快速度。 到目前为止,我们一直在使用LoadRunner,应用服务器日志,Oracle statpack,snoop,调整应用服务器接受器和会话(工作线程)线程,调整Hibernate批量大小和连接获取使用等进行实验和测量,但经过一些初步收益我们正在努力改善问题。 好的,通过对问题的介绍,这里有一个真正的问题:如果你的CPU和内存使用从未超过20%的盒子上运行的Java EE应用程序速度慢,而且在运行500多个用户时你会看到两件事:1)在相同的应用服务器JVM进程中请求甚至静态文件的速度非常慢,2)请求在应用服务器JVM进程之外但在同一个盒子上的静态文件很快,你会调查什么? 我的想法最初跳到应用程序服务器线程,包括接受器和会话线程,认为即使对静态文件的请求正在排队,等待可用的线程,如果CPU /内存没有真正征税,那么更多的线程按顺序排列。 但随后我们大幅提升了接受者和会话线程,并没有任何改进。 澄清编辑: 1)静态文件应由Web服务器而不是app服务器提供。 我使用的事实是,在我们的情况下,这(不幸的是)不是配置,以便我可以看到它不执行的文件的应用程序服务器性能 – 因此排除任何数据库性能成本等。 2)我认为请求者和应用服务器之间没有代理,但即使它没有被重载,因为从同一应用服务器机器请求但在应用程序的JVM实例之外的静态文件立即返回。 3)JVM堆大小(Xmx)设置为1GB。 谢谢你的帮助!
我有一个MDB(消息驱动的bean),它接收带有String的消息,代表一个单词。 我在数据库中也有一个表。 MDB应该在表格中存储单词和每个单词被接收的次数(计数器)。 问题是为了获得更好的性能,MDB在许多实例中启动,并且当不同实例接收到相同的新单词时,它们都创建计数为1的同一行。 为了解决这个问题,我应该使单词字段唯一,然后第二个实例将在提交时失败,重新传输消息,这将起作用,但可能有问题。 这是一个好习惯吗? 另一种解决方案是在对计数器求和之后合并这些线。 但是如果另一个实例会在更新过程中增加计数器呢? 如果两个实例试图增加计数器怎么办? @Version应该够了吗? 我不确定这里的解决方案是什么。 你会如何处理这类案件? 您也可以建议一些关于并发实践的书籍(不是因为我需要支持Java EE而使用synchronized ,而是可能运行应用程序服务器集群)? 更新:在阅读了有关EJB和JPA的更多信息之后,我想我想要一个类似锁定实体的东西。 例如,我可以创建一个只有id和key列的新表,数据如下: ID | KEY 1 | WORDS_CREATE_LOCK 因此,当我需要处理一个新单词时,我会做这样的事情(不是确切的代码,不确定它甚至会编译): // MAIN FUNCTION public void handleWord(String wordStr) { Word w = getWord(wordStr); if (w == null) w = getNewOrSychronizedWord(wordStr); em.lock(w); w.setCounter(w.getCounter() + 1); em.unlock(w); } // Returns Word instance or null […]
对于我们的一个应用程序,我编写了一个使用java的DOM解析器的实用程序。 它基本上采用XML文件,解析它,然后使用以下方法之一处理数据以实际检索数据。 getElementByTagName() getElementAtIndex() getFirstChild() getNextSibling() getTextContent() 现在我必须做同样的事情,但我想知道使用XSLT样式表是否会更好。 向我们发送XML文件的组织不断更改其架构意味着我们必须更改我们的代码以满足这些shema更改。 我不太熟悉XSLT进程,所以我试图找出是否更好地使用XSLT样式表而不是“手动解析”。 XSLT样式表看起来很有吸引力的原因是我认为如果XML文件的架构发生变化,我只需要更改样式表吗? 它是否正确? 另一件我想知道的是两者中的哪一个(XSLT转换器或DOM解析器)性能更好。 对于手动选项,我只使用DOM解析器来解析xml文件。 XSLT转换器如何实际解析文件? 与手动解析xml文件相比,它是否包含额外的开销? 我问的原因是性能很重要,因为我将处理的数据的性质。 任何建议? 谢谢 编辑 基本上我目前正在做的是解析一个xml文件并处理一些xml元素中的值。 我不会将xml文件转换为任何其他格式。 我只是提取一些值,从Oracle数据库中提取一行并将一个新行保存到另一个表中。 我解析的xml文件只包含用于从数据库中检索某些数据的引用值。 xslt不适合这种情况吗? 如果架构发生变化,是否有更好的方法可以避免代码更改? 编辑2 对于我对XML数据所做的事情不够清楚而道歉。 基本上有一个包含一些信息的XML文件。 我从XML文件中提取此信息,并使用它从本地数据库中检索更多信息。 xml文件中的数据更像是数据库中所需数据的引用键。 然后,我使用XML文件中的特定密钥获取从XML文件中提取的内容以及从数据库中检索的内容,并将该数据保存到另一个数据库表中。 我遇到的问题是我知道如何编写一个DOM解析器来从XML文件中提取我需要的信息,但我想知道是否使用XSLT样式表是一个更好的选择,因为如果架构更改我不会更改代码。 阅读下面的回复听起来像XSLT仅用于转换和XML文件到另一个XML文件或其他格式。 鉴于我不打算转换XML文件,可能不需要添加解析XSLT样式表以及XML文件的额外开销。