小编Zec*_*tes的帖子

在Glassfish上的EAR文件中查找EJB3的JNDI

我有一个包含大量JAR的EAR文件,其中一个JAR包含Local Session Beans(EJB3).我需要从非托管POJO中执行这些会话Bean的JNDI查找,这些POJO也包含在EAR中(在这种情况下也与EJB中的JAR相同).我尝试了遵循Glassfish EJB FAQ,但无论我尝试什么,我都会继续收到javax.naming.NameNotFoundException.

我不确定一些事情.我应该在哪里放置我的ejb-jar.xml(我尝试过EARs META-INF以及JARs META-INF)?我需要sun-ejb-jar.xml吗?究竟什么是ejb-link,它做了什么?我可能做错了什么(我的配置几乎与常见问题解答中给出的本地查找相同)?

我列出了我尝试的一些配置和结果如下:

<enterprise-beans>
  <session>
    <ejb-name>ITestBean</ejb-name>
    <ejb-class>com.test.TestBean</ejb-class>
    <ejb-local-ref>
      <ejb-ref-name>ITestBean</ejb-ref-name>
      <local>com.test.ITestBean</local>
    </ejb-local-ref>
  </session>
 </enterprise-beans>
Run Code Online (Sandbox Code Playgroud)

应用程序部署但JNDI查找返回null.

<enterprise-beans>
  <session>
    <ejb-name>ITestBean</ejb-name>
    <ejb-class>com.test.TestBean</ejb-class>
    <ejb-local-ref>
      <ejb-ref-name>ITestBean</ejb-ref-name>
      <local>com.test.ITestBean</local>
      <ejb-link>ITestBean</ejb-link>
    </ejb-local-ref>
  </session>
 </enterprise-beans>
Run Code Online (Sandbox Code Playgroud)

应用程序未部署:无法确定EJB 3.0 ref的未解决的Ejb-Ref ITestBean @ jndi的本地业务与远程业务指定.

<enterprise-beans>
  <session>
    <ejb-name>ITestBean</ejb-name>
    <ejb-class>com.test.TestBean</ejb-class>
    <ejb-local-ref>
      <ejb-ref-name>ITestBean</ejb-ref-name>
      <local>com.test.ITestBean</local>
      <ejb-link>MyJar.jar#ITestBean</ejb-link>
    </ejb-local-ref>
  </session>
 </enterprise-beans>
Run Code Online (Sandbox Code Playgroud)

应用程序未部署:错误:未解决:MyJar.jar#ITestBean.

<enterprise-beans>
  <session>
    <ejb-name>ITestBean</ejb-name>
    <local>com.test.ITestBean</local>
    <ejb-local-ref>
      <ejb-ref-name>ITestBean</ejb-ref-name>
    </ejb-local-ref>
  </session>
 </enterprise-beans>
Run Code Online (Sandbox Code Playgroud)

处理EjbDescriptor时出错

java jndi local ejb-3.0

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

将多个元素作为一个单元触发 onBlur

我有两个输入,它们一起形成一个单一的语义单元(想想小时和分钟输入一起形成时间输入)。如果两个输入都失去焦点,我想调用一些 Javascript 函数,但如果用户只是在这两个输入之间跳转,我不想触发任何东西。

我试过将这两个输入包装在一个 div 中并向 div 添加一个 onBlur,但它永远不会触发。

接下来我尝试将 onBlurs 添加到两个输入并让它们通过 jQuery 检查另一个的 :focus 属性,但似乎当 onBlur 触发下一个元素还没有收到焦点。

关于如何实现这一目标的任何建议?

编辑:有人质疑这样做的目的。我想根据这两个输入包含的值更新其他一些字段,但理想情况下,如果用户仍在更新第二个输入的过程中(例如,如果从第一个输入到第二个输入的用户选项卡)。

javascript jquery

6
推荐指数
1
解决办法
6859
查看次数

在运行时扩展 JPA 实体数据

我需要允许客户端用户在运行时扩展 JPA 实体包含的数据。换句话说,我需要在运行时向实体表添加一个虚拟列。此虚拟列仅适用于某些数据行,并且可能存在相当多的此类虚拟列。因此,我不想在数据库中创建实际的附加列,而是想利用表示这些虚拟列的附加实体。

例如,请考虑以下情况。我有一个Company实体,它有一个标签为Owner的字段,其中包含对公司所有者的引用。在运行时,客户端用户决定属于特定所有者的所有公司都应具有标记为ContactDetails的额外字段。

我的初步设计使用两个额外的实体来实现这一点。第一个基本上代表虚拟列,包含字段名称和预期值类型等信息。另一个代表实际数据并将实体行连接到虚拟列。例如,第一个实体可能包含数据“ContactDetails”,而第二个实体可能包含“555-5555”。

这是做这件事的正确方法吗?有更好的选择吗?另外,在加载原始实体时自动加载此数据的最简单方法是什么?我希望我的 DAO 调用返回实体及其扩展

编辑:我从外地标记改变的例子类型可以是一个合作伙伴客户,以目前的版本,因为它混淆了。

java hibernate jpa runtime

5
推荐指数
1
解决办法
4770
查看次数

用于并发修改的Web前端设计

我正在创建一个具有一些管理屏幕的Web应用程序,用户可以在其中编辑记录(例如,更改用户的联系人详细信息).对这些管理屏幕的访问由角色控制,多个用户可能具有访问权限.现在出现的问题是如果两个用户同时尝试编辑同一记录该怎么办.

我的问题在于前端,而不是后端.我可以使用哪些模式来设计我的页面,以便用户友好并防止并发修改?我能想到的唯一两个选择是这些:

  • 悲观锁定:在大多数情况下,在能够释放锁定之前我需要等待会话超时的Web环境中很困难.
  • 乐观锁定:在用户友好性方面不是那么好,因为用户可能会填写一个大型表单,但最后只会遇到"无法保存"的消息.

有什么建议?

user-interface design-patterns locking

5
推荐指数
1
解决办法
2028
查看次数

单元测试“粘合”代码或没有任何实际逻辑的代码

我的问题将是一个简化的例子(在 Java 中):

public class VehicleRepository {
  // DAOs responsible for fetching objects from data store (injected)
  private IChassisDAO chassisDAO;
  private IEngineDAO engineDAO;
  private IWheelDAO wheelDAO;
  private IAccessoryDAO accessoryDAO;

  public Vehicle getLuxuryCar() {
    VehicleBuilder builder = getVehicleBuilder();
    builder.setChassis(chassisDAO.findBySize(ChassisSize.NORMAL));
    builder.setEngine(engineDAO.findByPower(EnginePower.HIGH));
    builder.setWheelTemplate(wheelDAO.findBySize(WheelSize.NORMAL));
    builder.setAccessories(accessoryDAO.findByType(Accessory.LUXURY));
    return builder.build();
  }

  public Vehicle getOffroadCar() {
    VehicleBuilder builder = getVehicleBuilder();
    builder.setChassis(chassisDAO.findBySize(ChassisSize.LARGE));
    builder.setEngine(engineDAO.findByPower(EnginePower.HIGH));
    builder.setWheelTemplate(wheelDAO.findBySize(WheelSize.LARGE));
    return builder.build();
  }

  // Similar operations ...
}
Run Code Online (Sandbox Code Playgroud)

你会如何对这个类进行单元测试?我想了一会儿,我已经确定了几个选项:

在不模拟构建器的情况下测试返回的 Vehicle
从接口的角度来看,这是最好的选择,但它不会是 VehicleRepository 上的孤立单元测试。与仅测试 VehicleBuilder 相比,我看不出将 VehicleRepository 与 VehicleBuilder 一起测试有什么真正的好处。VehicleBuilder 也可能具有复杂的逻辑(例如检查存在哪些附件),这会导致多个执行路径,这将使 VehicleRepository 的测试变得非常复杂。

重构代码以测试构建器的状态
一个示例是将 …

java unit-testing

5
推荐指数
1
解决办法
1574
查看次数

使用c3p0,Oracle和Hibernate重复出现明显的死锁

我们的生产系统经常出现明显的僵局,我们似乎无法深入到底.我们无法跟踪在线用户数量的任何相关性,似乎我们的可用连接不足.

我们有一个Java EE应用程序通过Hibernate和c3p0连接到Oracle.我们的c3p0配置是:

minPoolSize=10
maxPoolSize=300
initialPoolSize=30
acquireIncrement=10
maxIdleTime=1800
maxStatementsPerConnection=0
numHelperThreads=5
Run Code Online (Sandbox Code Playgroud)

明显的死锁日志输出总是看起来或多或少像这样:

[com.mchange.v2.async.ThreadPoolAsynchronousRunner] (Timer-1) com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@4c9f1b4d -- APPARENT DEADLOCK!!! Complete Status:
    Managed Threads: 5
    Active Threads: 5
    Active Tasks:
            com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@7fe1ab86 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1)
            com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@38c42c01 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2)
            com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@572512c4 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#4)
            com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@42f32e8e (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0)
            com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@6b758ef8 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#3)
    Pending Tasks:
            com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@72fd72e5
            com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@5d82535d
            com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@172f2ea1
            com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@1a9e57eb
            com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@20ee5a35
Run Code Online (Sandbox Code Playgroud)

实际的池线程堆栈跟踪有所不同,我在下面添加了一些示例:

Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#4,5,jboss]
            java.lang.AbstractStringBuilder.<init>(AbstractStringBuilder.java:45)
            java.lang.StringBuilder.<init>(StringBuilder.java:80)
            oracle.net.ns.Packet.<init>(Packet.java:513)
            oracle.net.ns.ConnectPacket.<init>(ConnectPacket.java:64)
            oracle.net.ns.NSProtocol.connect(NSProtocol.java:278)
            oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042)
            oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301)
            oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
            oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
            oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
            oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
            com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
            com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
            com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)

Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2,5,jboss]
            oracle.jdbc.driver.T4CTTIoauthenticate.processRPA(T4CTTIoauthenticate.java:491)
            oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:295)
            oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
            oracle.jdbc.driver.T4CTTIoauthenticate.doOSESSKEY(T4CTTIoauthenticate.java:390)
            oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:356)
            oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
            oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
            oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
            oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
            com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
            com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
            com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
            com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:1

Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1,5,jboss]
            oracle.net.ns.NSProtocol.connect(NSProtocol.java:346)
            oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042)
            oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301)
            oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
            oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221) …
Run Code Online (Sandbox Code Playgroud)

oracle connection-pooling c3p0

5
推荐指数
1
解决办法
6178
查看次数

单元测试:DRY与可预测性

我们是否应该针对DRY,在某种意义上,功能的变化会影响尽可能少的代码,在编写单元测试时,我们的可预测性,即代码的操作是微不足道的?基本上我要问的是创建辅助方法之间的权衡,这些方法非常通用,可以由多个单元测试使用,而不是只将测试代码限制在单个单元测试中.举个例子来看一个具有以下方法签名的工厂:

public Node buildNode(String path, String name, Map<String, Object> attributes);
Run Code Online (Sandbox Code Playgroud)

根据提供的参数,生成的Node对象将不同,因此我们需要测试不同的可能性.如果我们的目标是可预测性,我们可能会编写第一个示例中给出的两个独立的单元测试,但如果我们的目标是DRY,我们宁愿添加一个常见的辅助方法,例如在第二个示例中:

EXAMPLE1:
@Test
public void testBuildBasicNode() {
  Node node = testee.buildNode("/home/user", "Node", null);
  assertEquals("/home/user/Node", node.getAbsolutePath());
  assertEquals(false, node.isFolder());
}

@Test
public void testBuildAdvancedNode() {
  Map<String, Object> attributes = new HashMap<String, Object>();
  attributes.put("type", NodeType.FOLDER);
  Node node = testee.buildNode("/home/user", "Node", attributes);
  assertEquals("/home/user/Node", node.getAbsolutePath());
  assertEquals(true, node.isFolder());
}

EXAMPLE2:
@Test
public void testBuildBasicNode() {
  Node node = testee.buildNode("/home/user", "Node", null);
  Node comparisonNode = buildComparisonNode("/home/user", "Node", null);
  assertEquals(comparisonNode, node);
}

@Test
public void testBuildAdvancedNode() {
  Map<String, …
Run Code Online (Sandbox Code Playgroud)

unit-testing

4
推荐指数
1
解决办法
649
查看次数

如何将Git分支标记为合并而不添加历史记录(Git merge -s ours --squash)

我有两个分支,它们有效地包含相同的文件,但由于遗留原因它们是分开的.称他们为A和B.

如果我运行git log --oneline A ^BGit输出114提交,这是预期的.

然后我可以git merge -s ours --allow-unrelated-histories A在分支B上运行,它向Git指示A已经合并到B而没有对结束文件状态进行任何更改.这是有效的,除了B现在接收这114个提交作为其历史的一部分(git log).

如何在不引入A的所有历史记录的情况下将A标记为合并到B?

我试过git merge --squash -s ours --allow-unrelated-histories A跟着git commit,但这没有任何影响.

概念上压缩-s ours提交应该给我我想要的东西,但它不起作用.

git

3
推荐指数
1
解决办法
84
查看次数

用于EJB应用程序的Java Profiler

我有一个Web应用程序部署到本地Glassfish服务器,我想分析,以便查看我的代码的哪些部分最常访问.该代码由JSF bean和远程EJB组成,两者都部署在单个EAR中.我尝试使用VisualVM来分析我的应用程序,但是,尽管我可以成功连接到Glassfish服务器以及我的上下文根,但VisualVM似乎并不会分析我自己的类(在com.test.*命名空间中).我看到很多Sun类和其他依赖项如Lucene被访问,但不是我自己的类的单个实例.

我的问题是:我做错了什么,或者这是VisualVM的一个缺点,我应该尝试使用不同的分析工具吗?

java profile performance ejb visualvm

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

您可以在其中提交Scala代码并进行审核的网站

有没有人知道一个网站,新闻组,留言板等,我可以提交一些我的Scala代码让经验丰富的Scala开发人员"审查"它?代码工作和诸如此类的东西,但我真的想学习在编写Scala时更加惯用,而且我常常发现自己正在回归更加迫切的开发,因为我找不到"更好的方法".

scala review

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